[{"id":"fd0ecc78.cd9a6","type":"subflow","name":"triplesToVirtuoso (3)","info":"","in":[{"x":176,"y":78,"wires":[{"id":"5f229b84.b2af84"}]}],"out":[{"x":817,"y":402,"wires":[{"id":"e8b3adb9.97a86","port":0}]}]},{"id":"e13e92d9.46ba4","type":"http request","z":"fd0ecc78.cd9a6","name":"","method":"GET","ret":"txt","url":"","tls":"","x":477,"y":82,"wires":[[]]},{"id":"5f229b84.b2af84","type":"function","z":"fd0ecc78.cd9a6","name":"prepare A1 and A2","func":"//var wwwAuth=msg.headers[\"www-authenticate\"];\n//var a = wwwAuth.split(\"\\\"\")\nvar realm=\"SPARQL\"; //a[1];\nmsg.nonce=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"; //a[5].replace(\"a\",\"b\");\nmsg.opaque=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"; //a[7];\nmsg.A1=msg.user+\":\"+realm+\":\"+msg.passw;\n//msg.uri=\"/sparql-graph-crud-auth?graph-uri=urn:graph\";\nmsg.uri=\"\"\nmsg.A2=msg.method+\":\"+msg.uri\nreturn msg;","outputs":1,"noerr":0,"x":506,"y":150,"wires":[["18d0180.21216e8"]]},{"id":"18d0180.21216e8","type":"md5","z":"fd0ecc78.cd9a6","name":"md5 A1","fieldToHash":"A1","fieldTypeToHash":"msg","hashField":"A1_md5","hashFieldType":"msg","x":473,"y":201,"wires":[["1a2d54ad.d7792b"]]},{"id":"1a2d54ad.d7792b","type":"md5","z":"fd0ecc78.cd9a6","name":"md5 A2","fieldToHash":"A2","fieldTypeToHash":"msg","hashField":"A2_md5","hashFieldType":"msg","x":470,"y":251,"wires":[["5c8af3cf.702c8c"]]},{"id":"5c8af3cf.702c8c","type":"function","z":"fd0ecc78.cd9a6","name":"prepare A3","func":"msg.A3=msg.A1_md5+\":\"+msg.nonce+\":\"+msg.A2_md5\nreturn msg;","outputs":1,"noerr":0,"x":477,"y":305,"wires":[["f0ea9b6c.a953f8"]]},{"id":"f0ea9b6c.a953f8","type":"md5","z":"fd0ecc78.cd9a6","name":"md5 A3","fieldToHash":"A3","fieldTypeToHash":"msg","hashField":"md5","hashFieldType":"msg","x":469,"y":359,"wires":[["c49902d2.2ddff"]]},{"id":"c49902d2.2ddff","type":"function","z":"fd0ecc78.cd9a6","name":"","func":"msg.headers={};\nmsg.headers[\"Authorization\"]=\"Digest username=\\\"\"+msg.user+\"\\\", realm=\\\"SPARQL\\\", nonce=\\\"\"+msg.nonce+\"\\\", opaque=\\\"\"+msg.opaque+\"\\\", uri=\\\"\"+msg.uri+\"\\\", response=\\\"\"+msg.md5+\"\\\"\"\nmsg.payload=msg.triples\n\nreturn msg;","outputs":1,"noerr":0,"x":457,"y":403,"wires":[["e8b3adb9.97a86"]]},{"id":"e8b3adb9.97a86","type":"http request","z":"fd0ecc78.cd9a6","name":"","method":"use","ret":"txt","url":"","tls":"","x":667,"y":402,"wires":[[]]},{"id":"8db94f43.9a32b","type":"comment","z":"fd0ecc78.cd9a6","name":"implementing digest authentication","info":"Virtuoso supports only digest authentication \nand not basic authentication.\nBut in this version of nodered the http request \nsupports only basic authentication, this flow \nimplemnents the digest auth using the md5 node.","x":549,"y":33,"wires":[]},{"id":"2f44f695.6d089a","type":"comment","z":"82b90bac.0397c8","name":"Static data generation","info":"","x":900,"y":360,"wires":[]},{"id":"af2ece1b.f71ea","type":"http in","z":"82b90bac.0397c8","name":"","url":"/simple","method":"get","upload":false,"swaggerDoc":"","x":237,"y":125,"wires":[["280b0551.9af07a"]]},{"id":"280b0551.9af07a","type":"template","z":"82b90bac.0397c8","name":"html","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"

This page is a service for generating triples from CSV files of POI

\n\n

please upload a CSV file according to the instructions of page https://www.snap4city.org/589 :

\n\n

you are going to receive an email with a file to be loaded in your KB:

\n\n
\n email:
\n ITA:
\n \n \n
","output":"str","x":577,"y":125,"wires":[["73a087e9.967de8"]]},{"id":"73a087e9.967de8","type":"http response","z":"82b90bac.0397c8","name":"","x":717,"y":125,"wires":[]},{"id":"fe7c914b.afffe","type":"http response","z":"82b90bac.0397c8","name":"","x":757,"y":185,"wires":[]},{"id":"42786fa0.06076","type":"http in","z":"82b90bac.0397c8","name":"","url":"/upload","method":"post","upload":true,"swaggerDoc":"","x":237,"y":185,"wires":[["d3176132.37d63"]]},{"id":"86a5d69.d590f28","type":"template","z":"82b90bac.0397c8","name":"html","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"

File {{name}} uploaded !

\n\n

Contents:

\n\n
\n{{{payload}}}\n
","output":"str","x":626,"y":186,"wires":[["fe7c914b.afffe"]]},{"id":"d3176132.37d63","type":"function","z":"82b90bac.0397c8","name":"toString","func":"msg.name = msg.req.files[0].originalname;\nmsg.to = msg.req.body.email\nmsg.ita_lang = msg.req.body.ita_lang\n\nif (msg.req.files[0].mimetype.includes('image')) {\n msg.payload = ``;\n} else {\n msg.payload = msg.req.files[0].buffer.toString();\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":451,"y":185,"wires":[["8779c2b8.81ad1"]]},{"id":"8779c2b8.81ad1","type":"csv","z":"82b90bac.0397c8","name":"","sep":";","hdrin":true,"hdrout":true,"multi":"mult","ret":"\\n","temp":"","x":624,"y":279,"wires":[["f192b34c.06e2f"]]},{"id":"f192b34c.06e2f","type":"function","z":"82b90bac.0397c8","name":"produce triples","func":"\nfunction toN3(suri,property,value,lang) {\n if(value) {\n if(lang)\n return \"<\"+suri+\"> <\"+property+\"> \\\"\"+value+\"\\\"@\"+lang+\" .\\n\";\n else\n return \"<\"+suri+\"> <\"+property+\"> \\\"\"+value+\"\\\" .\\n\";\n }\n return \"\";\n}\n\nvar n3=\"\"\nvar km4c=\"http://www.disit.org/km4city/schema#\";\nvar schema=\"http://schema.org/\";\nvar dcterms=\"http://purl.org/dc/terms/\"\nvar skos=\"http://www.w3.org/2004/02/skos/core#\"\nvar geo=\"http://www.w3.org/2003/01/geo/wgs84_pos#\"\nvar xsd=\"http://www.w3.org/2001/XMLSchema#\"\n\nvar ita_lang=msg.ita_lang\nvar errors=\"\"\nfor(var i=0;i a <\"+km4c+v.subCategory+\"> .\\n\";\n else {\n errors +=\"row \"+(i+2)+\" missing subcategory\\n\";\n }\n \n n3 += toN3(suri, dcterms+\"identifier\", v.id, \"\");\n\n if(!v.nameITA && !v.nameENG) {\n errors +=\"row \"+(i+2)+\" missing nameITA and nameENG\\n\"\n }\n n3 += toN3(suri, schema+\"name\", v.nameITA, ita_lang);\n n3 += toN3(suri, schema+\"name\", v.nameENG, \"en\");\n \n if(!v.latitude || !v.longitude) {\n errors += \"row \"+(i+2)+\" missing latitude or longitude\\n\"\n } else {\n n3+=\"<\"+suri+\"> <\"+geo+\"lat> \\\"\"+v.latitude+\"\\\"^^<\"+xsd+\"float> .\\n\";\n n3+=\"<\"+suri+\"> <\"+geo+\"long> \\\"\"+v.longitude+\"\\\"^^<\"+xsd+\"float> .\\n\";\n n3+=\"<\"+suri+\"> <\"+geo+\"geometry> \\\"POINT(\"+v.longitude+\" \"+v.latitude+\")\\\"^^ .\\n\";\n }\n \n n3 += toN3(suri, dcterms+\"subject\", v.otherCategoryITA, ita_lang);\n n3 += toN3(suri, dcterms+\"subject\", v.otherCategoryENG, \"en\");\n n3 += toN3(suri, km4c+\"shortDescription\", v.descriptionShortITA, ita_lang);\n n3 += toN3(suri, km4c+\"shortDescription\", v.descriptionShortENG, \"en\");\n n3 += toN3(suri, dcterms+\"description\", v.descriptionLongITA, ita_lang);\n n3 += toN3(suri, dcterms+\"description\", v.descriptionLongENG, \"en\");\n n3 += toN3(suri, km4c+\"shortName\", v.abbreviationITA, ita_lang);\n n3 += toN3(suri, km4c+\"shortName\", v.abbreviationENG, \"en\");\n \n n3 += toN3(suri, schema+\"telephone\", v.phone, \"\");\n n3 += toN3(suri, schema+\"otherTelephone\", v.secondPhone, \"\");\n n3 += toN3(suri, km4c+\"faxNumber\", v.fax, \"\");\n n3 += toN3(suri, km4c+\"otherFaxNumber\", v.secondFax, \"\");\n n3 += toN3(suri, schema+\"url\", v.url, \"\");\n n3 += toN3(suri, schema+\"email\", v.email, \"\");\n n3 += toN3(suri, km4c+\"otherEmail\", v.secondEmail, \"\");\n n3 += toN3(suri, km4c+\"referencePerson\", v.RefPerson, \"\");\n n3 += toN3(suri, schema+\"streetAddress\", v.streetAddress, \"\");\n n3 += toN3(suri, km4c+\"houseNumber\", v.civicNumber, \"\");\n n3 += toN3(suri, schema+\"postalCode\", v.postalcode, \"\");\n n3 += toN3(suri, schema+\"addressLocality\", v.city, \"\");\n n3 += toN3(suri, schema+\"addressRegion\", v.province, \"\");\n n3 += toN3(suri, km4c+\"otherStreetAddress\", v.secondStreetAddress, \"\");\n n3 += toN3(suri, km4c+\"otherHouseNumber\", v.secondCivicNumber, \"\");\n \n n3 += toN3(suri, skos+\"note\", v.notes, \"\");\n n3 += toN3(suri, schema+\"openingHours\", v.timetable, \"\");\n n3 += toN3(suri, km4c+\"multimediaResource\", v.photo, \"\");\n\n n3 += \"\\n\";\n}\nif(!errors)\n msg.payload = n3;\nelse\n msg.payload = \"\"\nmsg.errors = errors\n\nreturn msg;\n\n","outputs":1,"noerr":0,"x":655,"y":375,"wires":[["eb6b8538.a640b8"]]},{"id":"86b1dbe1.2e70d8","type":"e-mail","z":"82b90bac.0397c8","server":"smtp.gmail.com","port":"465","secure":true,"name":"","dname":"send email from xxxxxxxx","x":945,"y":465,"wires":[]},{"id":"eb6b8538.a640b8","type":"function","z":"82b90bac.0397c8","name":"Email adapting","func":"msg.topic = \"km4city POI upload \"+msg.name\nif(!msg.errors) {\n msg.payload = Buffer.from(msg.payload);\n msg.filename = \"Triples.n3\";\n msg.description = msg.errors\n} else {\n msg.payload = \"Errors:\\n\"+msg.errors\n}\nreturn msg;","outputs":1,"noerr":0,"x":662,"y":465,"wires":[["86b1dbe1.2e70d8","966bfc6c.b2a05"]]},{"id":"7c551c23.a29334","type":"subflow:fd0ecc78.cd9a6","z":"82b90bac.0397c8","name":"","x":823,"y":675,"wires":[["7e205ec7.5bd3"]]},{"id":"6119b5ec.edb52c","type":"function","z":"82b90bac.0397c8","name":"prepare DELETE graph","func":"if(!msg.errors) {\n msg.triples = msg.payload;\n msg.user = \"dba\";\n msg.passw = \"dba\";\n msg.method = \"DELETE\";\n msg.url = \"http://192.168.1.119:8890/sparql-graph-crud-auth?graph-uri=urn:graph:\"+msg.name;\n return msg;\n}","outputs":1,"noerr":0,"x":835,"y":603,"wires":[["7c551c23.a29334"]]},{"id":"7e205ec7.5bd3","type":"function","z":"82b90bac.0397c8","name":"prepare POST","func":"if(msg.statusCode==200 || msg.statusCode==404) {\n msg.user = \"dba\";\n msg.passw = \"dba\";\n msg.method = \"POST\";\n msg.url = \"http://192.168.1.119:8890/sparql-graph-crud-auth?graph-uri=urn:graph:\"+msg.name;\n return msg;\n}","outputs":1,"noerr":0,"x":812,"y":745,"wires":[["fa1ddbca.4e60e8"]]},{"id":"fa1ddbca.4e60e8","type":"subflow:fd0ecc78.cd9a6","z":"82b90bac.0397c8","name":"","x":822,"y":819,"wires":[[]]},{"id":"5a52f1bd.841a3","type":"http response","z":"82b90bac.0397c8","name":"","x":1047,"y":538,"wires":[]},{"id":"966bfc6c.b2a05","type":"template","z":"82b90bac.0397c8","name":"html","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"

File {{name}} uploaded !

\n\n

Result sent to {{to}}

\n\n
\n{{payload}}\n
","output":"str","x":891,"y":538,"wires":[["5a52f1bd.841a3"]]}]