aboutsummaryrefslogtreecommitdiff
path: root/gn
diff options
context:
space:
mode:
authorPjotr Prins2023-08-21 12:21:01 +0200
committerPjotr Prins2023-08-21 12:21:01 +0200
commitd06d732625fdc48677ea32b129da905ebd527c38 (patch)
treec744372e426a2c1ed2042192e8292cb3a0536e31 /gn
parentb151e98e3933d7e21f20554cc892f0bef0740cba (diff)
downloadgn-guile-d06d732625fdc48677ea32b129da905ebd527c38.tar.gz
Getting group info
Diffstat (limited to 'gn')
-rw-r--r--gn/data/group.scm23
-rw-r--r--gn/data/species.scm10
-rw-r--r--gn/db/sparql.scm22
3 files changed, 51 insertions, 4 deletions
diff --git a/gn/data/group.scm b/gn/data/group.scm
new file mode 100644
index 0000000..003ac11
--- /dev/null
+++ b/gn/data/group.scm
@@ -0,0 +1,23 @@
+(define-module (gn data group)
+ #:use-module (srfi srfi-1)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 format)
+ #:use-module (ice-9 iconv)
+ #:use-module (ice-9 receive)
+ #:use-module (ice-9 string-fun)
+ #:use-module (gn db sparql)
+ #:use-module (web gn-uri)
+
+ #:export (
+ get-group-links
+ ))
+
+(define (get-group-links gnid)
+ "Return all the URIs that link to group info, e.g. for Mus_musculus"
+ (let ([recs (car (cdr (compile-groups-meta)))]
+ [uri (mk-gnid gnid)])
+ (filter-map
+ (lambda (r) (if (string=? (second r) uri)
+ (list ("ref" . (car r)))
+ #f)) recs)
+ ))
diff --git a/gn/data/species.scm b/gn/data/species.scm
index 72ab7cf..ca3bb05 100644
--- a/gn/data/species.scm
+++ b/gn/data/species.scm
@@ -6,9 +6,11 @@
#:use-module (ice-9 receive)
#:use-module (ice-9 string-fun)
#:use-module (gn db sparql)
+ #:use-module (gn data group)
#:use-module (web gn-uri)
#:export (
+ gnid-species
get-species-meta
get-species-data
get-species-shortnames
@@ -17,10 +19,10 @@
get-expanded-taxon-data
))
-(define (gn-species short-name)
- "Find the GN identifier from shortname"
+(define (gnid-species short-name)
+ "Find the GN identifier from shortname, e.g. Mus_musculus"
(let ([rec (get-expanded-taxon-data short-name)])
- rec
+ (url-parse-id (assoc-ref rec "gnid"))
))
(define (get-species)
@@ -128,5 +130,5 @@
("meta" . ,(mk-meta id))
("data" . ,(mk-data id))
("up" . ,(mk-meta "species"))
- ("links" . "test") ; ,(get-group-links (gn-species id)))
+ ("links" . ,(list->vector (get-group-links (gnid-species id))))
))
diff --git a/gn/db/sparql.scm b/gn/db/sparql.scm
index fd779c6..2665235 100644
--- a/gn/db/sparql.scm
+++ b/gn/db/sparql.scm
@@ -14,8 +14,10 @@
#:export (memo-sparql-species
memo-sparql-species-meta
sparql-species-meta
+ sparql-groups-meta
memo-sparql-wd-species-info
compile-species
+ compile-groups-meta
get-rows
tsv->scm
strip-lang
@@ -218,3 +220,23 @@ dump-species-metadata.ttl:gn:Axbxa gnt:belongsToSpecies gn:Mus_musculus .
))
rows)
recs)
+
+;; ------------------------------------------------------------------------------
+
+(define (sparql-groups-meta)
+ "Return values names recs"
+ (sparql-scm (gn-sparql-endpoint-url) "
+ SELECT DISTINCT ?set ?species ?descr WHERE {
+ ?set rdf:type gnc:inbredSet ;
+ gnt:belongsToSpecies ?species .
+ OPTIONAL {?set rdfs:label ?descr } .
+ }"))
+
+(define memo-sparql-groups-meta
+ (memoize2 sparql-groups-meta))
+
+(define (compile-groups-meta)
+ "Return tuple of names and rows containing #(set species descr)"
+ (receive (names res) (memo-sparql-groups-meta)
+ (let ([rows (get-rows names res)])
+ (list names rows))))