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