diff --git a/YKWIM/generateRDF.py b/YKWIM/generateRDF.py index 5997ec184789bf429f4b7cc746115f0666853f6d..810d43e1ae58c24855285a0f2ae66c0d2ce288ff 100644 --- a/YKWIM/generateRDF.py +++ b/YKWIM/generateRDF.py @@ -1,21 +1,13 @@ -##### to review completly -import sys import subprocess -import generateJSON as g -import generateSparqlGenerateQuery as q -import uuid -import os +from YKWIM import app, generateSparqlGenerateQuery as q, generateOntology as onto -def generateRDF (file, dataset) : +def generateRDF (dataset, path=app.config["UPLOAD_FOLDER"],ontology_namespace = "https://data.grandlyon.com/onto/", vocabulary_namespace ="https://data.grandlyon.com/vocab/", instances_namespace = "https://data.grandlyon.com/id/") : """generate RDF data from SPARQL Generate query""" - query_file=q.generateSparqlGenerateQuery(g.generateJSON(file),dataset) - base_name = str(uuid.uuid4()) - result_file = base_name + ".ttl" - subprocess.run('java -jar sparql-generate*.jar --query-file '+ query_file+' --output '+result_file, shell=True) - - return result_file + onto.generateOntology(path, ontology_namespace,vocabulary_namespace) + query_file=q.generateSparqlGenerateQuery(dataset, path,vocabulary_namespace, instances_namespace) -if __name__ == "__main__": - #dataset = "https://download.data.grandlyon.com/wfs/grandlyon?SERVICE=WFS&VERSION=2.0.0&request=GetFeature&typename=adr_voie_lieu.adrcomgl&outputFormat=application/json;%20subtype=geojson&SRSNAME=EPSG:4171" - print (generateRDF(sys.argv[1], sys.argv[2])) \ No newline at end of file + result_file = path + "instances.ttl" + subprocess.run('java -jar ./YKWIM/static/jar/sparql-generate*.jar --query-file '+ query_file+' --output '+result_file, shell=True) + + return result_file \ No newline at end of file diff --git a/YKWIM/jupyter/instances.ttl b/YKWIM/jupyter/instances.ttl new file mode 100644 index 0000000000000000000000000000000000000000..ed657401f5f631fd78cb3e80d1093fc77ad6eae5 --- /dev/null +++ b/YKWIM/jupyter/instances.ttl @@ -0,0 +1,184 @@ +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . +@prefix iter: <http://w3id.org/sparql-generate/iter/> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +@prefix fun: <http://w3id.org/sparql-generate/fn/> . + +<https://data.grandlyon.com/id/Sitetraitementdechets/16> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "Centre de tri Coved" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/centre_de_tri> ; + <https://schema.org/address> "Rue du Broteau" ; + <https://schema.org/identifier> + "16" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/IRIGNY> . + +<https://data.grandlyon.com/id/Sitetraitementdechets/961> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "Centre de tri Onyx" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/centre_de_tri> ; + <https://schema.org/address> "Avenue du 8 Mai1945" ; + <https://schema.org/identifier> + "961" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/RILLIEUX-LA-PAPE> . + +<https://data.grandlyon.com/id/Commune/GIVORS> + a <http://data.ign.fr/def/geofla#Commune> ; + rdfs:label "GIVORS" . + +<https://data.grandlyon.com/id/Commune/Venissieux> + a <http://data.ign.fr/def/geofla#Commune> ; + rdfs:label "Venissieux" . + +<https://data.grandlyon.com/id/Commune/LYON 7EME> + a <http://data.ign.fr/def/geofla#Commune> ; + rdfs:label "LYON 7EME" . + +<https://data.grandlyon.com/id/Sitetraitementdechets/322> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "UTVE Lyon NORD" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/incinération> ; + <https://schema.org/address> "110 Route du Mas Rillier" ; + <https://schema.org/identifier> + "322" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/RILLIEUX-LA-PAPE> . + +<https://data.grandlyon.com/id/Sitetraitementdechets/15> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "Centre de tri Nicollin" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/centre_de_tri> ; + <https://schema.org/address> "12-14 rue Charles Martin" ; + <https://schema.org/identifier> + "15" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/SAINT-FONS> . + +<https://data.grandlyon.com/id/Sitetraitementdechets/1350> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "OUI_COMPOST" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/centre_de_traitement> ; + <https://schema.org/address> "158 Cours Charlemagne" ; + <https://schema.org/identifier> + "1350" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/690002 Lyon> . + +<https://data.grandlyon.com/id/Sitetraitementdechets/966> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "Quai de transfert Villefrance" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/quai_de_transfert> ; + <https://schema.org/address> "90 Rue Benoît Frachon" ; + <https://schema.org/identifier> + "966" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/VILLEFRANCHE-SUR-SAONE> . + +<https://data.grandlyon.com/id/Commune/690002 Lyon> + a <http://data.ign.fr/def/geofla#Commune> ; + rdfs:label "690002 Lyon" . + +<https://data.grandlyon.com/id/Sitetraitementdechets/321> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "Centre de tri Décines" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/centre_de_tri> ; + <https://schema.org/address> "26 rue Wilson" ; + <https://schema.org/identifier> + "321" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/DECINES-CHARPIEU> . + +<https://data.grandlyon.com/id/Sitetraitementdechets/1014> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "Givors Bans - CS" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/quai_de_transfert> ; + <https://schema.org/address> "Chemin de la Lône" ; + <https://schema.org/identifier> + "1014" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/GIVORS> . + +<https://data.grandlyon.com/id/Sitetraitementdechets/965> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "UTVE Villefranche" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/incinération> ; + <https://schema.org/address> "90 Rue Benoît Frachon" ; + <https://schema.org/identifier> + "965" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/VILLEFRANCHE-SUR-SAONE> . + +<https://data.grandlyon.com/id/Sitetraitementdechets/1013> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "Givors Bans - OM" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/quai_de_transfert> ; + <https://schema.org/address> "Chemin de la Lône" ; + <https://schema.org/identifier> + "1013" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/GIVORS> . + +<https://data.grandlyon.com/id/Commune/IRIGNY> + a <http://data.ign.fr/def/geofla#Commune> ; + rdfs:label "IRIGNY" . + +<https://data.grandlyon.com/id/Sitetraitementdechets/964> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "Plateforme Guérin" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/centre_de_tri> ; + <https://schema.org/address> "2-3 Impasse Lucien Sampaix" ; + <https://schema.org/identifier> + "964" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/SAINT-FONS> . + +<https://data.grandlyon.com/id/Commune/RILLIEUX-LA-PAPE> + a <http://data.ign.fr/def/geofla#Commune> ; + rdfs:label "RILLIEUX-LA-PAPE" . + +<https://data.grandlyon.com/id/Commune/VILLEFRANCHE-SUR-SAONE> + a <http://data.ign.fr/def/geofla#Commune> ; + rdfs:label "VILLEFRANCHE-SUR-SAONE" . + +<https://data.grandlyon.com/id/Commune/69680 Chassieu> + a <http://data.ign.fr/def/geofla#Commune> ; + rdfs:label "69680 Chassieu" . + +<https://data.grandlyon.com/id/Commune/DECINES-CHARPIEU> + a <http://data.ign.fr/def/geofla#Commune> ; + rdfs:label "DECINES-CHARPIEU" . + +<https://data.grandlyon.com/id/Sitetraitementdechets/1349> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "LES ALCHIMISTES" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/centre_de_traitement> ; + <https://schema.org/address> "USIN, 41-47 bld Marcel Sembat" ; + <https://schema.org/identifier> + "1349" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/Venissieux> . + +<https://data.grandlyon.com/id/Sitetraitementdechets/11> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "UTVE Lyon SUD" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/incinération> ; + <https://schema.org/address> "7 Rue de Dole" ; + <https://schema.org/identifier> + "11" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/LYON 7EME> . + +<https://data.grandlyon.com/id/Commune/SAINT-FONS> + a <http://data.ign.fr/def/geofla#Commune> ; + rdfs:label "SAINT-FONS" . + +<https://data.grandlyon.com/id/Sitetraitementdechets/1333> + a <https://data.grandlyon.com/onto/Sitetraitementdechets> ; + rdfs:label "Trivalo 69" ; + <https://data.grandlyon.com/onto/apouractivite> + <https://data.grandlyon.com/vocab/centre_de_tri> ; + <https://schema.org/address> "12-16 rue Blaise Pascal" ; + <https://schema.org/identifier> + "1333" ; + <https://schema.org/location> <https://data.grandlyon.com/id/Commune/69680 Chassieu> . diff --git a/YKWIM/jupyter/query.rq b/YKWIM/jupyter/query.rq new file mode 100644 index 0000000000000000000000000000000000000000..e9c5db7d65a0a4a619ce62d20ee447883517378a --- /dev/null +++ b/YKWIM/jupyter/query.rq @@ -0,0 +1,25 @@ +PREFIX iter: <http://w3id.org/sparql-generate/iter/> + PREFIX fun: <http://w3id.org/sparql-generate/fn/> + PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> + PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> + GENERATE { +?Sitetraitementdechets a <https://data.grandlyon.com/onto/Sitetraitementdechets>; + <http://www.w3.org/2000/01/rdf-schema#label> ?Nom; + <https://schema.org/identifier> ?Identifiant; + <https://schema.org/address> ?Adresse. +?Commune a <http://data.ign.fr/def/geofla#Commune>; + <http://www.w3.org/2000/01/rdf-schema#label> ?Nomcommune. +?Sitetraitementdechets <https://data.grandlyon.com/onto/apouractivite> ?Activite. +?Sitetraitementdechets <https://schema.org/location> ?Commune. +} + SOURCE <https://download.data.grandlyon.com/wfs/grandlyon?SERVICE=WFS&VERSION=2.0.0&request=GetFeature&typename=gic_collecte.gicsitetraitement&outputFormat=application/json;%20subtype=geojson&SRSNAME=EPSG:4171> AS ?source +ITERATOR iter:GeoJSON(?source) AS ?geometricCoordinates ?properties + WHERE { +BIND (fun:JSONPath(?properties,"$.nom") AS ?Nom) +BIND (fun:JSONPath(?properties,"$.identifiant") AS ?Identifiant) +BIND(IRI(CONCAT("https://data.grandlyon.com/id/Sitetraitementdechets/",fun:JSONPath(?properties,"$.identifiant"))) AS ?Sitetraitementdechets) +BIND (fun:JSONPath(?properties,"$.adresse") AS ?Adresse) +BIND (fun:JSONPath(?properties,"$.commune") AS ?Nomcommune) +BIND(IRI(CONCAT("https://data.grandlyon.com/id/Commune/",fun:JSONPath(?properties,"$.commune"))) AS ?Commune) +BIND(IRI(CONCAT("https://data.grandlyon.com/vocab/",REPLACE(LCASE(fun:JSONPath(?properties,"$.activite"))," ","_"))) AS ?Activite) +} diff --git a/YKWIM/jupyter/sparql-generate-2.0.9.jar b/YKWIM/jupyter/sparql-generate-2.0.9.jar new file mode 100644 index 0000000000000000000000000000000000000000..ffddde6b335d38048fa040a82d4e20caed5ae0aa Binary files /dev/null and b/YKWIM/jupyter/sparql-generate-2.0.9.jar differ diff --git a/YKWIM/jupyter/test.py b/YKWIM/jupyter/test.py new file mode 100644 index 0000000000000000000000000000000000000000..612f6af676126863c1a5af6fbadfdf932338132c --- /dev/null +++ b/YKWIM/jupyter/test.py @@ -0,0 +1,16 @@ +import subprocess +#from YKWIM import generateJSON as g +#import generateSparqlGenerateQuery as q, generateOntology as onto + +def generateRDF (path="./",ontology_namespace = "https://data.grandlyon.com/onto/", vocabulary_namespace ="https://data.grandlyon.com/vocab/", instances_namespace = "https://data.grandlyon.com/id/") : + """generate RDF data from SPARQL Generate query""" + #g.generateJSON(file, path) + #onto.generateOntology(path, ontology_namespace,vocabulary_namespace) + query_file="query.rq" + + result_file = path + "instances.ttl" + subprocess.run('java -jar sparql-generate*.jar --query-file '+ query_file+' --output '+result_file, shell=True) + + return result_file + +print(generateRDF()) \ No newline at end of file diff --git a/YKWIM/views.py b/YKWIM/views.py index 8a9470cda25407fcf5abc7bb2fe8e1dbb10ff292..e8aedf8ca9ae9dc9a67c9d07bbe8519cd5a28456 100644 --- a/YKWIM/views.py +++ b/YKWIM/views.py @@ -1,22 +1,28 @@ -from YKWIM import app, plantUML2Image as pl, validateTemplate as val -from flask import render_template, request, send_from_directory, flash +from YKWIM import app, plantUML2Image as pl, validateTemplate as val, generateOntology as onto, generateSparqlGenerateQuery as sq, generateRDF as rdf +from flask import render_template, request, send_from_directory from werkzeug.utils import secure_filename import os @app.route("/",methods=['POST', 'GET']) def index(): if request.method == "POST": - datasetURL=request.form["datasetURL"] + datasetURL=request.form["datasetURL"].replace(' ','%20') file = request.files["templateFile"] file.save(os.path.join(app.config['UPLOAD_FOLDER'],secure_filename(file.filename))) error_template = val.validateTemplate(app.config['UPLOAD_FOLDER']+secure_filename(file.filename)) if error_template == None : uml_image = pl.plantUML2Image(app.config['UPLOAD_FOLDER']+secure_filename(file.filename),"svg") + rdf.generateRDF(datasetURL) + return render_template("index.html", uml_image=uml_image) + else: return render_template("index.html", error_template=error_template) else: - return render_template("index.html") + return render_template("index.html", vocabulary_namespace= app.config['VOCABULARY_NAMESPACE'], + ontology_namespace=app.config['ONTOLOGY_NAMESPACE'], + instances_namespace=app.config['INSTANCES_NAMESPACE'] + ) @app.route("/<document_link>")