diff options
Diffstat (limited to 'gn3/db/rdf.py')
-rw-r--r-- | gn3/db/rdf.py | 124 |
1 files changed, 0 insertions, 124 deletions
diff --git a/gn3/db/rdf.py b/gn3/db/rdf.py deleted file mode 100644 index 5a95683..0000000 --- a/gn3/db/rdf.py +++ /dev/null @@ -1,124 +0,0 @@ -"""RDF utilities - -This module is a collection of functions that handle SPARQL queries. - -""" -import json -from string import Template -from SPARQLWrapper import SPARQLWrapper -from pyld import jsonld # type: ignore -from gn3.db.constants import ( - RDF_PREFIXES, BASE_CONTEXT -) - - -def sparql_construct_query(query: str, endpoint: str) -> dict: - """Query virtuoso using a CONSTRUCT query and return a json-ld - dictionary""" - sparql = SPARQLWrapper(endpoint) - sparql.setQuery(query) - results = sparql.queryAndConvert() - return json.loads(results.serialize(format="json-ld")) # type: ignore - - -def query_frame_and_compact(query: str, context: dict, endpoint: str) -> dict: - """Frame and then compact the results given a context""" - results = sparql_construct_query(query, endpoint) - return jsonld.compact(jsonld.frame(results, context), context) - - -def query_and_compact(query: str, context: dict, endpoint: str) -> dict: - """Compact the results given a context""" - results = sparql_construct_query(query, endpoint) - return jsonld.compact(results, context) - - -def query_and_frame(query: str, context: dict, endpoint: str) -> dict: - """Frame the results given a context""" - results = sparql_construct_query(query, endpoint) - return jsonld.frame(results, context) - - -def get_wiki_entries_by_symbol(symbol: str, sparql_uri: str) -> dict: - """Fetch all the Wiki entries using the symbol""" - # This query uses a sub-query to fetch the latest comment by the - # version id. - query = Template(""" -$prefix - -CONSTRUCT { - ?uid rdfs:label ?symbolName; - gnt:reason ?reason ; - gnt:species ?species ; - dct:references ?pmid ; - foaf:homepage ?weburl ; - rdfs:comment ?comment ; - foaf:mbox ?email ; - gnt:initial ?usercode ; - gnt:belongsToCategory ?category ; - gnt:hasVersion ?versionId ; - dct:created ?created ; - dct:identifier ?identifier . -} WHERE { - ?symbolId rdfs:label ?symbolName . - ?uid rdfs:comment ?comment ; - gnt:symbol ?symbolId ; - rdf:type gnc:GNWikiEntry ; - dct:created ?createTime . - FILTER ( LCASE(?symbolName) = LCASE('$symbol') ) . - { - SELECT (MAX(?vers) AS ?max) ?id_ WHERE { - ?symbolId rdfs:label ?symbolName . - ?uid dct:identifier ?id_ ; - dct:hasVersion ?vers ; - dct:identifier ?id_ ; - gnt:symbol ?symbolId . - FILTER ( LCASE(?symbolName) = LCASE('$symbol') ) . - } - } - ?uid dct:hasVersion ?max ; - dct:identifier ?id_ . - OPTIONAL { ?uid gnt:reason ?reason } . - OPTIONAL { - ?uid gnt:belongsToSpecies ?speciesId . - ?speciesId gnt:shortName ?species . - } . - OPTIONAL { ?uid dct:references ?pubmedId . } . - OPTIONAL { ?uid foaf:homepage ?weburl . } . - OPTIONAL { ?uid gnt:initial ?usercode . } . - OPTIONAL { ?uid gnt:mbox ?email . } . - OPTIONAL { ?uid gnt:belongsToCategory ?category . } . - BIND (str(?version) AS ?versionId) . - BIND (str(?id_) AS ?identifier) . - BIND (str(?pubmedId) AS ?pmid) . - BIND (str(?createTime) AS ?created) . -} -""").substitute(prefix=RDF_PREFIXES, symbol=symbol,) - context = BASE_CONTEXT | { - "foaf": "http://xmlns.com/foaf/0.1/", - "dct": "http://purl.org/dc/terms/", - "categories": "gnt:belongsToCategory", - "web_url": "foaf:homepage", - "version": "gnt:hasVersion", - "symbol": "rdfs:label", - "reason": "gnt:reason", - "species": "gnt:species", - "pubmed_id": "dct:references", - "email": "foaf:mbox", - "initial": "gnt:initial", - "comment": "rdfs:comment", - "created": "dct:created", - "id": "dct:identifier", - # This points to the RDF Node which is the unique identifier - # for this triplet. It's constructed using the comment-id and - # the comment-versionId - "wiki_identifier": "@id", - } - results = query_frame_and_compact( - query, context, - sparql_uri - ) - data = results.get("data") - if not data: - return results - return results |