rdflib 2.2.21 → 2.2.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/rdflib.min.js +1 -1
- package/dist/rdflib.min.js.LICENSE.txt +9 -1
- package/dist/rdflib.min.js.map +1 -1
- package/esm/blank-node.js +61 -114
- package/esm/class-order.js +1 -1
- package/esm/collection.js +70 -128
- package/esm/convert.js +1 -2
- package/esm/default-graph.js +14 -48
- package/esm/empty.js +8 -39
- package/esm/factories/canonical-data-factory.js +33 -65
- package/esm/factories/extended-term-factory.js +18 -25
- package/esm/factories/factory-types.js +3 -2
- package/esm/factories/rdflib-data-factory.js +9 -19
- package/esm/fetcher.js +1341 -1854
- package/esm/formula.js +639 -846
- package/esm/index.js +40 -76
- package/esm/jsonldparser.js +24 -49
- package/esm/jsonparser.js +1 -8
- package/esm/lists.js +47 -110
- package/esm/literal.js +120 -189
- package/esm/log.js +7 -7
- package/esm/n3parser.js +1015 -1412
- package/esm/named-node.js +70 -119
- package/esm/namespace.js +2 -5
- package/esm/node-internal.js +73 -110
- package/esm/node.js +2 -7
- package/esm/parse.js +12 -19
- package/esm/patch-parser.js +10 -30
- package/esm/query-to-sparql.js +0 -18
- package/esm/query.js +63 -147
- package/esm/rdfaparser.js +794 -997
- package/esm/rdfxmlparser.js +347 -461
- package/esm/serialize.js +9 -27
- package/esm/serializer.js +820 -1049
- package/esm/sparql-to-query.js +44 -134
- package/esm/statement.js +54 -85
- package/esm/store.js +830 -1103
- package/esm/types.js +22 -21
- package/esm/update-manager.js +869 -1106
- package/esm/updates-via.js +104 -161
- package/esm/uri.js +9 -53
- package/esm/utils/default-graph-uri.js +3 -2
- package/esm/utils/termValue.js +0 -1
- package/esm/utils/terms.js +19 -21
- package/esm/utils-js.js +20 -61
- package/esm/utils.js +10 -21
- package/esm/variable.js +32 -78
- package/esm/xsd.js +2 -2
- package/lib/blank-node.js +60 -113
- package/lib/class-order.js +1 -2
- package/lib/collection.js +69 -131
- package/lib/convert.js +3 -9
- package/lib/default-graph.js +13 -52
- package/lib/empty.js +8 -43
- package/lib/factories/canonical-data-factory.js +35 -79
- package/lib/factories/extended-term-factory.js +18 -32
- package/lib/factories/factory-types.d.ts +6 -6
- package/lib/factories/factory-types.js +1 -4
- package/lib/factories/rdflib-data-factory.js +9 -23
- package/lib/fetcher.d.ts +6 -6
- package/lib/fetcher.js +1370 -1843
- package/lib/formula.js +640 -855
- package/lib/index.js +66 -152
- package/lib/jsonldparser.js +23 -53
- package/lib/jsonparser.js +1 -10
- package/lib/lists.js +55 -112
- package/lib/literal.js +120 -195
- package/lib/log.d.ts +0 -6
- package/lib/log.js +7 -8
- package/lib/n3parser.js +1030 -1436
- package/lib/named-node.js +69 -126
- package/lib/namespace.js +2 -7
- package/lib/node-internal.js +74 -107
- package/lib/node.js +2 -12
- package/lib/parse.d.ts +1 -1
- package/lib/parse.js +12 -32
- package/lib/patch-parser.js +11 -34
- package/lib/query-to-sparql.js +0 -23
- package/lib/query.js +62 -167
- package/lib/rdfaparser.js +796 -1009
- package/lib/rdfxmlparser.js +349 -466
- package/lib/serialize.js +11 -37
- package/lib/serializer.js +823 -1064
- package/lib/sparql-to-query.js +42 -167
- package/lib/statement.js +55 -91
- package/lib/store.d.ts +1 -1
- package/lib/store.js +850 -1112
- package/lib/tf-types.d.ts +4 -4
- package/lib/types.d.ts +8 -8
- package/lib/types.js +23 -23
- package/lib/update-manager.d.ts +1 -1
- package/lib/update-manager.js +865 -1103
- package/lib/updates-via.js +105 -164
- package/lib/uri.js +8 -61
- package/lib/utils/default-graph-uri.js +3 -5
- package/lib/utils/termValue.js +0 -2
- package/lib/utils/terms.js +19 -40
- package/lib/utils-js.js +23 -88
- package/lib/utils.js +10 -27
- package/lib/variable.js +34 -85
- package/lib/xsd-internal.js +0 -3
- package/lib/xsd.js +2 -6
- package/package.json +36 -36
- package/src/fetcher.ts +2 -2
- package/src/update-manager.ts +12 -7
- package/changes.txt +0 -59
package/esm/rdfxmlparser.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
|
-
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
|
-
|
|
5
2
|
/**
|
|
6
3
|
* RDF/XML PARSER
|
|
7
4
|
*
|
|
@@ -53,7 +50,6 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
53
50
|
* associated documentation will at all times remain with copyright
|
|
54
51
|
* holders.
|
|
55
52
|
*/
|
|
56
|
-
|
|
57
53
|
/**
|
|
58
54
|
* @class RDFParser resource object tied to an RDFStore
|
|
59
55
|
*
|
|
@@ -61,515 +57,407 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
61
57
|
*
|
|
62
58
|
*/
|
|
63
59
|
import * as uriUtil from './uri';
|
|
64
|
-
|
|
65
|
-
var RDFParser = /*#__PURE__*/function () {
|
|
60
|
+
export default class RDFParser {
|
|
66
61
|
/*
|
|
67
62
|
* @constructor
|
|
68
63
|
* @param {RDFStore} store An RDFStore object
|
|
69
64
|
*/
|
|
70
|
-
|
|
71
|
-
_classCallCheck(this, RDFParser);
|
|
72
|
-
|
|
65
|
+
constructor(store) {
|
|
73
66
|
/** Our triple store reference @private */
|
|
74
|
-
this.store = store;
|
|
75
|
-
/** Our identified blank nodes @private */
|
|
76
|
-
|
|
77
|
-
this.bnodes = {};
|
|
78
|
-
/** A context for context-aware stores @private */
|
|
79
|
-
|
|
80
|
-
this.why = null;
|
|
81
|
-
/** Reification flag */
|
|
82
67
|
|
|
68
|
+
this.store = store; /** Our identified blank nodes @private */
|
|
69
|
+
this.bnodes = {}; /** A context for context-aware stores @private */
|
|
70
|
+
this.why = null; /** Reification flag */
|
|
83
71
|
this.reify = false;
|
|
84
72
|
}
|
|
73
|
+
|
|
85
74
|
/** Standard namespaces that we know how to handle @final
|
|
86
75
|
* @member RDFParser
|
|
87
76
|
*/
|
|
88
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Frame class for namespace and base URI lookups
|
|
80
|
+
* Base lookups will always resolve because the parser knows
|
|
81
|
+
* the default base.
|
|
82
|
+
*
|
|
83
|
+
* @private
|
|
84
|
+
*/
|
|
89
85
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
this.
|
|
129
|
-
this.
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
this.addSymbol(this.NODE, uri);
|
|
158
|
-
|
|
159
|
-
if (this.isTripleToLoad()) {
|
|
160
|
-
this.loadTriple();
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
|
|
164
|
-
/** Add a collection node to this frame */
|
|
165
|
-
'addCollection': function addCollection() {
|
|
166
|
-
this.nodeType = this.NODE;
|
|
167
|
-
this.node = this.store.collection();
|
|
168
|
-
this.collection = true;
|
|
169
|
-
|
|
170
|
-
if (this.isTripleToLoad()) {
|
|
171
|
-
this.loadTriple();
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
|
|
175
|
-
/** Add a collection arc to this frame */
|
|
176
|
-
'addCollectionArc': function addCollectionArc() {
|
|
177
|
-
this.nodeType = this.ARC;
|
|
178
|
-
},
|
|
179
|
-
|
|
180
|
-
/** Add a bnode to this frame */
|
|
181
|
-
'addBNode': function addBNode(id) {
|
|
182
|
-
if (id != null) {
|
|
183
|
-
if (this.parser.bnodes[id] != null) {
|
|
184
|
-
this.node = this.parser.bnodes[id];
|
|
185
|
-
} else {
|
|
186
|
-
this.node = this.parser.bnodes[id] = this.store.bnode();
|
|
187
|
-
}
|
|
188
|
-
} else {
|
|
189
|
-
this.node = this.store.bnode();
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
this.nodeType = this.NODE;
|
|
193
|
-
|
|
194
|
-
if (this.isTripleToLoad()) {
|
|
195
|
-
this.loadTriple();
|
|
196
|
-
}
|
|
197
|
-
},
|
|
198
|
-
|
|
199
|
-
/** Add an arc or property to this frame */
|
|
200
|
-
'addArc': function addArc(uri) {
|
|
201
|
-
if (uri === RDFParser.ns.RDF + 'li') {
|
|
202
|
-
uri = RDFParser.ns.RDF + '_' + this.parent.listIndex;
|
|
203
|
-
this.parent.listIndex++;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
this.addSymbol(this.ARC, uri);
|
|
207
|
-
},
|
|
208
|
-
|
|
209
|
-
/** Add a literal to this frame */
|
|
210
|
-
'addLiteral': function addLiteral(value) {
|
|
211
|
-
if (this.parent.datatype && this.parent.datatype !== RDFParser.ns.RDF + 'langString') {
|
|
212
|
-
this.node = this.store.literal(value, this.store.sym(this.parent.datatype));
|
|
86
|
+
frameFactory(parser, parent, element) {
|
|
87
|
+
return {
|
|
88
|
+
'NODE': 1,
|
|
89
|
+
'ARC': 2,
|
|
90
|
+
'parent': parent,
|
|
91
|
+
'parser': parser,
|
|
92
|
+
'store': parser.store,
|
|
93
|
+
'element': element,
|
|
94
|
+
'lastChild': 0,
|
|
95
|
+
'base': null,
|
|
96
|
+
'lang': null,
|
|
97
|
+
'node': null,
|
|
98
|
+
'nodeType': null,
|
|
99
|
+
'listIndex': 1,
|
|
100
|
+
'rdfid': null,
|
|
101
|
+
'datatype': null,
|
|
102
|
+
'collection': false,
|
|
103
|
+
/** Terminate the frame and notify the store that we're done */
|
|
104
|
+
'terminateFrame': function () {
|
|
105
|
+
if (this.collection) {
|
|
106
|
+
this.node.close();
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
/** Add a symbol of a certain type to the this frame */'addSymbol': function (type, uri) {
|
|
110
|
+
uri = uriUtil.join(uri, this.base);
|
|
111
|
+
this.node = this.store.sym(uri);
|
|
112
|
+
this.nodeType = type;
|
|
113
|
+
},
|
|
114
|
+
/** Load any constructed triples into the store */'loadTriple': function () {
|
|
115
|
+
if (this.parent.parent.collection) {
|
|
116
|
+
this.parent.parent.node.append(this.node);
|
|
117
|
+
} else {
|
|
118
|
+
this.store.add(this.parent.parent.node, this.parent.node, this.node, this.parser.why);
|
|
119
|
+
}
|
|
120
|
+
if (this.parent.rdfid != null) {
|
|
121
|
+
// reify
|
|
122
|
+
var triple = this.store.sym(uriUtil.join('#' + this.parent.rdfid, this.base));
|
|
123
|
+
this.store.add(triple, this.store.sym(RDFParser.ns.RDF + 'type'), this.store.sym(RDFParser.ns.RDF + 'Statement'), this.parser.why);
|
|
124
|
+
this.store.add(triple, this.store.sym(RDFParser.ns.RDF + 'subject'), this.parent.parent.node, this.parser.why);
|
|
125
|
+
this.store.add(triple, this.store.sym(RDFParser.ns.RDF + 'predicate'), this.parent.node, this.parser.why);
|
|
126
|
+
this.store.add(triple, this.store.sym(RDFParser.ns.RDF + 'object'), this.node, this.parser.why);
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
/** Check if it's OK to load a triple */'isTripleToLoad': function () {
|
|
130
|
+
return this.parent != null && this.parent.parent != null && this.nodeType === this.NODE && this.parent.nodeType === this.ARC && this.parent.parent.nodeType === this.NODE;
|
|
131
|
+
},
|
|
132
|
+
/** Add a symbolic node to this frame */'addNode': function (uri) {
|
|
133
|
+
this.addSymbol(this.NODE, uri);
|
|
134
|
+
if (this.isTripleToLoad()) {
|
|
135
|
+
this.loadTriple();
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
/** Add a collection node to this frame */'addCollection': function () {
|
|
139
|
+
this.nodeType = this.NODE;
|
|
140
|
+
this.node = this.store.collection();
|
|
141
|
+
this.collection = true;
|
|
142
|
+
if (this.isTripleToLoad()) {
|
|
143
|
+
this.loadTriple();
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
/** Add a collection arc to this frame */'addCollectionArc': function () {
|
|
147
|
+
this.nodeType = this.ARC;
|
|
148
|
+
},
|
|
149
|
+
/** Add a bnode to this frame */'addBNode': function (id) {
|
|
150
|
+
if (id != null) {
|
|
151
|
+
if (this.parser.bnodes[id] != null) {
|
|
152
|
+
this.node = this.parser.bnodes[id];
|
|
213
153
|
} else {
|
|
214
|
-
this.node = this.
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
this.nodeType = this.NODE;
|
|
218
|
-
|
|
219
|
-
if (this.isTripleToLoad()) {
|
|
220
|
-
this.loadTriple();
|
|
154
|
+
this.node = this.parser.bnodes[id] = this.store.bnode();
|
|
221
155
|
}
|
|
156
|
+
} else {
|
|
157
|
+
this.node = this.store.bnode();
|
|
222
158
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
attributeNode = potentialNode;
|
|
245
|
-
break;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
159
|
+
this.nodeType = this.NODE;
|
|
160
|
+
if (this.isTripleToLoad()) {
|
|
161
|
+
this.loadTriple();
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
/** Add an arc or property to this frame */'addArc': function (uri) {
|
|
165
|
+
if (uri === RDFParser.ns.RDF + 'li') {
|
|
166
|
+
uri = RDFParser.ns.RDF + '_' + this.parent.listIndex;
|
|
167
|
+
this.parent.listIndex++;
|
|
168
|
+
}
|
|
169
|
+
this.addSymbol(this.ARC, uri);
|
|
170
|
+
},
|
|
171
|
+
/** Add a literal to this frame */'addLiteral': function (value) {
|
|
172
|
+
if (this.parent.datatype && this.parent.datatype !== RDFParser.ns.RDF + 'langString') {
|
|
173
|
+
this.node = this.store.literal(value, this.store.sym(this.parent.datatype));
|
|
174
|
+
} else {
|
|
175
|
+
this.node = this.store.literal(value, this.lang);
|
|
176
|
+
}
|
|
177
|
+
this.nodeType = this.NODE;
|
|
178
|
+
if (this.isTripleToLoad()) {
|
|
179
|
+
this.loadTriple();
|
|
248
180
|
}
|
|
249
181
|
}
|
|
182
|
+
};
|
|
183
|
+
}
|
|
250
184
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
this.cleanParser(); // figure out the root element
|
|
266
|
-
|
|
267
|
-
var root;
|
|
268
|
-
|
|
269
|
-
if (document.nodeType === RDFParser.nodeType.DOCUMENT) {
|
|
270
|
-
for (var c = 0; c < children.length; c++) {
|
|
271
|
-
if (children[c].nodeType === RDFParser.nodeType.ELEMENT) {
|
|
272
|
-
root = children[c];
|
|
185
|
+
// from the OpenLayers source .. needed to get around IE problems.
|
|
186
|
+
getAttributeNodeNS(node, uri, name) {
|
|
187
|
+
var attributeNode = null;
|
|
188
|
+
if (node.getAttributeNodeNS) {
|
|
189
|
+
attributeNode = node.getAttributeNodeNS(uri, name);
|
|
190
|
+
} else {
|
|
191
|
+
var attributes = node.attributes;
|
|
192
|
+
var potentialNode, fullName;
|
|
193
|
+
for (var i = 0; i < attributes.length; ++i) {
|
|
194
|
+
potentialNode = attributes[i];
|
|
195
|
+
if (potentialNode.namespaceURI === uri) {
|
|
196
|
+
fullName = potentialNode.prefix ? potentialNode.prefix + ':' + name : name;
|
|
197
|
+
if (fullName === potentialNode.nodeName) {
|
|
198
|
+
attributeNode = potentialNode;
|
|
273
199
|
break;
|
|
274
200
|
}
|
|
275
201
|
}
|
|
276
|
-
} else if (document.nodeType === RDFParser.nodeType.ELEMENT) {
|
|
277
|
-
root = document;
|
|
278
|
-
} else {
|
|
279
|
-
throw new Error("RDFParser: can't find root in " + base + '. Halting. '); // return false
|
|
280
202
|
}
|
|
281
|
-
|
|
282
|
-
this.why = why; // our topmost frame
|
|
283
|
-
|
|
284
|
-
var f = this.frameFactory(this);
|
|
285
|
-
this.base = base;
|
|
286
|
-
f.base = base;
|
|
287
|
-
f.lang = null; // was '' but can't have langs like that 2015 (!)
|
|
288
|
-
|
|
289
|
-
this.parseDOM(this.buildFrame(f, root));
|
|
290
|
-
return true;
|
|
291
203
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
value: function parseDOM(frame) {
|
|
295
|
-
// a DOM utility function used in parsing
|
|
296
|
-
var rdfid;
|
|
204
|
+
return attributeNode;
|
|
205
|
+
}
|
|
297
206
|
|
|
298
|
-
|
|
299
|
-
|
|
207
|
+
/**
|
|
208
|
+
* Build our initial scope frame and parse the DOM into triples
|
|
209
|
+
* @param {HTMLDocument} document The DOM to parse
|
|
210
|
+
* @param {String} base The base URL to use
|
|
211
|
+
* @param {Object} why The context to which this resource belongs
|
|
212
|
+
*/
|
|
300
213
|
|
|
301
|
-
|
|
302
|
-
|
|
214
|
+
parse(document, base, why) {
|
|
215
|
+
var children = document.childNodes; // clean up for the next run
|
|
216
|
+
this.cleanParser(); // figure out the root element
|
|
217
|
+
var root;
|
|
218
|
+
if (document.nodeType === RDFParser.nodeType.DOCUMENT) {
|
|
219
|
+
for (var c = 0; c < children.length; c++) {
|
|
220
|
+
if (children[c].nodeType === RDFParser.nodeType.ELEMENT) {
|
|
221
|
+
root = children[c];
|
|
222
|
+
break;
|
|
303
223
|
}
|
|
224
|
+
}
|
|
225
|
+
} else if (document.nodeType === RDFParser.nodeType.ELEMENT) {
|
|
226
|
+
root = document;
|
|
227
|
+
} else {
|
|
228
|
+
throw new Error("RDFParser: can't find root in " + base + '. Halting. ');
|
|
229
|
+
// return false
|
|
230
|
+
}
|
|
304
231
|
|
|
305
|
-
|
|
306
|
-
|
|
232
|
+
this.why = why; // our topmost frame
|
|
233
|
+
var f = this.frameFactory(this);
|
|
234
|
+
this.base = base;
|
|
235
|
+
f.base = base;
|
|
236
|
+
f.lang = null; // was '' but can't have langs like that 2015 (!)
|
|
237
|
+
this.parseDOM(this.buildFrame(f, root));
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
parseDOM(frame) {
|
|
241
|
+
// a DOM utility function used in parsing
|
|
242
|
+
var rdfid;
|
|
243
|
+
var elementURI = function (el) {
|
|
244
|
+
var result = '';
|
|
245
|
+
if (el.namespaceURI == null) {
|
|
246
|
+
throw new Error('RDF/XML syntax error: No namespace for ' + el.localName + ' in ' + this.base);
|
|
247
|
+
}
|
|
248
|
+
if (el.namespaceURI) {
|
|
249
|
+
result = result + el.namespaceURI;
|
|
250
|
+
}
|
|
251
|
+
if (el.localName) {
|
|
252
|
+
result = result + el.localName;
|
|
253
|
+
} else if (el.nodeName) {
|
|
254
|
+
if (el.nodeName.indexOf(':') >= 0) result = result + el.nodeName.split(':')[1];else result = result + el.nodeName;
|
|
255
|
+
}
|
|
256
|
+
return result;
|
|
257
|
+
}.bind(this);
|
|
258
|
+
var dig = true; // if we'll dig down in the tree on the next iter
|
|
259
|
+
while (frame.parent) {
|
|
260
|
+
var dom = frame.element;
|
|
261
|
+
var attrs = dom.attributes;
|
|
262
|
+
if (dom.nodeType === RDFParser.nodeType.TEXT || dom.nodeType === RDFParser.nodeType.CDATA_SECTION) {
|
|
263
|
+
// we have a literal
|
|
264
|
+
if (frame.parent.nodeType === frame.NODE) {
|
|
265
|
+
// must have had attributes, store as rdf:value
|
|
266
|
+
frame.addArc(RDFParser.ns.RDF + 'value');
|
|
267
|
+
frame = this.buildFrame(frame);
|
|
307
268
|
}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
269
|
+
frame.addLiteral(dom.nodeValue);
|
|
270
|
+
} else if (elementURI(dom) !== RDFParser.ns.RDF + 'RDF') {
|
|
271
|
+
// not root
|
|
272
|
+
if (frame.parent && frame.parent.collection) {
|
|
273
|
+
// we're a collection element
|
|
274
|
+
frame.addCollectionArc();
|
|
275
|
+
frame = this.buildFrame(frame, frame.element);
|
|
276
|
+
frame.parent.element = null;
|
|
313
277
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
while (frame.parent) {
|
|
321
|
-
var dom = frame.element;
|
|
322
|
-
var attrs = dom.attributes;
|
|
323
|
-
|
|
324
|
-
if (dom.nodeType === RDFParser.nodeType.TEXT || dom.nodeType === RDFParser.nodeType.CDATA_SECTION) {
|
|
325
|
-
// we have a literal
|
|
326
|
-
if (frame.parent.nodeType === frame.NODE) {
|
|
327
|
-
// must have had attributes, store as rdf:value
|
|
328
|
-
frame.addArc(RDFParser.ns.RDF + 'value');
|
|
329
|
-
frame = this.buildFrame(frame);
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
frame.addLiteral(dom.nodeValue);
|
|
333
|
-
} else if (elementURI(dom) !== RDFParser.ns.RDF + 'RDF') {
|
|
334
|
-
// not root
|
|
335
|
-
if (frame.parent && frame.parent.collection) {
|
|
336
|
-
// we're a collection element
|
|
337
|
-
frame.addCollectionArc();
|
|
338
|
-
frame = this.buildFrame(frame, frame.element);
|
|
339
|
-
frame.parent.element = null;
|
|
278
|
+
if (!frame.parent || !frame.parent.nodeType || frame.parent.nodeType === frame.ARC) {
|
|
279
|
+
// we need a node
|
|
280
|
+
var about = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'about');
|
|
281
|
+
rdfid = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'ID');
|
|
282
|
+
if (about && rdfid) {
|
|
283
|
+
throw new Error('RDFParser: ' + dom.nodeName + ' has both rdf:id and rdf:about.' + ' Halting. Only one of these' + ' properties may be specified on a' + ' node.');
|
|
340
284
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
if (!about && rdfid) {
|
|
352
|
-
frame.addNode('#' + rdfid.nodeValue);
|
|
353
|
-
dom.removeAttributeNode(rdfid);
|
|
354
|
-
} else if (about == null && rdfid == null) {
|
|
355
|
-
var bnid = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'nodeID');
|
|
356
|
-
|
|
357
|
-
if (bnid) {
|
|
358
|
-
frame.addBNode(bnid.nodeValue);
|
|
359
|
-
dom.removeAttributeNode(bnid);
|
|
360
|
-
} else {
|
|
361
|
-
frame.addBNode();
|
|
362
|
-
}
|
|
285
|
+
if (!about && rdfid) {
|
|
286
|
+
frame.addNode('#' + rdfid.nodeValue);
|
|
287
|
+
dom.removeAttributeNode(rdfid);
|
|
288
|
+
} else if (about == null && rdfid == null) {
|
|
289
|
+
var bnid = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'nodeID');
|
|
290
|
+
if (bnid) {
|
|
291
|
+
frame.addBNode(bnid.nodeValue);
|
|
292
|
+
dom.removeAttributeNode(bnid);
|
|
363
293
|
} else {
|
|
364
|
-
frame.
|
|
365
|
-
dom.removeAttributeNode(about);
|
|
366
|
-
} // Typed nodes
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
var rdftype = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'type');
|
|
370
|
-
|
|
371
|
-
if (RDFParser.ns.RDF + 'Description' !== elementURI(dom)) {
|
|
372
|
-
rdftype = {
|
|
373
|
-
'nodeValue': elementURI(dom)
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
if (rdftype != null) {
|
|
378
|
-
this.store.add(frame.node, this.store.sym(RDFParser.ns.RDF + 'type'), this.store.sym(uriUtil.join(rdftype.nodeValue, frame.base)), this.why);
|
|
379
|
-
|
|
380
|
-
if (rdftype.nodeName) {
|
|
381
|
-
dom.removeAttributeNode(rdftype);
|
|
382
|
-
}
|
|
383
|
-
} // Property Attributes
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
for (var x = attrs.length - 1; x >= 0; x--) {
|
|
387
|
-
this.store.add(frame.node, this.store.sym(elementURI(attrs[x])), this.store.literal(attrs[x].nodeValue, frame.lang), this.why);
|
|
294
|
+
frame.addBNode();
|
|
388
295
|
}
|
|
389
296
|
} else {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
297
|
+
frame.addNode(about.nodeValue);
|
|
298
|
+
dom.removeAttributeNode(about);
|
|
299
|
+
}
|
|
300
|
+
// Typed nodes
|
|
301
|
+
var rdftype = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'type');
|
|
302
|
+
if (RDFParser.ns.RDF + 'Description' !== elementURI(dom)) {
|
|
303
|
+
rdftype = {
|
|
304
|
+
'nodeValue': elementURI(dom)
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
if (rdftype != null) {
|
|
308
|
+
this.store.add(frame.node, this.store.sym(RDFParser.ns.RDF + 'type'), this.store.sym(uriUtil.join(rdftype.nodeValue, frame.base)), this.why);
|
|
309
|
+
if (rdftype.nodeName) {
|
|
310
|
+
dom.removeAttributeNode(rdftype);
|
|
400
311
|
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
312
|
+
}
|
|
313
|
+
// Property Attributes
|
|
314
|
+
for (var x = attrs.length - 1; x >= 0; x--) {
|
|
315
|
+
this.store.add(frame.node, this.store.sym(elementURI(attrs[x])), this.store.literal(attrs[x].nodeValue, frame.lang), this.why);
|
|
316
|
+
}
|
|
317
|
+
} else {
|
|
318
|
+
// we should add an arc (or implicit bnode+arc)
|
|
319
|
+
frame.addArc(elementURI(dom)); // save the arc's rdf:ID if it has one
|
|
320
|
+
if (this.reify) {
|
|
321
|
+
rdfid = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'ID');
|
|
322
|
+
if (rdfid) {
|
|
323
|
+
frame.rdfid = rdfid.nodeValue;
|
|
324
|
+
dom.removeAttributeNode(rdfid);
|
|
408
325
|
}
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
326
|
+
}
|
|
327
|
+
var parsetype = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'parseType');
|
|
328
|
+
var datatype = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'datatype');
|
|
329
|
+
if (datatype) {
|
|
330
|
+
frame.datatype = datatype.nodeValue;
|
|
331
|
+
dom.removeAttributeNode(datatype);
|
|
332
|
+
}
|
|
333
|
+
if (parsetype) {
|
|
334
|
+
var nv = parsetype.nodeValue;
|
|
335
|
+
if (nv === 'Literal') {
|
|
336
|
+
frame.datatype = RDFParser.ns.RDF + 'XMLLiteral';
|
|
337
|
+
frame = this.buildFrame(frame);
|
|
338
|
+
// Don't include the literal node, only its children
|
|
339
|
+
frame.addLiteral(dom.childNodes);
|
|
340
|
+
dig = false;
|
|
341
|
+
} else if (nv === 'Resource') {
|
|
342
|
+
frame = this.buildFrame(frame, frame.element);
|
|
343
|
+
frame.parent.element = null;
|
|
344
|
+
frame.addBNode();
|
|
345
|
+
} else if (nv === 'Collection') {
|
|
346
|
+
frame = this.buildFrame(frame, frame.element);
|
|
347
|
+
frame.parent.element = null;
|
|
348
|
+
frame.addCollection();
|
|
349
|
+
}
|
|
350
|
+
dom.removeAttributeNode(parsetype);
|
|
351
|
+
}
|
|
352
|
+
if (attrs.length !== 0) {
|
|
353
|
+
var resource = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'resource');
|
|
354
|
+
var bnid2 = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'nodeID');
|
|
355
|
+
frame = this.buildFrame(frame);
|
|
356
|
+
if (resource) {
|
|
357
|
+
frame.addNode(resource.nodeValue);
|
|
358
|
+
dom.removeAttributeNode(resource);
|
|
359
|
+
} else {
|
|
360
|
+
if (bnid2) {
|
|
361
|
+
frame.addBNode(bnid2.nodeValue);
|
|
362
|
+
dom.removeAttributeNode(bnid2);
|
|
363
|
+
} else {
|
|
422
364
|
frame.addBNode();
|
|
423
|
-
} else if (nv === 'Collection') {
|
|
424
|
-
frame = this.buildFrame(frame, frame.element);
|
|
425
|
-
frame.parent.element = null;
|
|
426
|
-
frame.addCollection();
|
|
427
365
|
}
|
|
428
|
-
|
|
429
|
-
dom.removeAttributeNode(parsetype);
|
|
430
366
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
if (resource) {
|
|
438
|
-
frame.addNode(resource.nodeValue);
|
|
439
|
-
dom.removeAttributeNode(resource);
|
|
367
|
+
for (var x1 = attrs.length - 1; x1 >= 0; x1--) {
|
|
368
|
+
var f = this.buildFrame(frame);
|
|
369
|
+
f.addArc(elementURI(attrs[x1]));
|
|
370
|
+
if (elementURI(attrs[x1]) === RDFParser.ns.RDF + 'type') {
|
|
371
|
+
this.buildFrame(f).addNode(attrs[x1].nodeValue);
|
|
440
372
|
} else {
|
|
441
|
-
|
|
442
|
-
frame.addBNode(bnid2.nodeValue);
|
|
443
|
-
dom.removeAttributeNode(bnid2);
|
|
444
|
-
} else {
|
|
445
|
-
frame.addBNode();
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
for (var x1 = attrs.length - 1; x1 >= 0; x1--) {
|
|
450
|
-
var f = this.buildFrame(frame);
|
|
451
|
-
f.addArc(elementURI(attrs[x1]));
|
|
452
|
-
|
|
453
|
-
if (elementURI(attrs[x1]) === RDFParser.ns.RDF + 'type') {
|
|
454
|
-
this.buildFrame(f).addNode(attrs[x1].nodeValue);
|
|
455
|
-
} else {
|
|
456
|
-
this.buildFrame(f).addLiteral(attrs[x1].nodeValue);
|
|
457
|
-
}
|
|
373
|
+
this.buildFrame(f).addLiteral(attrs[x1].nodeValue);
|
|
458
374
|
}
|
|
459
|
-
} else if (dom.childNodes.length === 0) {
|
|
460
|
-
this.buildFrame(frame).addLiteral('');
|
|
461
375
|
}
|
|
376
|
+
} else if (dom.childNodes.length === 0) {
|
|
377
|
+
this.buildFrame(frame).addLiteral('');
|
|
462
378
|
}
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
while (
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
var candidate = dom.childNodes && dom.childNodes[frame.lastChild];
|
|
478
|
-
|
|
479
|
-
if (!candidate || !dig) {
|
|
480
|
-
frame.terminateFrame();
|
|
481
|
-
|
|
482
|
-
if (!(frame = frame.parent)) {
|
|
483
|
-
break;
|
|
484
|
-
} // done
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
dom = frame.element;
|
|
488
|
-
dig = true;
|
|
489
|
-
} else if (candidate.nodeType !== RDFParser.nodeType.ELEMENT && candidate.nodeType !== RDFParser.nodeType.TEXT && candidate.nodeType !== RDFParser.nodeType.CDATA_SECTION || (candidate.nodeType === RDFParser.nodeType.TEXT || candidate.nodeType === RDFParser.nodeType.CDATA_SECTION) && dom.childNodes.length !== 1) {
|
|
490
|
-
frame.lastChild++;
|
|
491
|
-
} else {
|
|
492
|
-
// not a leaf
|
|
493
|
-
frame.lastChild++;
|
|
494
|
-
frame = this.buildFrame(pframe, dom.childNodes[frame.lastChild - 1]);
|
|
379
|
+
}
|
|
380
|
+
} // rdf:RDF
|
|
381
|
+
// dig dug
|
|
382
|
+
dom = frame.element;
|
|
383
|
+
while (frame.parent) {
|
|
384
|
+
var pframe = frame;
|
|
385
|
+
while (dom == null) {
|
|
386
|
+
frame = frame.parent;
|
|
387
|
+
dom = frame.element;
|
|
388
|
+
}
|
|
389
|
+
var candidate = dom.childNodes && dom.childNodes[frame.lastChild];
|
|
390
|
+
if (!candidate || !dig) {
|
|
391
|
+
frame.terminateFrame();
|
|
392
|
+
if (!(frame = frame.parent)) {
|
|
495
393
|
break;
|
|
496
|
-
}
|
|
394
|
+
} // done
|
|
395
|
+
dom = frame.element;
|
|
396
|
+
dig = true;
|
|
397
|
+
} else if (candidate.nodeType !== RDFParser.nodeType.ELEMENT && candidate.nodeType !== RDFParser.nodeType.TEXT && candidate.nodeType !== RDFParser.nodeType.CDATA_SECTION || (candidate.nodeType === RDFParser.nodeType.TEXT || candidate.nodeType === RDFParser.nodeType.CDATA_SECTION) && dom.childNodes.length !== 1) {
|
|
398
|
+
frame.lastChild++;
|
|
399
|
+
} else {
|
|
400
|
+
// not a leaf
|
|
401
|
+
frame.lastChild++;
|
|
402
|
+
frame = this.buildFrame(pframe, dom.childNodes[frame.lastChild - 1]);
|
|
403
|
+
break;
|
|
497
404
|
}
|
|
498
|
-
} // while
|
|
499
|
-
|
|
500
|
-
}
|
|
501
|
-
/**
|
|
502
|
-
* Cleans out state from a previous parse run
|
|
503
|
-
* @private
|
|
504
|
-
*/
|
|
505
|
-
|
|
506
|
-
}, {
|
|
507
|
-
key: "cleanParser",
|
|
508
|
-
value: function cleanParser() {
|
|
509
|
-
this.bnodes = {};
|
|
510
|
-
this.why = null;
|
|
511
|
-
}
|
|
512
|
-
/**
|
|
513
|
-
* Builds scope frame
|
|
514
|
-
* @private
|
|
515
|
-
*/
|
|
516
|
-
|
|
517
|
-
}, {
|
|
518
|
-
key: "buildFrame",
|
|
519
|
-
value: function buildFrame(parent, element) {
|
|
520
|
-
var frame = this.frameFactory(this, parent, element);
|
|
521
|
-
|
|
522
|
-
if (parent) {
|
|
523
|
-
frame.base = parent.base;
|
|
524
|
-
frame.lang = parent.lang;
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
if (!element || element.nodeType === RDFParser.nodeType.TEXT || element.nodeType === RDFParser.nodeType.CDATA_SECTION) {
|
|
528
|
-
return frame;
|
|
529
405
|
}
|
|
406
|
+
} // while
|
|
407
|
+
}
|
|
530
408
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
var lang = element.getAttributeNode('xml:lang');
|
|
540
|
-
|
|
541
|
-
if (lang != null) {
|
|
542
|
-
frame.lang = lang.nodeValue;
|
|
543
|
-
element.removeAttribute('xml:lang');
|
|
544
|
-
} // remove all extraneous xml and xmlns attributes
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
for (var x = attrs.length - 1; x >= 0; x--) {
|
|
548
|
-
if (attrs[x].nodeName.substr(0, 3) === 'xml') {
|
|
549
|
-
if (attrs[x].name.slice(0, 6) === 'xmlns:') {
|
|
550
|
-
var uri = attrs[x].nodeValue; // alert('base for namespac attr:'+this.base)
|
|
551
|
-
|
|
552
|
-
if (this.base) uri = uriUtil.join(uri, this.base);
|
|
553
|
-
this.store.setPrefixForURI(attrs[x].name.slice(6), uri);
|
|
554
|
-
} // alert('rdfparser: xml atribute: '+attrs[x].name) //@@
|
|
555
|
-
|
|
409
|
+
/**
|
|
410
|
+
* Cleans out state from a previous parse run
|
|
411
|
+
* @private
|
|
412
|
+
*/
|
|
413
|
+
cleanParser() {
|
|
414
|
+
this.bnodes = {};
|
|
415
|
+
this.why = null;
|
|
416
|
+
}
|
|
556
417
|
|
|
557
|
-
|
|
418
|
+
/**
|
|
419
|
+
* Builds scope frame
|
|
420
|
+
* @private
|
|
421
|
+
*/
|
|
422
|
+
buildFrame(parent, element) {
|
|
423
|
+
var frame = this.frameFactory(this, parent, element);
|
|
424
|
+
if (parent) {
|
|
425
|
+
frame.base = parent.base;
|
|
426
|
+
frame.lang = parent.lang;
|
|
427
|
+
}
|
|
428
|
+
if (!element || element.nodeType === RDFParser.nodeType.TEXT || element.nodeType === RDFParser.nodeType.CDATA_SECTION) {
|
|
429
|
+
return frame;
|
|
430
|
+
}
|
|
431
|
+
var attrs = element.attributes;
|
|
432
|
+
var base = element.getAttributeNode('xml:base');
|
|
433
|
+
if (base != null) {
|
|
434
|
+
frame.base = base.nodeValue;
|
|
435
|
+
element.removeAttribute('xml:base');
|
|
436
|
+
}
|
|
437
|
+
var lang = element.getAttributeNode('xml:lang');
|
|
438
|
+
if (lang != null) {
|
|
439
|
+
frame.lang = lang.nodeValue;
|
|
440
|
+
element.removeAttribute('xml:lang');
|
|
441
|
+
}
|
|
442
|
+
// remove all extraneous xml and xmlns attributes
|
|
443
|
+
for (var x = attrs.length - 1; x >= 0; x--) {
|
|
444
|
+
if (attrs[x].nodeName.substr(0, 3) === 'xml') {
|
|
445
|
+
if (attrs[x].name.slice(0, 6) === 'xmlns:') {
|
|
446
|
+
var uri = attrs[x].nodeValue; // alert('base for namespac attr:'+this.base)
|
|
447
|
+
if (this.base) uri = uriUtil.join(uri, this.base);
|
|
448
|
+
this.store.setPrefixForURI(attrs[x].name.slice(6), uri);
|
|
558
449
|
}
|
|
450
|
+
// alert('rdfparser: xml atribute: '+attrs[x].name) //@@
|
|
451
|
+
element.removeAttributeNode(attrs[x]);
|
|
559
452
|
}
|
|
560
|
-
|
|
561
|
-
return frame;
|
|
562
453
|
}
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
}();
|
|
567
|
-
|
|
454
|
+
return frame;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
568
457
|
_defineProperty(RDFParser, "ns", {
|
|
569
458
|
'RDF': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
|
|
570
459
|
'RDFS': 'http://www.w3.org/2000/01/rdf-schema#'
|
|
571
460
|
});
|
|
572
|
-
|
|
573
461
|
_defineProperty(RDFParser, "nodeType", {
|
|
574
462
|
'ELEMENT': 1,
|
|
575
463
|
'ATTRIBUTE': 2,
|
|
@@ -583,6 +471,4 @@ _defineProperty(RDFParser, "nodeType", {
|
|
|
583
471
|
'DOCUMENT_TYPE': 10,
|
|
584
472
|
'DOCUMENT_FRAGMENT': 11,
|
|
585
473
|
'NOTATION': 12
|
|
586
|
-
});
|
|
587
|
-
|
|
588
|
-
export { RDFParser as default };
|
|
474
|
+
});
|