def delete_linkset_rq(rq_uri, linkset_uri): # print "DELETE THE FILTERS AND DISCONNECT THE LINKSET" query1 = PREFIX + """ # DELETE THE FILTERS DELETE {{ GRAPH <{0}> {{ <{0}> alivocab:created ?filter . ?filter ?pred ?obj . }} }} WHERE {{ GRAPH <{0}> {{ BIND(<{1}> AS ?linkset) <{0}> alivocab:created ?filter . ?filter alivocab:appliesTo ?linkset . ?filter ?pred ?obj . }} }}; # 1 DISCONNECT THE LINKSET DELETE {{ GRAPH <{0}> {{ ?s ?p ?linkset . }} }} WHERE {{ BIND(<{1}> AS ?linkset) . GRAPH <{0}> {{ ?s alivocab:created|prov:used ?linkset. ?s ?p ?linkset . }} FILTER NOT EXISTS {{ GRAPH <{0}> {{ ?view_lens alivocab:selected ?linkset. }} }} FILTER NOT EXISTS {{ ?lens a ?type; void:target|void:subjectsTarget|void:objectsTarget ?linkset. GRAPH <{0}> {{ ?s3 alivocab:created|prov:used ?lens. }} }} }}""".format(rq_uri, linkset_uri) query2 = PREFIX + """DROP SILENT GRAPH <{0}> ; DROP SILENT GRAPH <{1}> ; # 2-B DELETE THE METADATA COMPLETELY IF IT'S NOT USED IN ANY RQ DELETE {{ ?linkset ?p ?o . ?object ?pred ?obj . }} WHERE {{ BIND(<{1}> AS ?linkset) . ?linkset bdb:assertionMethod|bdb:linksetJustification ?object . ?object ?pred ?obj . ?linkset ?p ?o . # FILTER NOT EXISTS # {{ # GRAPH ?rqg # {{ # ?rqg a <http://risis.eu/class/ResearchQuestion> . # ?sg ?pg ?linkset. # }} # }} }} """.format(Ut.from_alignment2singleton(linkset_uri), linkset_uri) # print "DELETE THE BOTH METADATA" # query2 = PREFIX + """ # # 2-A DELETE THE SINGLETON GRAPH IF IT'S NOT USED IN ANY RQ # DROP SILENT GRAPH <{}> # # DELETE # # {{ # # GRAPH ?singletonGraph {{ ?x ?y ?z }} . # # }} # # WHERE # # {{ # # BIND(<{1}> AS ?linkset) . # # ?linkset alivocab:singletonGraph ?singletonGraph . # # GRAPH ?singletonGraph {{ ?x ?y ?z }} . # # FILTER NOT EXISTS # # {{ # # GRAPH ?rqg # # {{ # # ?rqg a <http://risis.eu/class/ResearchQuestion> . # # ?sg ?pg ?linkset. # # }} # # }} # # FILTER NOT EXISTS # # {{ # # ?lens a ?type; # # void:target|void:subjectsTarget|void:objectsTarget ?linkset. # # }} # # }} # ; # # 2-B DELETE THE METADATA COMPLETELY IF IT'S NOT USED IN ANY RQ # DELETE # {{ # ?linkset ?p ?o . # ?object ?pred ?obj . # }} # WHERE # {{ # BIND(<{1}> AS ?linkset) . # # ?linkset bdb:assertionMethod|bdb:linksetJustification ?object . # ?object ?pred ?obj . # ?linkset ?p ?o . # # # FILTER NOT EXISTS # # {{ # # GRAPH ?rqg # # {{ # # ?rqg a <http://risis.eu/class/ResearchQuestion> . # # ?sg ?pg ?linkset. # # }} # # }} # }} # """.format(rq_uri, linkset_uri) # print "DELETING THE LINKSET ITSELF" # query3 = PREFIX + """ # # 2-C DELETE THE LINKSET COMPLETELY IF IT'S NOT USED IN ANY RQ # DELETE # {{ # GRAPH ?linkset {{ ?sub ?pred ?obj . }} # }} # WHERE # {{ # BIND(<{1}> AS ?linkset) . # GRAPH ?linkset # {{ # ?sub ?pred ?obj . # }} # # FILTER NOT EXISTS # # {{ # # GRAPH ?rqg # # {{ # # ?rqg a <http://risis.eu/class/ResearchQuestion> . # # ?sg ?pg ?linkset. # # }} # # }} # }} # # """.format(rq_uri, linkset_uri) # print query return [query1, query2]
def export_alignment_all(alignment, directory=None, limit=5000): directory = os.path.join(directory, "") print directory if os.path.isdir(os.path.dirname(directory)) is False or os.path.exists( directory) is False: print "CREATING THE DIRECTORY" os.mkdir(os.path.dirname(directory)) # COMMENT THE LINKSET OIT IF IT IS EQUAL TO NONE # This function returns all the links + some metadata about the alignment. # METADATA: source dataset, target dataset and mechanism use = alignment alignment = str(alignment).strip() row_alignment = alignment alignment = alignment if Ut.is_nt_format( alignment) is True else "<{}>".format(alignment) # **************************************************** # 1. GET THE METADATA OF THE ALIGNMENT: THE QUERY # **************************************************** meta = """ PREFIX ll: <{0}> CONSTRUCT {{ {1} ?y ?z. ?z ?p ?o . }} WHERE {{ {1} ?y ?z . OPTIONAL{{ ?z ?p ?o . }} OPTIONAL{{ ?O ?Q ?R . }} }} order by ?y """.format(Ns.alivocab, alignment) # print meta # GET THE METADATA OF THE ALIGNMENT: RUN THE QUERY meta_construct = Qry.endpointconstruct(meta, clean=False) meta_construct = meta_construct.replace("{", "").replace("}", "") with open(os.path.join(directory, "metadata.ttl"), "wb") as metadata: metadata.write(meta_construct) # print meta_construct # **************************************************** # 2. GET THE CORRESPONDENCES OF THE LINKSET # **************************************************** # CONSTRUCT QUERY FOR EXTRACTING HE CORRESPONDENCES comment = "" if limit else "#" query = """ PREFIX ll: <{}> CONSTRUCT {{ ?x ?y ?z }} WHERE {{ GRAPH {} {{ ?x ?y ?z }} }} order by ?x {}LIMIT {} """.format(Ns.alivocab, alignment, comment, limit) # print query # FIRE THE CONSTRUCT FOR CORRESPONDENCES AGAINST THE TRIPLE STORE alignment_construct = Qry.endpointconstruct(query, clean=False) if alignment_construct: alignment_construct = alignment_construct.replace( "{", "{}\n{{".format(alignment)) # print alignment_construct with open(os.path.join(directory, "linkset.trig"), "wb") as links: links.write(alignment_construct) # **************************************************** # 3. GET THE METADATA CORRESPONDENCES' PREDICATES # **************************************************** singleton_graph_uri = Ut.from_alignment2singleton(alignment) singleton_query = """ PREFIX ll: <{0}> PREFIX singletons: <{1}> CONSTRUCT {{ ?predicate ?x ?y }} WHERE {{ {{ SELECT ?predicate {{ GRAPH {2} {{ ?subject ?predicate ?object }} }} order by ?x {3}LIMIT {4} }} GRAPH {5} {{ ?predicate ?x ?y }} }} """.format(Ns.alivocab, Ns.singletons, alignment, comment, limit, singleton_graph_uri) # print singleton_query # FIRE THE CONSTRUCT FOR SINGLETON AGAINST THE TRIPLE STORE singleton_construct = Qry.endpointconstruct(singleton_query, clean=False) if singleton_construct: singleton_construct = singleton_construct.replace( "{", "{}\n{{".format(singleton_graph_uri)) # print singleton_construct with open(os.path.join(directory, "singletons.trig"), "wb") as singletons: singletons.write(singleton_construct) # LOAD THE METADATA USING RDFLIB sg = rdflib.Graph() sg.parse(data=meta_construct, format="turtle") # EXTRACT FROM THE RESPONSE: THE SOURCE AND TARGET DATASETS AND THE ALIGNMENT sbj = rdflib.URIRef(use) triples_uri = rdflib.URIRef("http://rdfs.org/ns/void#triples") # EXTRACT THE ALIGNMENT TYPE triples = "" for item in sg.objects(sbj, triples_uri): triples = item print "TRIPLES: ", triples if alignment_construct is not None: links = "### TRIPLE COUNT: {}\n### LINKSET: {}\n".format( triples, alignment) + alignment_construct links = links.replace("{", "").replace("}", "") message = "You have just downloaded the graph [{}] which contains [{}] correspondences. ".format( row_alignment, triples) host = Svr.settings[St.stardog_host_name] endpoint = b"http://{}/annex/{}/sparql/query?".format( host, Svr.settings[St.database]) local_name = Ut.get_uri_local_name_plus(alignment) file_at_parent_directory = os.path.join( os.path.abspath(os.path.join(directory, os.pardir)), "{}.zip".format(local_name)) zipped_file = Ut.zip_folder(directory, output_file_path=file_at_parent_directory) print "\t>>> THE ZIPPED FILE IS LOCATED AT:\n\t\t- {}".format(zipped_file) # result = result # print result print "Done with graph: {}".format(alignment) # return {'result': { # "generic_metadata": meta_construct, # 'specific_metadata': singleton_construct, # 'data': alignment_construct}, 'message': message} return {'result': zipped_file, 'message': message}