Bladeren bron

Add rdflib as requirement

Arkadiusz Ryś 2 jaren geleden
bovenliggende
commit
b8b098f87d
2 gewijzigde bestanden met toevoegingen van 100 en 105 verwijderingen
  1. 1 0
      requirements.txt
  2. 99 105
      spendpoint/__main__.py

+ 1 - 0
requirements.txt

@@ -1,4 +1,5 @@
 # SpEndPoint
+rdflib            ~= 6.2.0
 fastapi           ~= 0.92
 starlette         ~= 0.25.0
 python-magic      ~= 0.4.27

+ 99 - 105
spendpoint/__main__.py

@@ -1,105 +1,99 @@
-import rdflib
-from rdflib import RDF, RDFS, ConjunctiveGraph, Literal, URIRef
-from rdflib.plugins.sparql.evalutils import _eval
-
-from rdflib_endpoint import SparqlEndpoint
-
-
-def custom_concat(query_results, ctx, part, eval_part):
-    """
-    Concat 2 string and return the length as additional Length variable
-    \f
-    :param query_results:   An array with the query results objects
-    :param ctx:             <class 'rdflib.plugins.sparql.sparql.QueryContext'>
-    :param part:            Part of the query processed (e.g. Extend or BGP) <class 'rdflib.plugins.sparql.parserutils.CompValue'>
-    :param eval_part:       Part currently evaluated
-    :return:                the same query_results provided in input param, with additional results
-    """
-    argument1 = str(_eval(part.expr.expr[0], eval_part.forget(ctx, _except=part.expr._vars)))
-    argument2 = str(_eval(part.expr.expr[1], eval_part.forget(ctx, _except=part.expr._vars)))
-    evaluation = []
-    scores = []
-    concat_string = argument1 + argument2
-    reverse_string = argument2 + argument1
-    # Append the concatenated string to the results
-    evaluation.append(concat_string)
-    evaluation.append(reverse_string)
-    # Append the scores for each row of results
-    scores.append(len(concat_string))
-    scores.append(len(reverse_string))
-    # Append our results to the query_results
-    for i, result in enumerate(evaluation):
-        query_results.append(
-            eval_part.merge({part.var: Literal(result), rdflib.term.Variable(part.var + "Length"): Literal(scores[i])})
-        )
-    return query_results, ctx, part, eval_part
-
-
-def most_similar(query_results, ctx, part, eval_part):
-    """
-    Get most similar entities for a given entity
-
-    PREFIX openpredict: <https://w3id.org/um/openpredict/>
-    SELECT ?drugOrDisease ?mostSimilar ?mostSimilarScore WHERE {
-        BIND("OMIM:246300" AS ?drugOrDisease)
-        BIND(openpredict:most_similar(?drugOrDisease) AS ?mostSimilar)
-    """
-    # argumentEntity = str(_eval(part.expr.expr[0], eval_part.forget(ctx, _except=part.expr._vars)))
-    # try:
-    #     argumentLimit = str(_eval(part.expr.expr[1], eval_part.forget(ctx, _except=part.expr._vars)))
-    # except:
-    #     argumentLimit = None
-
-    # Using stub data
-    similarity_results = [{"mostSimilar": "DRUGBANK:DB00001", "score": 0.42}]
-
-    evaluation = []
-    scores = []
-    for most_similar in similarity_results:
-        evaluation.append(most_similar["mostSimilar"])
-        scores.append(most_similar["score"])
-
-    # Append our results to the query_results
-    for i, result in enumerate(evaluation):
-        query_results.append(
-            eval_part.merge({part.var: Literal(result), rdflib.term.Variable(part.var + "Score"): Literal(scores[i])})
-        )
-    return query_results, ctx, part, eval_part
-
-
-example_query = """PREFIX myfunctions: <https://w3id.org/um/sparql-functions/>
-SELECT ?concat ?concatLength WHERE {
-    BIND("First" AS ?first)
-    BIND(myfunctions:custom_concat(?first, "last") AS ?concat)
-}"""
-
-# Use ConjunctiveGraph to support nquads and graphs in SPARQL queries
-# identifier is the default graph
-g = ConjunctiveGraph(
-    # store="Oxigraph",
-    identifier=URIRef("https://w3id.org/um/sparql-functions/graph/default"),
-)
-
-# Example to add a nquad to the exposed graph
-g.add((URIRef("http://subject"), RDF.type, URIRef("http://object"), URIRef("http://graph")))
-g.add((URIRef("http://subject"), RDFS.label, Literal("foo"), URIRef("http://graph")))
-
-# Start the SPARQL endpoint based on the RDFLib Graph
-app = SparqlEndpoint(
-    graph=g,
-    functions={
-        "https://w3id.org/um/openpredict/most_similar": most_similar,
-        "https://w3id.org/um/sparql-functions/custom_concat": custom_concat,
-    },
-    title="SPARQL endpoint for RDFLib graph",
-    description="A SPARQL endpoint to serve machine learning models, or any other logic implemented in Python. \n[Source code](https://github.com/vemonet/rdflib-endpoint)",
-    version="0.1.0",
-    public_url="https://service.openpredict.137.120.31.102.nip.io/sparql",
-    cors_enabled=True,
-    example_query=example_query,
-)
-
-## Uncomment to run it directly with python app/main.py
-# if __name__ == "__main__":
-#     import uvicorn
-#     uvicorn.run(app, host="0.0.0.0", port=8000)
+import rdflib
+from rdflib import RDF, RDFS, ConjunctiveGraph, Literal, URIRef
+from rdflib.plugins.sparql.evalutils import _eval
+
+from rdflib_endpoint import SparqlEndpoint
+
+
+def custom_concat(query_results, ctx, part, eval_part):
+    """
+    Concat 2 string and return the length as additional Length variable
+    \f
+    :param query_results:   An array with the query results objects
+    :param ctx:             <class 'rdflib.plugins.sparql.sparql.QueryContext'>
+    :param part:            Part of the query processed (e.g. Extend or BGP) <class 'rdflib.plugins.sparql.parserutils.CompValue'>
+    :param eval_part:       Part currently evaluated
+    :return:                the same query_results provided in input param, with additional results
+    """
+    argument1 = str(_eval(part.expr.expr[0], eval_part.forget(ctx, _except=part.expr._vars)))
+    argument2 = str(_eval(part.expr.expr[1], eval_part.forget(ctx, _except=part.expr._vars)))
+    evaluation = []
+    scores = []
+    concat_string = argument1 + argument2
+    reverse_string = argument2 + argument1
+    # Append the concatenated string to the results
+    evaluation.append(concat_string)
+    evaluation.append(reverse_string)
+    # Append the scores for each row of results
+    scores.append(len(concat_string))
+    scores.append(len(reverse_string))
+    # Append our results to the query_results
+    for i, result in enumerate(evaluation):
+        query_results.append(
+            eval_part.merge({part.var: Literal(result), rdflib.term.Variable(part.var + "Length"): Literal(scores[i])})
+        )
+    return query_results, ctx, part, eval_part
+
+
+def most_similar(query_results, ctx, part, eval_part):
+    """
+    Get most similar entities for a given entity
+
+    PREFIX openpredict: <https://w3id.org/um/openpredict/>
+    SELECT ?drugOrDisease ?mostSimilar ?mostSimilarScore WHERE {
+        BIND("OMIM:246300" AS ?drugOrDisease)
+        BIND(openpredict:most_similar(?drugOrDisease) AS ?mostSimilar)
+    """
+    # argumentEntity = str(_eval(part.expr.expr[0], eval_part.forget(ctx, _except=part.expr._vars)))
+    # try:
+    #     argumentLimit = str(_eval(part.expr.expr[1], eval_part.forget(ctx, _except=part.expr._vars)))
+    # except:
+    #     argumentLimit = None
+
+    # Using stub data
+    similarity_results = [{"mostSimilar": "DRUGBANK:DB00001", "score": 0.42}]
+
+    evaluation = []
+    scores = []
+    for most_similar in similarity_results:
+        evaluation.append(most_similar["mostSimilar"])
+        scores.append(most_similar["score"])
+
+    # Append our results to the query_results
+    for i, result in enumerate(evaluation):
+        query_results.append(
+            eval_part.merge({part.var: Literal(result), rdflib.term.Variable(part.var + "Score"): Literal(scores[i])})
+        )
+    return query_results, ctx, part, eval_part
+
+
+example_query = """
+PREFIX myfunctions: <https://w3id.org/um/sparql-functions/>
+SELECT ?concat ?concatLength WHERE {
+    BIND("First" AS ?first)
+    BIND(myfunctions:custom_concat(?first, "last") AS ?concat)
+}
+"""
+
+g = ConjunctiveGraph(
+    identifier=URIRef("https://w3id.org/um/sparql-functions/graph/default"),
+)
+
+# Example to add a nquad to the exposed graph
+g.add((URIRef("http://subject"), RDF.type, URIRef("http://object"), URIRef("http://graph")))
+g.add((URIRef("http://subject"), RDFS.label, Literal("foo"), URIRef("http://graph")))
+
+# Start the SPARQL endpoint based on the RDFLib Graph
+app = SparqlEndpoint(
+    graph=g,
+    functions={
+        "https://w3id.org/um/openpredict/most_similar": most_similar,
+        "https://w3id.org/um/sparql-functions/custom_concat": custom_concat,
+    },
+    title="SPARQL endpoint for RDFLib graph",
+    description="A SPARQL endpoint to serve machine learning models, or any other logic implemented in Python. \n[Source code](https://github.com/vemonet/rdflib-endpoint)",
+    version="0.1.0",
+    public_url="https://service.openpredict.137.120.31.102.nip.io/sparql",
+    cors_enabled=True,
+    example_query=example_query,
+)