Beispiel #1
0
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}