From 25f9279b0078ef0cc93507776c9c8413a0a73a00 Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Sun, 30 Oct 2022 20:47:37 +0530 Subject: Move triple utilities to new module. * dump.scm (string->identifier, string-blank?, triple, prefix): Move to ... * dump/triples.scm: ... new file. * dump.scm: Import (dump triples). --- dump/triples.scm | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 dump/triples.scm (limited to 'dump/triples.scm') 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)) -- cgit v1.2.3