aboutsummaryrefslogtreecommitdiff
path: root/json-to-ttl.scm
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-07-09 11:43:25 -0500
committerMunyoki Kilyungi2024-07-10 12:01:09 +0300
commit3eb01f8b0611e18d293283f761259961752c3c5c (patch)
tree33ce52c009d81a2061a413bb08869485daf75a4c /json-to-ttl.scm
parent2eca07c5f458ac6ea1962f8fecd2a2dc6b30e4fc (diff)
downloadgn-transform-databases-3eb01f8b0611e18d293283f761259961752c3c5c.tar.gz
Rename script: Give file a more relevant name.
Reviewed-by: Munyoki Kilyungi <me@bonfacemunyoki.com>
Diffstat (limited to 'json-to-ttl.scm')
-rwxr-xr-xjson-to-ttl.scm73
1 files changed, 73 insertions, 0 deletions
diff --git a/json-to-ttl.scm b/json-to-ttl.scm
new file mode 100755
index 0000000..0a054c5
--- /dev/null
+++ b/json-to-ttl.scm
@@ -0,0 +1,73 @@
+#! /usr/bin/env guile
+!#
+
+(use-modules (json)
+ (ice-9 ftw)
+ (ice-9 match)
+ (transform triples))
+
+
+
+(define %directory
+ (list-ref (command-line) 2))
+
+(define %data-directory
+ (list-ref (command-line) 1))
+
+
+
+(define (json-metadata->rdf path)
+ "Given a PATH that contains a json file, fetch the metadata embedded
+inside it."
+ (if (access? path F_OK)
+ (let* ((data (assoc-ref (call-with-input-file
+ path
+ (lambda (port)
+ (json->scm port)))
+ "metadata"))
+ (name (or (assoc-ref data "name")
+ (assoc-ref data "displayName"))))
+ (match data
+ (((key . value) ...)
+ (map
+ (lambda (a b)
+ (format
+ #f "gn:sampledata_~a gn:sampledata:~A ~a ."
+ name a (format #f "~s"
+ (cond ((boolean? b)
+ (if b "True" "False"))
+ (else b)))))
+ key value))))))
+
+(define (run-proc-on-files path proc)
+ (define (enter? name stat result)
+ (not (member (basename name) '(".git" ".svn" "CVS"))))
+ (define (leaf name stat result)
+ (proc name))
+ (define (down name stat result) result)
+ (define (up name stat result) result)
+ (define (skip name stat result) result)
+
+ ;; Ignore unreadable files/directories but warn the user.
+ (define (error name stat errno result)
+ (format (current-error-port) "warning: ~a: ~a~%"
+ name (strerror errno))
+ result)
+ (file-system-fold enter? leaf down up skip error 0 path))
+
+(define (rdf path)
+ (with-output-to-file
+ (string-append %directory "/sampledata.ttl")
+ (lambda ()
+ (prefix "gn:" "<http://genenetwork.org/>")
+ (newline)
+ (run-proc-on-files
+ %data-directory
+ (lambda (file)
+ (when (string-suffix? "json" file)
+ (map (lambda (line)
+ (display line)
+ (newline))
+ (json-metadata->rdf file))))))))
+
+(rdf %data-directory)