about summary refs log tree commit diff
path: root/gn3/db
diff options
context:
space:
mode:
Diffstat (limited to 'gn3/db')
-rw-r--r--gn3/db/rdf.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/gn3/db/rdf.py b/gn3/db/rdf.py
index 5b62b46..c559774 100644
--- a/gn3/db/rdf.py
+++ b/gn3/db/rdf.py
@@ -156,6 +156,46 @@ CONSTRUCT {
         ):
             response[key] = value.map(get_url_local_name)  # type: ignore
     return response
+
+
+def get_publication_metadata(
+        sparql_conn: SPARQLWrapper, name: str
+):
+    """Return info about a publication with a given NAME"""
+    __metadata_query = """
+$prefix
+
+CONSTRUCT {
+    gn:publication ?publicationTerm ?publicationValue .
+    gn:publication ?predicate ?subject .
+} WHERE {
+    $name ?publicationTerm ?publicationValue .
+    ?publication ?publicationTerm ?publicationValue .
+    OPTIONAL {
+       ?subject ?predicate ?publication .
+    } .
+    VALUES ?publicationTerm {
+        gn:pubMedId gn:title gn:volume
+        gn:abstract gn:pages gn:month gn:year gn:author
+    }
+    VALUES ?predicate {
+        gn:phenotypeOfPublication
+    }
+}
+"""
+    response: MonadicDict = MonadicDict()
+
+    for key, value in sparql_query(
+            sparql_conn,
+            Template(__metadata_query)
+            .substitute(
+                prefix=RDF_PREFIXES,
+                name=name
+            )
+    )[0].items():
+        response[key] = value
+        if isinstance(value, str) and not key.endswith("pubMedId"):
+            response[key] = value.map(get_url_local_name)  # type: ignore
     return response