Improve turtle parsing
.gitignore
| 1 | 1 | *.go | |
| 2 | 2 | *.log | |
| 3 | + | *.trs | |
| 3 | 4 | aclocal.m4 | |
| 4 | 5 | autom4te.cache/ | |
| 5 | 6 | configure |
turtle/parser.scm
| 32 | 32 | (define-peg-pattern pname-ln all (and pname-ns pn-local)) | |
| 33 | 33 | ;; [141s] BLANK_NODE_LABEL ::= '_:' (PN_CHARS_U | [0-9]) ((PN_CHARS | '.')* PN_CHARS)? | |
| 34 | 34 | (define-peg-pattern blank-node-label all | |
| 35 | - | (and "_:" (or pn-chars-u (range #\0 #\9)) (* (or pn-chars (and "." pn-chars))))) | |
| 35 | + | (and "_:" (or pn-chars-u (range #\0 #\9)) (* (and (* ".") pn-chars)))) | |
| 36 | 36 | ;; [144s] LANGTAG ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* | |
| 37 | 37 | (define-peg-pattern langtag all | |
| 38 | 38 | (and "@" (+ (or (range #\a #\z) (range #\A #\Z))) | |
… | |||
| 103 | 103 | (range #\x203f #\x2040))) | |
| 104 | 104 | ;; [167s] PN_PREFIX ::= PN_CHARS_BASE ((PN_CHARS | '.')* PN_CHARS)? | |
| 105 | 105 | (define-peg-pattern pn-prefix body | |
| 106 | - | (and pn-chars-base (* (or pn-chars (and "." pn-chars))))) | |
| 106 | + | (and pn-chars-base (* (and (* ".") pn-chars)))) | |
| 107 | 107 | ;; [168s] PN_LOCAL ::= (PN_CHARS_U | ':' | [0-9] | PLX) ((PN_CHARS | '.' | ':' | PLX)* (PN_CHARS | ':' | PLX))? | |
| 108 | 108 | (define-peg-pattern pn-local body | |
| 109 | 109 | (and (or pn-chars-u ":" (range #\0 #\9) plx) | |
| 110 | - | (* (or pn-chars ":" "plx" (and "." (or pn-chars ":" plx)))))) | |
| 110 | + | (* (and (* ".") (or pn-chars ":" plx))))) | |
| 111 | 111 | ;; [169s] PLX ::= PERCENT | PN_LOCAL_ESC | |
| 112 | 112 | (define-peg-pattern plx body (or percent pn-local-esc)) | |
| 113 | 113 | ;; [170s] PERCENT ::= '%' HEX HEX | |
turtle/tordf.scm
| 22 | 22 | #:use-module (turtle parser) | |
| 23 | 23 | #:use-module (srfi srfi-9) | |
| 24 | 24 | #:use-module (rdf rdf) | |
| 25 | - | #:use-module ((rdf xsd) #:prefix xsd:) | |
| 26 | 25 | #:export (turtle->rdf)) | |
| 27 | 26 | ||
| 28 | 27 | (define-record-type parser-state | |
… | |||
| 71 | 70 | `(("iri" . ,(string-append (assoc-ref (parser-state-namespaces state) "") | |
| 72 | 71 | suffix)) | |
| 73 | 72 | ("state" . ,state))) | |
| 73 | + | (('iri ('prefixed-name 'pname-ns)) | |
| 74 | + | `(("iri" . ,(assoc-ref (parser-state-namespaces state) "")) | |
| 75 | + | ("state" . ,state))) | |
| 74 | 76 | (('iri 'iriref) | |
| 75 | 77 | `(("iri" . ,(resolve-iri (parser-state-base-uri state) "")) | |
| 76 | 78 | ("state" . ,state))) | |
… | |||
| 101 | 103 | (define (parse-object object state) | |
| 102 | 104 | (pk 'object object) | |
| 103 | 105 | (match object | |
| 104 | - | (('rdf-literal ('string-pat ('string-literal-quote str))) | |
| 106 | + | (('rdf-literal ('string-pat (_ str))) | |
| 107 | + | (update-parser-state state | |
| 108 | + | #:result | |
| 109 | + | (cons | |
| 110 | + | (make-rdf-triple | |
| 111 | + | (parser-state-cur-subject state) | |
| 112 | + | (parser-state-cur-predicate state) | |
| 113 | + | (make-rdf-literal str "http://www.w3.org/2001/XMLSchema#string" #f)) | |
| 114 | + | (parser-state-result state)))) | |
| 115 | + | (('rdf-literal ('string-pat (_ str)) ('langtag lang)) | |
| 116 | + | (update-parser-state state | |
| 117 | + | #:result | |
| 118 | + | (cons | |
| 119 | + | (make-rdf-triple | |
| 120 | + | (parser-state-cur-subject state) | |
| 121 | + | (parser-state-cur-predicate state) | |
| 122 | + | (make-rdf-literal | |
| 123 | + | str "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" lang)) | |
| 124 | + | (parser-state-result state)))) | |
| 125 | + | (('numeric-literal ('integer int)) | |
| 126 | + | (update-parser-state state | |
| 127 | + | #:result | |
| 128 | + | (cons | |
| 129 | + | (make-rdf-triple | |
| 130 | + | (parser-state-cur-subject state) | |
| 131 | + | (parser-state-cur-predicate state) | |
| 132 | + | (make-rdf-literal int "http://www.w3.org/2001/XMLSchema#integer" #f)) | |
| 133 | + | (parser-state-result state)))) | |
| 134 | + | (('boolean-literal bool) | |
| 105 | 135 | (update-parser-state state | |
| 106 | 136 | #:result | |
| 107 | 137 | (cons | |
| 108 | 138 | (make-rdf-triple | |
| 109 | 139 | (parser-state-cur-subject state) | |
| 110 | 140 | (parser-state-cur-predicate state) | |
| 111 | - | (make-rdf-literal str xsd:string #f)) | |
| 141 | + | (make-rdf-literal bool "http://www.w3.org/2001/XMLSchema#boolean" #f)) | |
| 112 | 142 | (parser-state-result state)))) | |
| 113 | 143 | (('blank-node-property-list ('predicate-object-list po ...)) | |
| 114 | 144 | (let* ((node ((parser-state-blank-node-gen state))) | |