about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPjotr Prins2023-08-02 14:27:46 +0200
committerPjotr Prins2023-08-02 14:27:46 +0200
commitf843826aaa3b7275783f4e7bfe2fcf2a98ed0da6 (patch)
tree48f8a1a4af870e41a4e7aba03531f80c8fd01fc3
parentd28d0344fd7ffddf16d86c2c5b6c961c696b90c4 (diff)
downloadgenenetwork3-f843826aaa3b7275783f4e7bfe2fcf2a98ed0da6.tar.gz
Working on metadata
-rwxr-xr-xgn3-guile/web/webserver.scm58
1 files changed, 36 insertions, 22 deletions
diff --git a/gn3-guile/web/webserver.scm b/gn3-guile/web/webserver.scm
index 30f8e64..5dc0038 100755
--- a/gn3-guile/web/webserver.scm
+++ b/gn3-guile/web/webserver.scm
@@ -45,14 +45,22 @@
   "Add the path to the API URL"
   (string-append (prefix) "/" postfix))
 
-(define (mk-html postfix)
+(define (mk-html path)
   "Create a pointer to HTML documentation"
-  (string-append (base-url) "/" postfix ".html"))
+  (string-append (base-url) "/" path ".html"))
+
+(define (mk-doc path)
+  "Create a pointer to HTML documentation"
+  (mk-html (string-append "doc/" path)))
 
 (define (mk-meta path)
   "Create a meta URL for the API path"
   (mk-url (string-append path ".meta.json")))
 
+(define (mk-rec path)
+  "Create a JSON URL for the API path"
+  (mk-url (string-append path ".json")))
+
 (define (mk-term postfix)
   (mk-html (string-append "term" "/" postfix)))
 
@@ -70,7 +78,8 @@
   ("comment" . "This is the official REST API for the GeneNetwork service hosted at https://genenetwork.org/")
   ("license" . (("source code" . "AGPL")))
   ("note" . "work in progress (WIP)")
-  ("see also". ,(mk-meta (prefix)))))
+  ("prefix" . ,(prefix))
+  ("links". (("species" . ,(mk-meta "species"))))))
 
 (define info-meta `(		    
    ("doc" . ,(mk-html "info"))
@@ -187,7 +196,8 @@ gn:Mus_musculus gnt:organism taxon:10090 .
 
 (define (sparql-species)
   (sparql-scm (gn-sparql-endpoint-url) "
-PREFIX gn: <http://genenetwork.org/>
+PREFIX gn: <http://genenetwork.org/id/>
+PREFIX gnc: <http://genenetwork.org/category/>
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
 
 SELECT DISTINCT ?species WHERE {
@@ -198,7 +208,7 @@ SELECT DISTINCT ?species WHERE {
   (sparql-scm (gn-sparql-endpoint-url) "
 PREFIX gn: <http://genenetwork.org/id/>
 PREFIX gnc: <http://genenetwork.org/category/>
-PREFIX gnterm: <http://genenetwork.org/term/>
+PREFIX gnt: <http://genenetwork.org/term/>
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
 
 SELECT ?species ?p ?o WHERE {
@@ -268,6 +278,7 @@ SELECT ?species ?p ?o WHERE {
       ))
 
 (define (strip-lang s)
+  "Strip quotes and language tag (@en) from RDF entries"
   (list->string (match (string->list s)
 		  [(#\"rest ... #\") rest]
 		  [(#\"rest ... #\" #\@ #\e #\n) rest]
@@ -290,14 +301,15 @@ SELECT ?species ?p ?o WHERE {
 	       (receive (names row) (tsv->scm (sparql-wd-species-info wd-id))
 		 (match (pk (car row))
 		   ((taxonomy-name ncbi descr)
-		    (let ([ncbi-id (strip-lang ncbi)])
+		    (let ([ncbi-id (strip-lang ncbi)]
+			  [taxonomy-lnk (string-replace-substring (strip-lang taxonomy-name) " " "_")])
 		      (cons `("id" . ,short-name)
 		      (cons `("wikidata" . ,wd-id)
 		      (cons `("taxonomy-id" . ,ncbi-id)
 		      (cons `("ncbi-url" . ,(string-append "https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=" ncbi-id))
 		      (cons `("uniprot-url" . ,(string-append "https://www.uniprot.org/taxonomy/" ncbi-id))
 		      (cons `("wikidata-url" . ,(string-append "http://www.wikidata.org/entity/" wd-id))
-		      (cons `("wikispecies-url" . ,(string-append "https://species.wikimedia.org/wiki/" (strip-lang taxonomy-name))
+		      (cons `("wikispecies-url" . ,(string-append "https://species.wikimedia.org/wiki/" taxonomy-lnk))
 		      (cons `("taxonomy-name" . ,(strip-lang taxonomy-name))
 		      ; (cons `("shortname" . ,shortname) - problematic
 		      (cons `("description" . ,(strip-lang descr))
@@ -311,17 +323,21 @@ SELECT ?species ?p ?o WHERE {
   (scm->json-string #("https://genenetwork.org/api/v2/mouse/"
                       "https://genenetwork.org/api/v2/rat/")))
 
-(define (get-species-links recs)
-  recs
+(define (get-species-links)
+  '(("description" . "URI"))
   )
 
 (define (get-species-rec)
-  (let ([recs (get-expanded-species)])
-  `(("items" . ,(list->vector recs))
-    ("doc" . ,(mk-term "species"))
-    ("meta" . ,(mk-meta "species"))
-    ("links" . ,(list->vector (get-species-links recs))
-  ))))
+  (list->vector (get-expanded-species)))
+
+(define (get-species-meta)
+    `(
+      ("comment" . "Get information on species")
+      ("doc" . ,(mk-doc "species"))
+      ("meta" . ,(mk-meta "species"))
+      ("rec" . ,(mk-rec "species"))
+      ("links" . ,(get-species-links)
+	)))
 
 ;; ---- REST API web server handler
 
@@ -350,16 +366,14 @@ SELECT ?species ?p ?o WHERE {
   (match-lambda
     (('GET)
      (render-json info))
-    (('GET "meh")
-     (render-json-string2 "ITEST"))
-    (('HEAD "meh")
-     (render-json-string2 "ITEST"))
-    (('GET "meta")
-     (render-json info-meta))
     (('GET "version")
      (render-json get-version))
-    (('GET "species")
+    (('GET "species.json")
      (render-json (get-species-rec)))
+    (('GET "species.meta.json")
+     (render-json (get-species-meta)))
+    (('GET "species")
+     (render-json (get-species-meta)))
     (_ (not-found (request-uri request)))
     ))