Escape string sequences when generating nquads and turtle documents.
nquads/fromrdf.scm
19 | 19 | #:use-module (ice-9 match) | |
20 | 20 | #:use-module (ice-9 textual-ports) | |
21 | 21 | #:use-module (iri iri) | |
22 | - | #:use-module (turtle parser) | |
22 | + | #:use-module (srfi srfi-1) | |
23 | 23 | #:use-module (srfi srfi-9) | |
24 | 24 | #:use-module (rdf rdf) | |
25 | 25 | #:export (rdf->nquads)) | |
26 | 26 | ||
27 | + | (define (nquads-escape str) | |
28 | + | "Escape a string for writing it to an nquads document." | |
29 | + | (list->string (append-map (lambda (c) | |
30 | + | (match c | |
31 | + | (#\\ (list #\\ #\\)) | |
32 | + | (#\" (list #\\ #\")) | |
33 | + | (#\newline (list #\\ #\n)) | |
34 | + | (#\return (list #\\ #\r)) | |
35 | + | (#\tab (list #\\ #\t)) | |
36 | + | (#\backspace (list #\\ #\b)) | |
37 | + | (_ (list c)))) | |
38 | + | (string->list str)))) | |
39 | + | ||
27 | 40 | (define (node->nquads node) | |
28 | 41 | (cond | |
29 | 42 | ((blank-node? node) | |
… | |||
31 | 44 | ((rdf-datatype? node) | |
32 | 45 | (string-append "<" (car (rdf-datatype-iris node)) ">")) | |
33 | 46 | ((rdf-literal? node) | |
34 | - | (string-append "\"" (rdf-literal-lexical-form node) "\"" | |
47 | + | (string-append "\"" (nquads-escape (rdf-literal-lexical-form node)) "\"" | |
35 | 48 | (if (rdf-literal-langtag node) | |
36 | 49 | (string-append "@" (rdf-literal-langtag node)) | |
37 | 50 | (let ((type (rdf-literal-type node))) |
turtle/fromrdf.scm
19 | 19 | #:use-module (ice-9 match) | |
20 | 20 | #:use-module (ice-9 textual-ports) | |
21 | 21 | #:use-module (iri iri) | |
22 | - | #:use-module (turtle parser) | |
22 | + | #:use-module (srfi srfi-1) | |
23 | 23 | #:use-module (srfi srfi-9) | |
24 | 24 | #:use-module (rdf rdf) | |
25 | 25 | #:export (rdf->turtle)) | |
26 | 26 | ||
27 | + | (define (turtle-escape str) | |
28 | + | "Escape a string for writing it to a turtle document." | |
29 | + | (list->string (append-map (lambda (c) | |
30 | + | (match c | |
31 | + | (#\\ (list #\\ #\\)) | |
32 | + | (#\" (list #\\ #\")) | |
33 | + | (#\newline (list #\\ #\n)) | |
34 | + | (#\return (list #\\ #\r)) | |
35 | + | (#\tab (list #\\ #\t)) | |
36 | + | (#\backspace (list #\\ #\b)) | |
37 | + | (_ (list c)))) | |
38 | + | (string->list str)))) | |
39 | + | ||
27 | 40 | (define (node->turtle node) | |
28 | 41 | (cond | |
29 | 42 | ((blank-node? node) | |
… | |||
31 | 44 | ((rdf-datatype? node) | |
32 | 45 | (string-append "<" (car (rdf-datatype-iris node)) ">")) | |
33 | 46 | ((rdf-literal? node) | |
34 | - | (string-append "\"" (rdf-literal-lexical-form node) "\"" | |
47 | + | (string-append "\"" (turtle-escape (rdf-literal-lexical-form node)) "\"" | |
35 | 48 | (if (rdf-literal-langtag node) | |
36 | 49 | (string-append "@" (rdf-literal-langtag node)) | |
37 | 50 | (let ((type (rdf-literal-type node))) |