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))) | |