aboutsummaryrefslogtreecommitdiff
path: root/dump/triples.scm
diff options
context:
space:
mode:
Diffstat (limited to 'dump/triples.scm')
-rw-r--r--dump/triples.scm48
1 files changed, 48 insertions, 0 deletions
diff --git a/dump/triples.scm b/dump/triples.scm
new file mode 100644
index 0000000..bb2acdc
--- /dev/null
+++ b/dump/triples.scm
@@ -0,0 +1,48 @@
+(define-module (dump triples)
+ #:use-module (ice-9 match)
+ #:use-module (dump utils)
+ #:export (string->identifier
+ prefix
+ triple
+ scm->triples))
+
+(define (string->identifier prefix str)
+ "Convert STR to a turtle identifier after replacing illegal
+characters with an underscore and prefixing with gn:PREFIX."
+ (string->symbol
+ (string-append "gn:" prefix "_"
+ (string-map (lambda (c)
+ (case c
+ ((#\/ #\< #\> #\+ #\( #\) #\space #\@) #\_)
+ (else c)))
+ (string-downcase
+ (string-trim-right str #\.))))))
+
+(define (prefix prefix iri)
+ (format #t "@prefix ~a ~a .~%" prefix iri))
+
+(define (triple subject predicate object)
+ (unless (or (string? subject)
+ (symbol? subject))
+ (error "Triple subject not a string or symbol:"
+ (list subject predicate object)))
+ (unless (or (string? predicate)
+ (symbol? predicate))
+ (error "Triple predicate not a string or symbol:"
+ (list subject predicate object)))
+ (unless (or (string? object)
+ (symbol? object)
+ (number? object))
+ (error "Triple object not a string, symbol or number:"
+ (list subject predicate object)))
+ (format #t "~a ~a ~s .~%" subject predicate object))
+
+(define (scm->triples alist id)
+ (for-each (match-lambda
+ ((predicate . object)
+ (when (cond
+ ((string? object)
+ (not (string-blank? object)))
+ (else object))
+ (triple id predicate object))))
+ alist))