rdflib 2.2.10 → 2.2.12-5f141ca2

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.
Files changed (190) hide show
  1. package/.babelrc +0 -0
  2. package/README.md +1 -0
  3. package/changes.txt +0 -0
  4. package/dist/rdflib.min.js +62 -0
  5. package/dist/rdflib.min.js.map +1 -0
  6. package/esm/blank-node.js +137 -0
  7. package/esm/class-order.js +12 -0
  8. package/esm/collection.js +173 -0
  9. package/esm/convert.js +61 -0
  10. package/esm/default-graph.js +57 -0
  11. package/esm/empty.js +46 -0
  12. package/esm/factories/canonical-data-factory.js +204 -0
  13. package/esm/factories/extended-term-factory.js +55 -0
  14. package/esm/factories/factory-types.js +18 -0
  15. package/esm/factories/rdflib-data-factory.js +55 -0
  16. package/esm/fetcher.js +2180 -0
  17. package/esm/formula.js +987 -0
  18. package/esm/index.js +64 -0
  19. package/esm/jsonldparser.js +122 -0
  20. package/esm/jsonparser.js +60 -0
  21. package/esm/literal.js +236 -0
  22. package/esm/log.js +13 -0
  23. package/esm/n3parser.js +1854 -0
  24. package/esm/named-node.js +154 -0
  25. package/esm/namespace.js +17 -0
  26. package/esm/node-internal.js +151 -0
  27. package/esm/node.js +46 -0
  28. package/esm/parse.js +138 -0
  29. package/esm/patch-parser.js +110 -0
  30. package/esm/query-to-sparql.js +83 -0
  31. package/esm/query.js +620 -0
  32. package/esm/rdfaparser.js +1197 -0
  33. package/esm/rdfxmlparser.js +588 -0
  34. package/esm/serialize.js +95 -0
  35. package/esm/serializer.js +1162 -0
  36. package/esm/sparql-to-query.js +566 -0
  37. package/esm/statement.js +128 -0
  38. package/esm/store.js +1306 -0
  39. package/esm/tf-types.js +1 -0
  40. package/esm/types.js +25 -0
  41. package/esm/update-manager.js +1252 -0
  42. package/esm/updates-via.js +197 -0
  43. package/esm/uri.js +245 -0
  44. package/esm/utils/default-graph-uri.js +4 -0
  45. package/esm/utils/termValue.js +8 -0
  46. package/esm/utils/terms.js +72 -0
  47. package/esm/utils-js.js +348 -0
  48. package/esm/utils.js +103 -0
  49. package/esm/variable.js +101 -0
  50. package/esm/xsd-internal.js +10 -0
  51. package/esm/xsd.js +15 -0
  52. package/lib/blank-node.d.ts +44 -0
  53. package/lib/blank-node.js +0 -0
  54. package/lib/class-order.d.ts +7 -0
  55. package/lib/class-order.js +0 -0
  56. package/lib/collection.d.ts +65 -0
  57. package/lib/collection.js +0 -0
  58. package/lib/convert.d.ts +2 -0
  59. package/lib/convert.js +0 -0
  60. package/lib/default-graph.d.ts +13 -0
  61. package/lib/default-graph.js +0 -0
  62. package/lib/empty.d.ts +11 -0
  63. package/lib/empty.js +0 -0
  64. package/lib/factories/canonical-data-factory.d.ts +6 -0
  65. package/lib/factories/canonical-data-factory.js +0 -0
  66. package/lib/factories/extended-term-factory.d.ts +13 -0
  67. package/lib/factories/extended-term-factory.js +0 -0
  68. package/lib/factories/factory-types.d.ts +67 -0
  69. package/lib/factories/factory-types.js +0 -0
  70. package/lib/factories/rdflib-data-factory.d.ts +4 -0
  71. package/lib/factories/rdflib-data-factory.js +0 -0
  72. package/lib/fetcher.d.ts +443 -0
  73. package/lib/fetcher.js +3 -2
  74. package/lib/formula.d.ts +327 -0
  75. package/lib/formula.js +0 -0
  76. package/lib/index.d.ts +40 -0
  77. package/lib/index.js +0 -0
  78. package/lib/jsonldparser.d.ts +13 -0
  79. package/lib/jsonldparser.js +0 -0
  80. package/lib/jsonparser.d.ts +4 -0
  81. package/lib/jsonparser.js +0 -0
  82. package/lib/literal.d.ts +67 -0
  83. package/lib/literal.js +0 -0
  84. package/lib/log.d.ts +15 -0
  85. package/lib/log.js +0 -0
  86. package/lib/n3parser.d.ts +62 -0
  87. package/lib/n3parser.js +1334 -1289
  88. package/lib/named-node.d.ts +44 -0
  89. package/lib/named-node.js +0 -0
  90. package/lib/namespace.d.ts +7 -0
  91. package/lib/namespace.js +0 -0
  92. package/lib/node-internal.d.ts +63 -0
  93. package/lib/node-internal.js +0 -0
  94. package/lib/node.d.ts +2 -0
  95. package/lib/node.js +0 -0
  96. package/lib/parse.d.ts +16 -0
  97. package/lib/parse.js +0 -0
  98. package/lib/patch-parser.d.ts +3 -0
  99. package/lib/patch-parser.js +0 -0
  100. package/lib/query-to-sparql.d.ts +1 -0
  101. package/lib/query-to-sparql.js +0 -0
  102. package/lib/query.d.ts +27 -0
  103. package/lib/query.js +0 -0
  104. package/lib/rdfaparser.d.ts +78 -0
  105. package/lib/rdfaparser.js +0 -0
  106. package/lib/rdfxmlparser.d.ts +60 -0
  107. package/lib/rdfxmlparser.js +430 -413
  108. package/lib/serialize.d.ts +23 -0
  109. package/lib/serialize.js +1 -1
  110. package/lib/serializer.d.ts +54 -0
  111. package/lib/serializer.js +851 -824
  112. package/lib/sparql-to-query.d.ts +6 -0
  113. package/lib/sparql-to-query.js +0 -0
  114. package/lib/statement.d.ts +55 -0
  115. package/lib/statement.js +0 -0
  116. package/lib/store.d.ts +302 -0
  117. package/lib/store.js +0 -0
  118. package/lib/tf-types.d.ts +151 -0
  119. package/lib/tf-types.js +0 -0
  120. package/lib/types.d.ts +68 -0
  121. package/lib/types.js +0 -0
  122. package/lib/update-manager.d.ts +198 -0
  123. package/lib/update-manager.js +0 -0
  124. package/lib/updates-via.d.ts +26 -0
  125. package/lib/updates-via.js +0 -0
  126. package/lib/uri.d.ts +33 -0
  127. package/lib/uri.js +0 -0
  128. package/lib/utils/default-graph-uri.d.ts +3 -0
  129. package/lib/utils/default-graph-uri.js +0 -0
  130. package/lib/utils/termValue.d.ts +3 -0
  131. package/lib/utils/termValue.js +0 -0
  132. package/lib/utils/terms.d.ts +33 -0
  133. package/lib/utils/terms.js +0 -0
  134. package/lib/utils-js.d.ts +50 -0
  135. package/lib/utils-js.js +0 -0
  136. package/lib/utils.d.ts +20 -0
  137. package/lib/utils.js +0 -0
  138. package/lib/variable.d.ts +29 -0
  139. package/lib/variable.js +0 -0
  140. package/lib/xsd-internal.d.ts +11 -0
  141. package/lib/xsd-internal.js +0 -0
  142. package/lib/xsd.d.ts +19 -0
  143. package/lib/xsd.js +8 -14
  144. package/package.json +3 -3
  145. package/src/blank-node.ts +0 -0
  146. package/src/class-order.ts +0 -0
  147. package/src/collection.ts +0 -0
  148. package/src/convert.js +0 -0
  149. package/src/default-graph.ts +0 -0
  150. package/src/empty.ts +0 -0
  151. package/src/factories/canonical-data-factory.ts +0 -0
  152. package/src/factories/extended-term-factory.ts +0 -0
  153. package/src/factories/factory-types.ts +0 -0
  154. package/src/factories/rdflib-data-factory.ts +0 -0
  155. package/src/fetcher.ts +6 -3
  156. package/src/formula.ts +0 -0
  157. package/src/index.ts +0 -0
  158. package/src/jsonldparser.js +0 -0
  159. package/src/jsonparser.js +0 -0
  160. package/src/literal.ts +0 -0
  161. package/src/log.js +0 -0
  162. package/src/n3parser.js +1114 -1110
  163. package/src/named-node.ts +0 -0
  164. package/src/namespace.ts +0 -0
  165. package/src/node-internal.ts +0 -0
  166. package/src/node.ts +0 -0
  167. package/src/parse.ts +0 -0
  168. package/src/patch-parser.js +0 -0
  169. package/src/query-to-sparql.js +0 -0
  170. package/src/query.js +0 -0
  171. package/src/rdfaparser.js +0 -0
  172. package/src/rdfxmlparser.js +22 -21
  173. package/src/serialize.ts +3 -3
  174. package/src/serializer.js +74 -62
  175. package/src/sparql-to-query.js +0 -0
  176. package/src/statement.ts +0 -0
  177. package/src/store.ts +0 -0
  178. package/src/tf-types.ts +0 -0
  179. package/src/types.ts +0 -0
  180. package/src/update-manager.ts +0 -0
  181. package/src/updates-via.js +0 -0
  182. package/src/uri.ts +0 -0
  183. package/src/utils/default-graph-uri.ts +0 -0
  184. package/src/utils/termValue.ts +0 -0
  185. package/src/utils/terms.ts +0 -0
  186. package/src/utils-js.js +0 -0
  187. package/src/utils.ts +0 -0
  188. package/src/variable.ts +0 -0
  189. package/src/xsd-internal.js +0 -0
  190. package/src/xsd.js +16 -14
package/lib/serializer.js CHANGED
@@ -7,7 +7,14 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.default = void 0;
10
+ exports.Serializer = void 0;
11
+ exports.default = createSerializer;
12
+
13
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
14
+
15
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
16
+
17
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
18
 
12
19
  var _namedNode = _interopRequireDefault(require("./named-node"));
13
20
 
@@ -34,8 +41,20 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
34
41
  ** This is or was https://github.com/linkeddata/rdflib.js/blob/main/src/serializer.js
35
42
  ** Licence: MIT
36
43
  */
37
- var _default = function () {
38
- var __Serializer = function __Serializer(store) {
44
+ function createSerializer(store) {
45
+ return new Serializer(store);
46
+ }
47
+
48
+ ;
49
+
50
+ var Serializer = /*#__PURE__*/function () {
51
+ function Serializer(store) {
52
+ (0, _classCallCheck2.default)(this, Serializer);
53
+ (0, _defineProperty2.default)(this, "_notQNameChars", '\t\r\n !"#$%&\'()*.,+/;<=>?@[\\]^`{|}~');
54
+ (0, _defineProperty2.default)(this, "_notNameChars", this._notQNameChars + ':');
55
+ (0, _defineProperty2.default)(this, "validPrefix", new RegExp(/^[a-zA-Z][a-zA-Z0-9]*$/));
56
+ (0, _defineProperty2.default)(this, "forbidden1", new RegExp(/[\\"\b\f\r\v\t\n\u0080-\uffff]/gm));
57
+ (0, _defineProperty2.default)(this, "forbidden3", new RegExp(/[\\"\b\f\r\v\u0080-\uffff]/gm));
39
58
  this.flags = '';
40
59
  this.base = null;
41
60
  this.prefixes = []; // suggested prefixes
@@ -67,1092 +86,1100 @@ var _default = function () {
67
86
  this.store = store;
68
87
  this.rdfFactory = store.rdfFactory || _canonicalDataFactory.default;
69
88
  this.xsd = (0, _xsd.createXSD)(this.rdfFactory);
70
- };
71
-
72
- __Serializer.prototype.setBase = function (base) {
73
- this.base = base;
74
- return this;
75
- };
76
-
77
- __Serializer.prototype.setFlags = function (flags) {
78
- this.flags = flags || '';
79
- return this;
80
- };
81
-
82
- __Serializer.prototype.toStr = function (x) {
83
- var s = x.toNT();
89
+ }
84
90
 
85
- if (x.termType === 'Graph') {
86
- this.formulas[s] = x; // remember as reverse does not work
91
+ (0, _createClass2.default)(Serializer, [{
92
+ key: "setBase",
93
+ value: function setBase(base) {
94
+ this.base = base;
95
+ return this;
96
+ }
97
+ }, {
98
+ key: "setFlags",
99
+ value: function setFlags(flags) {
100
+ this.flags = flags || '';
101
+ return this;
87
102
  }
103
+ }, {
104
+ key: "toStr",
105
+ value: function toStr(x) {
106
+ var s = x.toNT();
88
107
 
89
- return s;
90
- };
108
+ if (x.termType === 'Graph') {
109
+ this.formulas[s] = x; // remember as reverse does not work
110
+ }
91
111
 
92
- __Serializer.prototype.fromStr = function (s) {
93
- if (s[0] === '{') {
94
- var x = this.formulas[s];
95
- if (!x) console.log('No formula object for ' + s);
96
- return x;
112
+ return s;
97
113
  }
114
+ }, {
115
+ key: "fromStr",
116
+ value: function fromStr(s) {
117
+ if (s[0] === '{') {
118
+ var x = this.formulas[s];
119
+ if (!x) console.log('No formula object for ' + s);
120
+ return x;
121
+ }
98
122
 
99
- return this.store.fromNT(s);
100
- };
101
- /* Accumulate Namespaces
102
- **
103
- ** These are only hints. If two overlap, only one gets used
104
- ** There is therefore no guarantee in general.
105
- */
106
-
123
+ return this.store.fromNT(s);
124
+ }
125
+ /* Accumulate Namespaces
126
+ **
127
+ ** These are only hints. If two overlap, only one gets used
128
+ ** There is therefore no guarantee in general.
129
+ */
107
130
 
108
- __Serializer.prototype.suggestPrefix = function (prefix, uri) {
109
- if (prefix.slice(0, 7) === 'default') return; // Try to weed these out
131
+ }, {
132
+ key: "suggestPrefix",
133
+ value: function suggestPrefix(prefix, uri) {
134
+ if (prefix.slice(0, 7) === 'default') return; // Try to weed these out
110
135
 
111
- if (prefix.slice(0, 2) === 'ns') return; // From others inferior algos
136
+ if (prefix.slice(0, 2) === 'ns') return; // From others inferior algos
112
137
 
113
- if (!prefix || !uri) return; // empty strings not suitable
138
+ if (!prefix || !uri) return; // empty strings not suitable
114
139
 
115
- if (prefix in this.namespaces || uri in this.prefixes) return; // already used
140
+ if (prefix in this.namespaces || uri in this.prefixes) return; // already used
116
141
 
117
- this.prefixes[uri] = prefix;
118
- this.namespaces[prefix] = uri;
119
- }; // Takes a namespace -> prefix map
142
+ this.prefixes[uri] = prefix;
143
+ this.namespaces[prefix] = uri;
144
+ } // Takes a namespace -> prefix map
120
145
 
146
+ }, {
147
+ key: "suggestNamespaces",
148
+ value: function suggestNamespaces(namespaces) {
149
+ for (var px in namespaces) {
150
+ this.suggestPrefix(px, namespaces[px]);
151
+ }
121
152
 
122
- __Serializer.prototype.suggestNamespaces = function (namespaces) {
123
- for (var px in namespaces) {
124
- this.suggestPrefix(px, namespaces[px]);
153
+ return this;
125
154
  }
126
-
127
- return this;
128
- };
129
-
130
- __Serializer.prototype.checkIntegrity = function () {
131
- var p, ns;
132
-
133
- for (p in this.namespaces) {
134
- if (this.prefixes[this.namespaces[p]] !== p) {
135
- throw new Error('Serializer integity error 1: ' + p + ', ' + this.namespaces[p] + ', ' + this.prefixes[this.namespaces[p]] + '!');
155
+ }, {
156
+ key: "checkIntegrity",
157
+ value: function checkIntegrity() {
158
+ var p, ns;
159
+
160
+ for (p in this.namespaces) {
161
+ if (this.prefixes[this.namespaces[p]] !== p) {
162
+ throw new Error('Serializer integity error 1: ' + p + ', ' + this.namespaces[p] + ', ' + this.prefixes[this.namespaces[p]] + '!');
163
+ }
136
164
  }
137
- }
138
165
 
139
- for (ns in this.prefixes) {
140
- if (this.namespaces[this.prefixes[ns]] !== ns) {
141
- throw new Error('Serializer integity error 2: ' + ns + ', ' + this.prefixs[ns] + ', ' + this.namespaces[this.prefixes[ns]] + '!');
166
+ for (ns in this.prefixes) {
167
+ if (this.namespaces[this.prefixes[ns]] !== ns) {
168
+ throw new Error('Serializer integity error 2: ' + ns + ', ' + this.prefixs[ns] + ', ' + this.namespaces[this.prefixes[ns]] + '!');
169
+ }
142
170
  }
143
- }
144
- }; // Make up an unused prefix for a random namespace
171
+ } // Make up an unused prefix for a random namespace
145
172
 
173
+ }, {
174
+ key: "makeUpPrefix",
175
+ value: function makeUpPrefix(uri) {
176
+ var p = uri;
146
177
 
147
- __Serializer.prototype.makeUpPrefix = function (uri) {
148
- var p = uri;
178
+ function canUseMethod(pp) {
179
+ if (!this.validPrefix.test(pp)) return false; // bad format
149
180
 
150
- function canUseMethod(pp) {
151
- if (!__Serializer.prototype.validPrefix.test(pp)) return false; // bad format
181
+ if (pp === 'ns') return false; // boring
152
182
 
153
- if (pp === 'ns') return false; // boring
183
+ if (pp in this.namespaces) return false; // already used
154
184
 
155
- if (pp in this.namespaces) return false; // already used
156
-
157
- this.prefixes[uri] = pp;
158
- this.namespaces[pp] = uri;
159
- return pp;
160
- }
185
+ this.prefixes[uri] = pp;
186
+ this.namespaces[pp] = uri;
187
+ return pp;
188
+ }
161
189
 
162
- var canUse = canUseMethod.bind(this);
163
- if ('#/'.indexOf(p[p.length - 1]) >= 0) p = p.slice(0, -1);
164
- var slash = p.lastIndexOf('/');
165
- if (slash >= 0) p = p.slice(slash + 1);
166
- var i = 0;
190
+ var canUse = canUseMethod.bind(this);
191
+ if ('#/'.indexOf(p[p.length - 1]) >= 0) p = p.slice(0, -1);
192
+ var slash = p.lastIndexOf('/');
193
+ if (slash >= 0) p = p.slice(slash + 1);
194
+ var i = 0;
167
195
 
168
- while (i < p.length) {
169
- if (this.prefixchars.indexOf(p[i])) {
170
- i++;
171
- } else {
172
- break;
196
+ while (i < p.length) {
197
+ if (this.prefixchars.indexOf(p[i])) {
198
+ i++;
199
+ } else {
200
+ break;
201
+ }
173
202
  }
174
- }
175
203
 
176
- p = p.slice(0, i);
177
- if (p.length < 6 && canUse(p)) return p; // exact is best
204
+ p = p.slice(0, i);
205
+ if (p.length < 6 && canUse(p)) return p; // exact is best
178
206
 
179
- if (canUse(p.slice(0, 3))) return p.slice(0, 3);
180
- if (canUse(p.slice(0, 2))) return p.slice(0, 2);
181
- if (canUse(p.slice(0, 4))) return p.slice(0, 4);
182
- if (canUse(p.slice(0, 1))) return p.slice(0, 1);
183
- if (canUse(p.slice(0, 5))) return p.slice(0, 5);
207
+ if (canUse(p.slice(0, 3))) return p.slice(0, 3);
208
+ if (canUse(p.slice(0, 2))) return p.slice(0, 2);
209
+ if (canUse(p.slice(0, 4))) return p.slice(0, 4);
210
+ if (canUse(p.slice(0, 1))) return p.slice(0, 1);
211
+ if (canUse(p.slice(0, 5))) return p.slice(0, 5);
184
212
 
185
- if (!__Serializer.prototype.validPrefix.test(p)) {
186
- p = 'n'; // Otherwise the loop below may never termimnate
187
- }
213
+ if (!this.validPrefix.test(p)) {
214
+ p = 'n'; // Otherwise the loop below may never termimnate
215
+ }
188
216
 
189
- for (var j = 0;; j++) {
190
- if (canUse(p.slice(0, 3) + j)) return p.slice(0, 3) + j;
217
+ for (var j = 0;; j++) {
218
+ if (canUse(p.slice(0, 3) + j)) return p.slice(0, 3) + j;
219
+ }
191
220
  }
192
- };
193
-
194
- __Serializer.prototype.rootSubjects = function (sts) {
195
- var incoming = {};
196
- var subjects = {};
197
- var allBnodes = {};
198
- /* This scan is to find out which nodes will have to be the roots of trees
199
- ** in the serialized form. This will be any symbols, and any bnodes
200
- ** which hve more or less than one incoming arc, and any bnodes which have
201
- ** one incoming arc but it is an uninterrupted loop of such nodes back to itself.
202
- ** This should be kept linear time with repect to the number of statements.
203
- ** Note it does not use any indexing of the store.
204
- */
205
-
206
- for (var i = 0; i < sts.length; i++) {
207
- var st = sts[i];
221
+ }, {
222
+ key: "rootSubjects",
223
+ value: function rootSubjects(sts) {
224
+ var incoming = {};
225
+ var subjects = {};
226
+ var allBnodes = {};
227
+ /* This scan is to find out which nodes will have to be the roots of trees
228
+ ** in the serialized form. This will be any symbols, and any bnodes
229
+ ** which hve more or less than one incoming arc, and any bnodes which have
230
+ ** one incoming arc but it is an uninterrupted loop of such nodes back to itself.
231
+ ** This should be kept linear time with repect to the number of statements.
232
+ ** Note it does not use any indexing of the store.
233
+ */
208
234
 
209
- var checkMentions = function checkMentions(x) {
210
- if (!incoming.hasOwnProperty(x)) incoming[x] = [];
211
- incoming[x].push(st.subject); // List of things which will cause this to be printed
212
- };
235
+ for (var i = 0; i < sts.length; i++) {
236
+ var st = sts[i];
213
237
 
214
- var st2 = [st.subject, st.predicate, st.object];
215
- st2.map(function (y) {
216
- if (y.termType === 'BlankNode') {
217
- allBnodes[y.toNT()] = true;
218
- } else if (y.termType === 'Collection') {
219
- y.elements.forEach(function (z) {
220
- checkMentions(z); // bnodes in collections important
221
- });
222
- }
223
- });
224
- checkMentions(sts[i].object);
225
- var ss = subjects[this.toStr(st.subject)]; // Statements with this as subject
238
+ var checkMentions = function checkMentions(x) {
239
+ if (!incoming.hasOwnProperty(x)) incoming[x] = [];
240
+ incoming[x].push(st.subject); // List of things which will cause this to be printed
241
+ };
242
+
243
+ var st2 = [st.subject, st.predicate, st.object];
244
+ st2.map(function (y) {
245
+ if (y.termType === 'BlankNode') {
246
+ allBnodes[y.toNT()] = true;
247
+ } else if (y.termType === 'Collection') {
248
+ y.elements.forEach(function (z) {
249
+ checkMentions(z); // bnodes in collections important
250
+ });
251
+ }
252
+ });
253
+ checkMentions(sts[i].object);
254
+ var ss = subjects[this.toStr(st.subject)]; // Statements with this as subject
226
255
 
227
- if (!ss) ss = [];
228
- ss.push(st);
229
- subjects[this.toStr(st.subject)] = ss; // Make hash. @@ too slow for formula?
230
- }
256
+ if (!ss) ss = [];
257
+ ss.push(st);
258
+ subjects[this.toStr(st.subject)] = ss; // Make hash. @@ too slow for formula?
259
+ }
231
260
 
232
- var roots = [];
261
+ var roots = [];
233
262
 
234
- for (var xNT in subjects) {
235
- if (!subjects.hasOwnProperty(xNT)) continue;
236
- var y = this.fromStr(xNT);
263
+ for (var xNT in subjects) {
264
+ if (!subjects.hasOwnProperty(xNT)) continue;
265
+ var y = this.fromStr(xNT);
237
266
 
238
- if (y.termType !== 'BlankNode' || !incoming[y] || incoming[y].length !== 1) {
239
- roots.push(y);
240
- continue;
267
+ if (y.termType !== 'BlankNode' || !incoming[y] || incoming[y].length !== 1) {
268
+ roots.push(y);
269
+ continue;
270
+ }
241
271
  }
242
- }
243
272
 
244
- this.incoming = incoming; // Keep for serializing @@ Bug for nested formulas
245
- // Now do the scan using existing roots
273
+ this.incoming = incoming; // Keep for serializing @@ Bug for nested formulas
274
+ // Now do the scan using existing roots
246
275
 
247
- var rootsHash = {};
248
-
249
- for (var k = 0; k < roots.length; k++) {
250
- rootsHash[roots[k].toNT()] = true;
251
- }
252
-
253
- return {
254
- 'roots': roots,
255
- 'subjects': subjects,
256
- 'rootsHash': rootsHash,
257
- 'incoming': incoming
258
- };
259
- }; // //////////////////////////////////////////////////////
276
+ var rootsHash = {};
260
277
 
278
+ for (var k = 0; k < roots.length; k++) {
279
+ rootsHash[roots[k].toNT()] = true;
280
+ }
261
281
 
262
- __Serializer.prototype.toN3 = function (f) {
263
- return this.statementsToN3(f.statements);
264
- };
282
+ return {
283
+ 'roots': roots,
284
+ 'subjects': subjects,
285
+ 'rootsHash': rootsHash,
286
+ 'incoming': incoming
287
+ };
288
+ } // //////////////////////////////////////////////////////
265
289
 
266
- __Serializer.prototype._notQNameChars = '\t\r\n !"#$%&\'()*.,+/;<=>?@[\\]^`{|}~';
267
- __Serializer.prototype._notNameChars = __Serializer.prototype._notQNameChars + ':';
290
+ }, {
291
+ key: "toN3",
292
+ value: function toN3(f) {
293
+ return this.statementsToN3(f.statements);
294
+ }
295
+ }, {
296
+ key: "explicitURI",
297
+ value: function explicitURI(uri) {
298
+ if (this.flags.indexOf('r') < 0 && this.base) {
299
+ uri = Uri.refTo(this.base, uri);
300
+ } else if (this.flags.indexOf('u') >= 0) {
301
+ // Unicode encoding NTriples style
302
+ uri = backslashUify(uri);
303
+ } else {
304
+ uri = hexify(uri);
305
+ }
268
306
 
269
- __Serializer.prototype.explicitURI = function (uri) {
270
- if (this.flags.indexOf('r') < 0 && this.base) {
271
- uri = Uri.refTo(this.base, uri);
272
- } else if (this.flags.indexOf('u') >= 0) {
273
- // Unicode encoding NTriples style
274
- uri = backslashUify(uri);
275
- } else {
276
- uri = hexify(uri);
307
+ return '<' + uri + '>';
277
308
  }
309
+ }, {
310
+ key: "statementsToNTriples",
311
+ value: function statementsToNTriples(sts) {
312
+ var sorted = sts.slice();
313
+ sorted.sort();
314
+ var str = '';
315
+ var rdfns = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
316
+ var self = this;
317
+ var kb = this.store;
318
+ var factory = this.rdfFactory;
319
+
320
+ var termToNT = function termToNT(x) {
321
+ if (x.termType !== 'Collection') {
322
+ return self.atomicTermToN3(x);
323
+ }
278
324
 
279
- return '<' + uri + '>';
280
- };
281
-
282
- __Serializer.prototype.statementsToNTriples = function (sts) {
283
- var sorted = sts.slice();
284
- sorted.sort();
285
- var str = '';
286
- var rdfns = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
287
- var self = this;
288
- var kb = this.store;
289
- var factory = this.rdfFactory;
290
-
291
- var termToNT = function termToNT(x) {
292
- if (x.termType !== 'Collection') {
293
- return self.atomicTermToN3(x);
294
- }
325
+ var list = x.elements;
326
+ var rest = kb.sym(rdfns + 'nill');
295
327
 
296
- var list = x.elements;
297
- var rest = kb.sym(rdfns + 'nill');
328
+ for (var i = list.length - 1; i >= 0; i--) {
329
+ var bnode = factory.blankNode();
330
+ str += termToNT(bnode) + ' ' + termToNT(kb.sym(rdfns + 'first')) + ' ' + termToNT(list[i]) + '.\n';
331
+ str += termToNT(bnode) + ' ' + termToNT(kb.sym(rdfns + 'rest')) + ' ' + termToNT(rest) + '.\n';
332
+ rest = bnode;
333
+ }
298
334
 
299
- for (var i = list.length - 1; i >= 0; i--) {
300
- var bnode = factory.blankNode();
301
- str += termToNT(bnode) + ' ' + termToNT(kb.sym(rdfns + 'first')) + ' ' + termToNT(list[i]) + '.\n';
302
- str += termToNT(bnode) + ' ' + termToNT(kb.sym(rdfns + 'rest')) + ' ' + termToNT(rest) + '.\n';
303
- rest = bnode;
304
- }
335
+ return self.atomicTermToN3(rest);
336
+ };
305
337
 
306
- return self.atomicTermToN3(rest);
307
- };
338
+ for (var i = 0; i < sorted.length; i++) {
339
+ var st = sorted[i];
340
+ var s = '';
341
+ s += termToNT(st.subject) + ' ';
342
+ s += termToNT(st.predicate) + ' ';
343
+ s += termToNT(st.object) + ' ';
308
344
 
309
- for (var i = 0; i < sorted.length; i++) {
310
- var st = sorted[i];
311
- var s = '';
312
- s += termToNT(st.subject) + ' ';
313
- s += termToNT(st.predicate) + ' ';
314
- s += termToNT(st.object) + ' ';
345
+ if (this.flags.indexOf('q') >= 0) {
346
+ // Do quads not nrtiples
347
+ s += termToNT(st.why) + ' ';
348
+ }
315
349
 
316
- if (this.flags.indexOf('q') >= 0) {
317
- // Do quads not nrtiples
318
- s += termToNT(st.why) + ' ';
350
+ s += '.\n';
351
+ str += s;
319
352
  }
320
353
 
321
- s += '.\n';
322
- str += s;
354
+ return str;
323
355
  }
356
+ }, {
357
+ key: "statementsToN3",
358
+ value: function statementsToN3(sts) {
359
+ var indent = 4;
360
+ var width = 80;
361
+ var kb = this.store; // A URI Map alows us to put the type statemnts at the top.
362
+
363
+ var uriMap = {
364
+ 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type': 'aaa:00'
365
+ };
324
366
 
325
- return str;
326
- };
327
-
328
- __Serializer.prototype.statementsToN3 = function (sts) {
329
- var indent = 4;
330
- var width = 80;
331
- var kb = this.store; // A URI Map alows us to put the type statemnts at the top.
332
-
333
- var uriMap = {
334
- 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type': 'aaa:00'
335
- };
336
-
337
- var SPO = function SPO(x, y) {
338
- // Do limited canonicalization of bnodes
339
- return Util.heavyCompareSPO(x, y, kb, uriMap);
340
- };
367
+ var SPO = function SPO(x, y) {
368
+ // Do limited canonicalization of bnodes
369
+ return Util.heavyCompareSPO(x, y, kb, uriMap);
370
+ };
341
371
 
342
- sts.sort(SPO);
372
+ sts.sort(SPO);
343
373
 
344
- if (this.base && !this.defaultNamespace) {
345
- this.defaultNamespace = this.base + '#';
346
- }
374
+ if (this.base && !this.defaultNamespace) {
375
+ this.defaultNamespace = this.base + '#';
376
+ }
347
377
 
348
- var predMap = {};
378
+ var predMap = {};
349
379
 
350
- if (this.flags.indexOf('s') < 0) {
351
- predMap['http://www.w3.org/2002/07/owl#sameAs'] = '=';
352
- }
380
+ if (this.flags.indexOf('s') < 0) {
381
+ predMap['http://www.w3.org/2002/07/owl#sameAs'] = '=';
382
+ }
353
383
 
354
- if (this.flags.indexOf('t') < 0) {
355
- predMap['http://www.w3.org/1999/02/22-rdf-syntax-ns#type'] = 'a';
356
- }
384
+ if (this.flags.indexOf('t') < 0) {
385
+ predMap['http://www.w3.org/1999/02/22-rdf-syntax-ns#type'] = 'a';
386
+ }
357
387
 
358
- if (this.flags.indexOf('i') < 0) {
359
- predMap['http://www.w3.org/2000/10/swap/log#implies'] = '=>';
360
- } // //////////////////////// Arrange the bits of text
388
+ if (this.flags.indexOf('i') < 0) {
389
+ predMap['http://www.w3.org/2000/10/swap/log#implies'] = '=>';
390
+ } // //////////////////////// Arrange the bits of text
361
391
 
362
392
 
363
- var spaces = function spaces(n) {
364
- var s = '';
393
+ var spaces = function spaces(n) {
394
+ var s = '';
365
395
 
366
- for (var i = 0; i < n; i++) {
367
- s += ' ';
368
- }
396
+ for (var i = 0; i < n; i++) {
397
+ s += ' ';
398
+ }
369
399
 
370
- return s;
371
- };
400
+ return s;
401
+ };
372
402
 
373
- var treeToLine = function treeToLine(tree) {
374
- var str = '';
403
+ var treeToLine = function treeToLine(tree) {
404
+ var str = '';
375
405
 
376
- for (var i = 0; i < tree.length; i++) {
377
- var branch = tree[i];
378
- var s2 = typeof branch === 'string' ? branch : treeToLine(branch); // Note the space before the dot in case statement ends 123. which is in fact allowed but be conservative.
406
+ for (var i = 0; i < tree.length; i++) {
407
+ var branch = tree[i];
408
+ var s2 = typeof branch === 'string' ? branch : treeToLine(branch); // Note the space before the dot in case statement ends 123. which is in fact allowed but be conservative.
379
409
 
380
- if (i !== 0) {
381
- var ch = str.slice(-1) || ' ';
410
+ if (i !== 0) {
411
+ var ch = str.slice(-1) || ' ';
382
412
 
383
- if (s2 === ',' || s2 === ';') {// no gap
384
- } else if (s2 === '.' && !'0123456789.'.includes(ch)) {// no gap except after number
385
- // no gap
386
- } else {
387
- str += ' '; // separate from previous token
413
+ if (s2 === ',' || s2 === ';') {// no gap
414
+ } else if (s2 === '.' && !'0123456789.'.includes(ch)) {// no gap except after number
415
+ // no gap
416
+ } else {
417
+ str += ' '; // separate from previous token
418
+ }
388
419
  }
389
- }
390
420
 
391
- str += s2;
392
- }
421
+ str += s2;
422
+ }
393
423
 
394
- return str;
395
- }; // Convert a nested tree of lists and strings to a string
424
+ return str;
425
+ }; // Convert a nested tree of lists and strings to a string
396
426
 
397
427
 
398
- var treeToString = function treeToString(tree, level) {
399
- var str = '';
400
- var lastLength = 100000;
401
- if (level === undefined) level = -1;
428
+ var treeToString = function treeToString(tree, level) {
429
+ var str = '';
430
+ var lastLength = 100000;
431
+ if (level === undefined) level = -1;
402
432
 
403
- for (var i = 0; i < tree.length; i++) {
404
- var branch = tree[i];
433
+ for (var i = 0; i < tree.length; i++) {
434
+ var branch = tree[i];
405
435
 
406
- if (typeof branch !== 'string') {
407
- var substr = treeToString(branch, level + 1);
436
+ if (typeof branch !== 'string') {
437
+ var substr = treeToString(branch, level + 1);
408
438
 
409
- if (substr.length < 10 * (width - indent * level) && substr.indexOf('"""') < 0) {
410
- // Don't mess up multiline strings
411
- var line = treeToLine(branch);
439
+ if (substr.length < 10 * (width - indent * level) && substr.indexOf('"""') < 0) {
440
+ // Don't mess up multiline strings
441
+ var line = treeToLine(branch);
412
442
 
413
- if (line.length < width - indent * level) {
414
- branch = line; // Note! treat as string below
443
+ if (line.length < width - indent * level) {
444
+ branch = line; // Note! treat as string below
415
445
 
416
- substr = '';
446
+ substr = '';
447
+ }
417
448
  }
418
- }
419
449
 
420
- if (substr) lastLength = 10000;
421
- str += substr;
422
- }
450
+ if (substr) lastLength = 10000;
451
+ str += substr;
452
+ }
423
453
 
424
- if (typeof branch === 'string') {
425
- if (branch.length === 1 && str.slice(-1) === '\n') {
426
- if (',.;'.indexOf(branch) >= 0) {
427
- str = str.slice(0, -1) + branch + '\n'; // slip punct'n on end
454
+ if (typeof branch === 'string') {
455
+ if (branch.length === 1 && str.slice(-1) === '\n') {
456
+ if (',.;'.indexOf(branch) >= 0) {
457
+ str = str.slice(0, -1) + branch + '\n'; // slip punct'n on end
428
458
 
429
- lastLength += 1;
430
- continue;
459
+ lastLength += 1;
460
+ continue;
461
+ }
431
462
  }
432
- }
433
463
 
434
- if (lastLength < indent * level + 4 || // if new line not necessary
435
- lastLength + branch.length + 1 < width && ';.'.indexOf(str[str.length - 2]) < 0) {
436
- // or the string fits on last line
437
- str = str.slice(0, -1) + ' ' + branch + '\n'; // then continue on this line
464
+ if (lastLength < indent * level + 4 || // if new line not necessary
465
+ lastLength + branch.length + 1 < width && ';.'.indexOf(str[str.length - 2]) < 0) {
466
+ // or the string fits on last line
467
+ str = str.slice(0, -1) + ' ' + branch + '\n'; // then continue on this line
438
468
 
439
- lastLength += branch.length + 1;
440
- } else {
441
- var _line = spaces(indent * level) + branch;
469
+ lastLength += branch.length + 1;
470
+ } else {
471
+ var _line = spaces(indent * level) + branch;
442
472
 
443
- str += _line + '\n';
444
- lastLength = _line.length;
473
+ str += _line + '\n';
474
+ lastLength = _line.length;
445
475
 
446
- if (level < 0) {
447
- str += '\n'; // extra blank line
476
+ if (level < 0) {
477
+ str += '\n'; // extra blank line
448
478
 
449
- lastLength = 100000; // don't touch
479
+ lastLength = 100000; // don't touch
480
+ }
450
481
  }
451
482
  }
452
483
  }
453
- }
454
484
 
455
- return str;
456
- }; // //////////////////////////////////////////// Structure for N3
457
- // Convert a set of statements into a nested tree of lists and strings
485
+ return str;
486
+ }; // //////////////////////////////////////////// Structure for N3
487
+ // Convert a set of statements into a nested tree of lists and strings
458
488
 
459
489
 
460
- function statementListToTreeMethod(statements) {
461
- var stats = this.rootSubjects(statements);
462
- var roots = stats.roots;
463
- var results = [];
490
+ function statementListToTreeMethod(statements) {
491
+ var stats = this.rootSubjects(statements);
492
+ var roots = stats.roots;
493
+ var results = [];
464
494
 
465
- for (var i = 0; i < roots.length; i++) {
466
- var root = roots[i];
467
- results.push(subjectTree(root, stats));
495
+ for (var i = 0; i < roots.length; i++) {
496
+ var root = roots[i];
497
+ results.push(subjectTree(root, stats));
498
+ }
499
+
500
+ return results;
468
501
  }
469
502
 
470
- return results;
471
- }
503
+ var statementListToTree = statementListToTreeMethod.bind(this); // The tree for a subject
472
504
 
473
- var statementListToTree = statementListToTreeMethod.bind(this); // The tree for a subject
505
+ function subjectTree(subject, stats) {
506
+ if (subject.termType === 'BlankNode' && !stats.incoming[subject]) {
507
+ return objectTree(subject, stats, true).concat(['.']); // Anonymous bnode subject
508
+ }
474
509
 
475
- function subjectTree(subject, stats) {
476
- if (subject.termType === 'BlankNode' && !stats.incoming[subject]) {
477
- return objectTree(subject, stats, true).concat(['.']); // Anonymous bnode subject
478
- }
510
+ return [termToN3(subject, stats)].concat([propertyTree(subject, stats)]).concat(['.']);
511
+ } // The property tree for a single subject or anonymous node
479
512
 
480
- return [termToN3(subject, stats)].concat([propertyTree(subject, stats)]).concat(['.']);
481
- } // The property tree for a single subject or anonymous node
482
513
 
514
+ function propertyTreeMethod(subject, stats) {
515
+ var results = [];
516
+ var lastPred = null;
517
+ var sts = stats.subjects[this.toStr(subject)] || []; // relevant statements
483
518
 
484
- function propertyTreeMethod(subject, stats) {
485
- var results = [];
486
- var lastPred = null;
487
- var sts = stats.subjects[this.toStr(subject)] || []; // relevant statements
519
+ if (typeof sts === 'undefined') {
520
+ throw new Error('Cant find statements for ' + subject);
521
+ }
488
522
 
489
- if (typeof sts === 'undefined') {
490
- throw new Error('Cant find statements for ' + subject);
491
- }
523
+ var objects = [];
492
524
 
493
- var objects = [];
525
+ for (var i = 0; i < sts.length; i++) {
526
+ var st = sts[i];
494
527
 
495
- for (var i = 0; i < sts.length; i++) {
496
- var st = sts[i];
528
+ if (st.predicate.uri === lastPred) {
529
+ objects.push(',');
530
+ } else {
531
+ if (lastPred) {
532
+ results = results.concat([objects]).concat([';']);
533
+ objects = [];
534
+ }
497
535
 
498
- if (st.predicate.uri === lastPred) {
499
- objects.push(',');
500
- } else {
501
- if (lastPred) {
502
- results = results.concat([objects]).concat([';']);
503
- objects = [];
536
+ results.push(predMap[st.predicate.uri] ? predMap[st.predicate.uri] : termToN3(st.predicate, stats));
504
537
  }
505
538
 
506
- results.push(predMap[st.predicate.uri] ? predMap[st.predicate.uri] : termToN3(st.predicate, stats));
539
+ lastPred = st.predicate.uri;
540
+ objects.push(objectTree(st.object, stats));
507
541
  }
508
542
 
509
- lastPred = st.predicate.uri;
510
- objects.push(objectTree(st.object, stats));
543
+ results = results.concat([objects]);
544
+ return results;
511
545
  }
512
546
 
513
- results = results.concat([objects]);
514
- return results;
515
- }
516
-
517
- var propertyTree = propertyTreeMethod.bind(this);
547
+ var propertyTree = propertyTreeMethod.bind(this);
518
548
 
519
- function objectTreeMethod(obj, stats, force) {
520
- if (obj.termType === 'BlankNode' && (force || stats.rootsHash[obj.toNT()] === undefined)) {
521
- // if not a root
522
- if (stats.subjects[this.toStr(obj)]) {
523
- return ['[', propertyTree(obj, stats), ']'];
524
- } else {
525
- return '[]';
549
+ function objectTreeMethod(obj, stats, force) {
550
+ if (obj.termType === 'BlankNode' && (force || stats.rootsHash[obj.toNT()] === undefined)) {
551
+ // if not a root
552
+ if (stats.subjects[this.toStr(obj)]) {
553
+ return ['[', propertyTree(obj, stats), ']'];
554
+ } else {
555
+ return '[]';
556
+ }
526
557
  }
558
+
559
+ return termToN3(obj, stats);
527
560
  }
528
561
 
529
- return termToN3(obj, stats);
530
- }
562
+ var objectTree = objectTreeMethod.bind(this);
531
563
 
532
- var objectTree = objectTreeMethod.bind(this);
564
+ function termToN3Method(expr, stats) {
565
+ //
566
+ var i, res;
533
567
 
534
- function termToN3Method(expr, stats) {
535
- //
536
- var i, res;
568
+ switch (expr.termType) {
569
+ case 'Graph':
570
+ res = ['{'];
571
+ res = res.concat(statementListToTree(expr.statements));
572
+ return res.concat(['}']);
537
573
 
538
- switch (expr.termType) {
539
- case 'Graph':
540
- res = ['{'];
541
- res = res.concat(statementListToTree(expr.statements));
542
- return res.concat(['}']);
543
-
544
- case 'Collection':
545
- res = ['('];
574
+ case 'Collection':
575
+ res = ['('];
546
576
 
547
- for (i = 0; i < expr.elements.length; i++) {
548
- res.push([objectTree(expr.elements[i], stats)]);
549
- }
577
+ for (i = 0; i < expr.elements.length; i++) {
578
+ res.push([objectTree(expr.elements[i], stats)]);
579
+ }
550
580
 
551
- res.push(')');
552
- return res;
581
+ res.push(')');
582
+ return res;
553
583
 
554
- default:
555
- return this.atomicTermToN3(expr);
584
+ default:
585
+ return this.atomicTermToN3(expr);
586
+ }
556
587
  }
557
- }
558
588
 
559
- __Serializer.prototype.termToN3 = termToN3;
560
- var termToN3 = termToN3Method.bind(this);
589
+ Serializer.prototype.termToN3 = termToN3;
590
+ var termToN3 = termToN3Method.bind(this);
561
591
 
562
- function prefixDirectivesMethod() {
563
- var str = '';
592
+ function prefixDirectivesMethod() {
593
+ var str = '';
564
594
 
565
- if (this.defaultNamespace) {
566
- str += '@prefix : ' + this.explicitURI(this.defaultNamespace) + '.\n';
567
- }
568
-
569
- for (var ns in this.prefixes) {
570
- if (!this.prefixes.hasOwnProperty(ns)) continue;
571
- if (!this.namespacesUsed[ns]) continue;
572
- str += '@prefix ' + this.prefixes[ns] + ': ' + this.explicitURI(ns) + '.\n';
573
- }
574
-
575
- return str + '\n';
576
- }
595
+ if (this.defaultNamespace) {
596
+ str += '@prefix : ' + this.explicitURI(this.defaultNamespace) + '.\n';
597
+ }
577
598
 
578
- var prefixDirectives = prefixDirectivesMethod.bind(this); // Body of statementsToN3:
599
+ for (var ns in this.prefixes) {
600
+ if (!this.prefixes.hasOwnProperty(ns)) continue;
601
+ if (!this.namespacesUsed[ns]) continue;
602
+ str += '@prefix ' + this.prefixes[ns] + ': ' + this.explicitURI(ns) + '.\n';
603
+ }
579
604
 
580
- var tree = statementListToTree(sts);
581
- return prefixDirectives() + treeToString(tree);
582
- }; // //////////////////////////////////////////// Atomic Terms
583
- // Deal with term level things and nesting with no bnode structure
605
+ return str + '\n';
606
+ }
584
607
 
608
+ var prefixDirectives = prefixDirectivesMethod.bind(this); // Body of statementsToN3:
585
609
 
586
- __Serializer.prototype.atomicTermToN3 = function atomicTermToN3(expr, stats) {
587
- switch (expr.termType) {
588
- case 'BlankNode':
589
- case 'Variable':
590
- return expr.toNT();
610
+ var tree = statementListToTree(sts);
611
+ return prefixDirectives() + treeToString(tree);
612
+ } // //////////////////////////////////////////// Atomic Terms
613
+ // Deal with term level things and nesting with no bnode structure
591
614
 
592
- case 'Literal':
593
- var val = expr.value;
615
+ }, {
616
+ key: "atomicTermToN3",
617
+ value: function atomicTermToN3(expr, stats) {
618
+ switch (expr.termType) {
619
+ case 'BlankNode':
620
+ case 'Variable':
621
+ return expr.toNT();
594
622
 
595
- if (typeof val !== 'string') {
596
- throw new TypeError('Value of RDF literal node must be a string');
597
- } // var val = expr.value.toString() // should be a string already
623
+ case 'Literal':
624
+ var val = expr.value;
598
625
 
626
+ if (typeof val !== 'string') {
627
+ throw new TypeError('Value of RDF literal node must be a string');
628
+ } // var val = expr.value.toString() // should be a string already
599
629
 
600
- if (expr.datatype && this.flags.indexOf('x') < 0) {
601
- // Supress native numbers
602
- switch (expr.datatype.uri) {
603
- case 'http://www.w3.org/2001/XMLSchema#integer':
604
- return val;
605
630
 
606
- case 'http://www.w3.org/2001/XMLSchema#decimal':
607
- // In urtle must have dot
608
- if (val.indexOf('.') < 0) val += '.0';
609
- return val;
631
+ if (expr.datatype && this.flags.indexOf('x') < 0) {
632
+ // Supress native numbers
633
+ switch (expr.datatype.uri) {
634
+ case 'http://www.w3.org/2001/XMLSchema#integer':
635
+ return val;
610
636
 
611
- case 'http://www.w3.org/2001/XMLSchema#double':
612
- {
613
- // Must force use of 'e'
614
- var eNotation = val.toLowerCase().indexOf('e') > 0;
615
- if (val.indexOf('.') < 0 && !eNotation) val += '.0';
616
- if (!eNotation) val += 'e0';
637
+ case 'http://www.w3.org/2001/XMLSchema#decimal':
638
+ // In urtle must have dot
639
+ if (val.indexOf('.') < 0) val += '.0';
617
640
  return val;
618
- }
619
641
 
620
- case 'http://www.w3.org/2001/XMLSchema#boolean':
621
- return expr.value === '1' ? 'true' : 'false';
642
+ case 'http://www.w3.org/2001/XMLSchema#double':
643
+ {
644
+ // Must force use of 'e'
645
+ var eNotation = val.toLowerCase().indexOf('e') > 0;
646
+ if (val.indexOf('.') < 0 && !eNotation) val += '.0';
647
+ if (!eNotation) val += 'e0';
648
+ return val;
649
+ }
650
+
651
+ case 'http://www.w3.org/2001/XMLSchema#boolean':
652
+ return expr.value === '1' ? 'true' : 'false';
653
+ }
622
654
  }
623
- }
624
655
 
625
- var str = this.stringToN3(expr.value);
626
-
627
- if (expr.language) {
628
- str += '@' + expr.language;
629
- } else if (!expr.datatype.equals(this.xsd.string)) {
630
- str += '^^' + this.atomicTermToN3(expr.datatype, stats);
631
- }
656
+ var str = this.stringToN3(expr.value);
632
657
 
633
- return str;
634
-
635
- case 'NamedNode':
636
- return this.symbolToN3(expr);
658
+ if (expr.language) {
659
+ str += '@' + expr.language;
660
+ } else if (!expr.datatype.equals(this.xsd.string)) {
661
+ str += '^^' + this.atomicTermToN3(expr.datatype, stats);
662
+ }
637
663
 
638
- default:
639
- throw new Error('Internal: atomicTermToN3 cannot handle ' + expr + ' of termType: ' + expr.termType);
640
- }
641
- }; // stringToN3: String escaping for N3
642
-
643
-
644
- __Serializer.prototype.validPrefix = new RegExp(/^[a-zA-Z][a-zA-Z0-9]*$/);
645
- __Serializer.prototype.forbidden1 = new RegExp(/[\\"\b\f\r\v\t\n\u0080-\uffff]/gm);
646
- __Serializer.prototype.forbidden3 = new RegExp(/[\\"\b\f\r\v\u0080-\uffff]/gm);
647
-
648
- __Serializer.prototype.stringToN3 = function stringToN3(str, flags) {
649
- if (!flags) flags = 'e';
650
- var res = '';
651
- var i, j, k;
652
- var delim;
653
- var forbidden;
654
-
655
- if (str.length > 20 && // Long enough to make sense
656
- str.slice(-1) !== '"' && // corner case'
657
- flags.indexOf('n') < 0 && ( // Force single line
658
- str.indexOf('\n') > 0 || str.indexOf('"') > 0)) {
659
- delim = '"""';
660
- forbidden = __Serializer.prototype.forbidden3;
661
- } else {
662
- delim = '"';
663
- forbidden = __Serializer.prototype.forbidden1;
664
- }
664
+ return str;
665
665
 
666
- for (i = 0; i < str.length;) {
667
- forbidden.lastIndex = 0;
668
- var m = forbidden.exec(str.slice(i));
669
- if (m == null) break;
670
- j = i + forbidden.lastIndex - 1;
671
- res += str.slice(i, j);
672
- var ch = str[j];
666
+ case 'NamedNode':
667
+ return this.symbolToN3(expr);
673
668
 
674
- if (ch === '"' && delim === '"""' && str.slice(j, j + 3) !== '"""') {
675
- res += ch;
669
+ default:
670
+ throw new Error('Internal: atomicTermToN3 cannot handle ' + expr + ' of termType: ' + expr.termType);
671
+ }
672
+ } // stringToN3: String escaping for N3
673
+
674
+ }, {
675
+ key: "stringToN3",
676
+ value: function stringToN3(str, flags) {
677
+ if (!flags) flags = 'e';
678
+ var res = '';
679
+ var i, j, k;
680
+ var delim;
681
+ var forbidden;
682
+
683
+ if (str.length > 20 && // Long enough to make sense
684
+ str.slice(-1) !== '"' && // corner case'
685
+ flags.indexOf('n') < 0 && ( // Force single line
686
+ str.indexOf('\n') > 0 || str.indexOf('"') > 0)) {
687
+ delim = '"""';
688
+ forbidden = this.forbidden3;
676
689
  } else {
677
- k = '\b\f\r\t\v\n\\"'.indexOf(ch); // No escaping of bell (7)?
690
+ delim = '"';
691
+ forbidden = this.forbidden1;
692
+ }
678
693
 
679
- if (k >= 0) {
680
- res += '\\' + 'bfrtvn\\"'[k];
694
+ for (i = 0; i < str.length;) {
695
+ forbidden.lastIndex = 0;
696
+ var m = forbidden.exec(str.slice(i));
697
+ if (m == null) break;
698
+ j = i + forbidden.lastIndex - 1;
699
+ res += str.slice(i, j);
700
+ var ch = str[j];
701
+
702
+ if (ch === '"' && delim === '"""' && str.slice(j, j + 3) !== '"""') {
703
+ res += ch;
681
704
  } else {
682
- if (flags.indexOf('e') >= 0) {
683
- // Unicode escaping in strings not unix style
684
- res += "\\u" + ('000' + ch.charCodeAt(0).toString(16).toLowerCase()).slice(-4);
705
+ k = '\b\f\r\t\v\n\\"'.indexOf(ch); // No escaping of bell (7)?
706
+
707
+ if (k >= 0) {
708
+ res += '\\' + 'bfrtvn\\"'[k];
685
709
  } else {
686
- // no 'e' flag
687
- res += ch;
710
+ if (flags.indexOf('e') >= 0) {
711
+ // Unicode escaping in strings not unix style
712
+ res += "\\u" + ('000' + ch.charCodeAt(0).toString(16).toLowerCase()).slice(-4);
713
+ } else {
714
+ // no 'e' flag
715
+ res += ch;
716
+ }
688
717
  }
689
718
  }
690
- }
691
-
692
- i = j + 1;
693
- }
694
-
695
- return delim + res + str.slice(i) + delim;
696
- }; // A single symbol, either in <> or namespace notation
697
719
 
720
+ i = j + 1;
721
+ }
698
722
 
699
- __Serializer.prototype.symbolToN3 = function symbolToN3(x) {
700
- // c.f. symbolString() in notation3.py
701
- var uri = x.uri;
702
- var j = uri.indexOf('#');
723
+ return delim + res + str.slice(i) + delim;
724
+ } // A single symbol, either in <> or namespace notation
703
725
 
704
- if (j < 0 && this.flags.indexOf('/') < 0) {
705
- j = uri.lastIndexOf('/');
706
- }
707
-
708
- if (j >= 0 && this.flags.indexOf('p') < 0 && ( // Can split at namespace but only if http[s]: URI or file: or ws[s] (why not others?)
709
- uri.indexOf('http') === 0 || uri.indexOf('ws') === 0 || uri.indexOf('file') === 0)) {
710
- var canSplit = true;
726
+ }, {
727
+ key: "symbolToN3",
728
+ value: function symbolToN3(x) {
729
+ // c.f. symbolString() in notation3.py
730
+ var uri = x.uri;
731
+ var j = uri.indexOf('#');
711
732
 
712
- for (var k = j + 1; k < uri.length; k++) {
713
- if (__Serializer.prototype._notNameChars.indexOf(uri[k]) >= 0) {
714
- canSplit = false;
715
- break;
716
- }
733
+ if (j < 0 && this.flags.indexOf('/') < 0) {
734
+ j = uri.lastIndexOf('/');
717
735
  }
718
- /*
719
- if (uri.slice(0, j + 1) === this.base + '#') { // base-relative
720
- if (canSplit) {
721
- return ':' + uri.slice(j + 1) // assume deafult ns is local
722
- } else {
723
- return '<#' + uri.slice(j + 1) + '>'
724
- }
725
- }
726
- */
727
736
 
737
+ if (j >= 0 && this.flags.indexOf('p') < 0 && ( // Can split at namespace but only if http[s]: URI or file: or ws[s] (why not others?)
738
+ uri.indexOf('http') === 0 || uri.indexOf('ws') === 0 || uri.indexOf('file') === 0)) {
739
+ var canSplit = true;
728
740
 
729
- if (canSplit) {
730
- var localid = uri.slice(j + 1);
731
- var namesp = uri.slice(0, j + 1);
732
-
733
- if (this.defaultNamespace && this.defaultNamespace === namesp && this.flags.indexOf('d') < 0) {
734
- // d -> suppress default
735
- if (this.flags.indexOf('k') >= 0 && this.keyords.indexOf(localid) < 0) {
736
- return localid;
741
+ for (var k = j + 1; k < uri.length; k++) {
742
+ if (this._notNameChars.indexOf(uri[k]) >= 0) {
743
+ canSplit = false;
744
+ break;
737
745
  }
746
+ }
747
+ /*
748
+ if (uri.slice(0, j + 1) === this.base + '#') { // base-relative
749
+ if (canSplit) {
750
+ return ':' + uri.slice(j + 1) // assume deafult ns is local
751
+ } else {
752
+ return '<#' + uri.slice(j + 1) + '>'
753
+ }
754
+ }
755
+ */
738
756
 
739
- return ':' + localid;
740
- } // this.checkIntegrity() // @@@ Remove when not testing
741
-
742
-
743
- var prefix = this.prefixes[namesp];
744
- if (!prefix) prefix = this.makeUpPrefix(namesp);
745
-
746
- if (prefix) {
747
- this.namespacesUsed[namesp] = true;
748
- return prefix + ':' + localid;
749
- } // Fall though if can't do qname
750
757
 
751
- }
752
- }
758
+ if (canSplit) {
759
+ var localid = uri.slice(j + 1);
760
+ var namesp = uri.slice(0, j + 1);
753
761
 
754
- return this.explicitURI(uri);
755
- }; // String escaping utilities
762
+ if (this.defaultNamespace && this.defaultNamespace === namesp && this.flags.indexOf('d') < 0) {
763
+ // d -> suppress default
764
+ if (this.flags.indexOf('k') >= 0 && this.keyords.indexOf(localid) < 0) {
765
+ return localid;
766
+ }
756
767
 
768
+ return ':' + localid;
769
+ } // this.checkIntegrity() // @@@ Remove when not testing
757
770
 
758
- function hexify(str) {
759
- // also used in parser
760
- return encodeURI(str);
761
- }
762
771
 
763
- function backslashUify(str) {
764
- var res = '';
765
- var k;
772
+ var prefix = this.prefixes[namesp];
773
+ if (!prefix) prefix = this.makeUpPrefix(namesp);
766
774
 
767
- for (var i = 0; i < str.length; i++) {
768
- k = str.charCodeAt(i);
775
+ if (prefix) {
776
+ this.namespacesUsed[namesp] = true;
777
+ return prefix + ':' + localid;
778
+ } // Fall though if can't do qname
769
779
 
770
- if (k > 65535) {
771
- res += "\\U" + ('00000000' + k.toString(16)).slice(-8); // convert to upper?
772
- } else if (k > 126) {
773
- res += "\\u" + ('0000' + k.toString(16)).slice(-4);
774
- } else {
775
- res += str[i];
780
+ }
776
781
  }
777
- }
778
-
779
- return res;
780
- } // /////////////////////////// Quad store serialization
781
- // @para. write - a function taking a single string to be output
782
- //
783
-
784
-
785
- __Serializer.prototype.writeStore = function (write) {
786
- var kb = this.store;
787
- var fetcher = kb.fetcher;
788
- var session = fetcher && fetcher.appNode; // The core data
789
782
 
790
- var sources = this.store.index[3];
791
-
792
- for (var s in sources) {
793
- // -> assume we can use -> as short for log:semantics
794
- var source = kb.fromNT(s);
795
- if (session && source.equals(session)) continue;
796
- write('\n' + this.atomicTermToN3(source) + ' ' + this.atomicTermToN3(kb.sym('http://www.w3.org/2000/10/swap/log#semantics')) + ' { ' + this.statementsToN3(kb.statementsMatching(undefined, undefined, undefined, source)) + ' }.\n');
797
- } // The metadata from HTTP interactions:
798
-
799
-
800
- kb.statementsMatching(undefined, kb.sym('http://www.w3.org/2007/ont/link#requestedURI')).map(function (st) {
801
- write('\n<' + st.object.value + '> log:metadata {\n');
802
- var sts = kb.statementsMatching(undefined, undefined, undefined, st.subject);
803
- write(this.statementsToN3(this.statementsToN3(sts)));
804
- write('}.\n');
805
- }); // Inferences we have made ourselves not attributable to anyone else
783
+ return this.explicitURI(uri);
784
+ } // /////////////////////////// Quad store serialization
785
+ // @para. write - a function taking a single string to be output
786
+ //
787
+
788
+ }, {
789
+ key: "writeStore",
790
+ value: function writeStore(write) {
791
+ var kb = this.store;
792
+ var fetcher = kb.fetcher;
793
+ var session = fetcher && fetcher.appNode; // The core data
794
+
795
+ var sources = this.store.index[3];
796
+
797
+ for (var s in sources) {
798
+ // -> assume we can use -> as short for log:semantics
799
+ var source = kb.fromNT(s);
800
+ if (session && source.equals(session)) continue;
801
+ write('\n' + this.atomicTermToN3(source) + ' ' + this.atomicTermToN3(kb.sym('http://www.w3.org/2000/10/swap/log#semantics')) + ' { ' + this.statementsToN3(kb.statementsMatching(undefined, undefined, undefined, source)) + ' }.\n');
802
+ } // The metadata from HTTP interactions:
803
+
804
+
805
+ kb.statementsMatching(undefined, kb.sym('http://www.w3.org/2007/ont/link#requestedURI')).map(function (st) {
806
+ write('\n<' + st.object.value + '> log:metadata {\n');
807
+ var sts = kb.statementsMatching(undefined, undefined, undefined, st.subject);
808
+ write(this.statementsToN3(this.statementsToN3(sts)));
809
+ write('}.\n');
810
+ }); // Inferences we have made ourselves not attributable to anyone else
811
+
812
+ var metaSources = [];
813
+ if (session) metaSources.push(session);
814
+ var metadata = [];
815
+ metaSources.map(function (source) {
816
+ metadata = metadata.concat(kb.statementsMatching(undefined, undefined, undefined, source));
817
+ });
818
+ write(this.statementsToN3(metadata));
819
+ } // ////////////////////////////////////////////// XML serialization
806
820
 
807
- var metaSources = [];
808
- if (session) metaSources.push(session);
809
- var metadata = [];
810
- metaSources.map(function (source) {
811
- metadata = metadata.concat(kb.statementsMatching(undefined, undefined, undefined, source));
812
- });
813
- write(this.statementsToN3(metadata));
814
- }; // ////////////////////////////////////////////// XML serialization
821
+ }, {
822
+ key: "statementsToXML",
823
+ value: function statementsToXML(sts) {
824
+ var indent = 4;
825
+ var width = 80;
826
+ var namespaceCounts = []; // which have been used
815
827
 
828
+ namespaceCounts['http://www.w3.org/1999/02/22-rdf-syntax-ns#'] = true;
829
+ var liPrefix = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#_'; // prefix for ordered list items
830
+ // //////////////////////// Arrange the bits of XML text
816
831
 
817
- __Serializer.prototype.statementsToXML = function (sts) {
818
- var indent = 4;
819
- var width = 80;
820
- var namespaceCounts = []; // which have been used
832
+ var spaces = function spaces(n) {
833
+ var s = '';
821
834
 
822
- namespaceCounts['http://www.w3.org/1999/02/22-rdf-syntax-ns#'] = true;
823
- var liPrefix = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#_'; // prefix for ordered list items
824
- // //////////////////////// Arrange the bits of XML text
835
+ for (var i = 0; i < n; i++) {
836
+ s += ' ';
837
+ }
825
838
 
826
- var spaces = function spaces(n) {
827
- var s = '';
839
+ return s;
840
+ };
828
841
 
829
- for (var i = 0; i < n; i++) {
830
- s += ' ';
831
- }
842
+ var XMLtreeToLine = function XMLtreeToLine(tree) {
843
+ var str = '';
832
844
 
833
- return s;
834
- };
845
+ for (var i = 0; i < tree.length; i++) {
846
+ var branch = tree[i];
847
+ var s2 = typeof branch === 'string' ? branch : XMLtreeToLine(branch);
848
+ str += s2;
849
+ }
835
850
 
836
- var XMLtreeToLine = function XMLtreeToLine(tree) {
837
- var str = '';
851
+ return str;
852
+ }; // Convert a nested tree of lists and strings to a string
838
853
 
839
- for (var i = 0; i < tree.length; i++) {
840
- var branch = tree[i];
841
- var s2 = typeof branch === 'string' ? branch : XMLtreeToLine(branch);
842
- str += s2;
843
- }
844
854
 
845
- return str;
846
- }; // Convert a nested tree of lists and strings to a string
855
+ var XMLtreeToString = function XMLtreeToString(tree, level) {
856
+ var str = '';
857
+ var line;
858
+ var lastLength = 100000;
859
+ if (!level) level = 0;
847
860
 
861
+ for (var i = 0; i < tree.length; i++) {
862
+ var branch = tree[i];
848
863
 
849
- var XMLtreeToString = function XMLtreeToString(tree, level) {
850
- var str = '';
851
- var line;
852
- var lastLength = 100000;
853
- if (!level) level = 0;
864
+ if (typeof branch !== 'string') {
865
+ var substr = XMLtreeToString(branch, level + 1);
854
866
 
855
- for (var i = 0; i < tree.length; i++) {
856
- var branch = tree[i];
867
+ if (substr.length < 10 * (width - indent * level) && substr.indexOf('"""') < 0) {
868
+ // Don't mess up multiline strings
869
+ line = XMLtreeToLine(branch);
857
870
 
858
- if (typeof branch !== 'string') {
859
- var substr = XMLtreeToString(branch, level + 1);
871
+ if (line.length < width - indent * level) {
872
+ branch = ' ' + line; // @@ Hack: treat as string below
860
873
 
861
- if (substr.length < 10 * (width - indent * level) && substr.indexOf('"""') < 0) {
862
- // Don't mess up multiline strings
863
- line = XMLtreeToLine(branch);
874
+ substr = '';
875
+ }
876
+ }
864
877
 
865
- if (line.length < width - indent * level) {
866
- branch = ' ' + line; // @@ Hack: treat as string below
878
+ if (substr) lastLength = 10000;
879
+ str += substr;
880
+ }
867
881
 
868
- substr = '';
882
+ if (typeof branch === 'string') {
883
+ if (lastLength < indent * level + 4) {
884
+ // continue
885
+ str = str.slice(0, -1) + ' ' + branch + '\n';
886
+ lastLength += branch.length + 1;
887
+ } else {
888
+ line = spaces(indent * level) + branch;
889
+ str += line + '\n';
890
+ lastLength = line.length;
869
891
  }
892
+ } else {// not string
870
893
  }
871
-
872
- if (substr) lastLength = 10000;
873
- str += substr;
874
894
  }
875
895
 
876
- if (typeof branch === 'string') {
877
- if (lastLength < indent * level + 4) {
878
- // continue
879
- str = str.slice(0, -1) + ' ' + branch + '\n';
880
- lastLength += branch.length + 1;
881
- } else {
882
- line = spaces(indent * level) + branch;
883
- str += line + '\n';
884
- lastLength = line.length;
885
- }
886
- } else {// not string
887
- }
888
- }
896
+ return str;
897
+ };
889
898
 
890
- return str;
891
- };
899
+ function statementListToXMLTreeMethod(statements) {
900
+ this.suggestPrefix('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
901
+ var stats = this.rootSubjects(statements);
902
+ var roots = stats.roots;
903
+ var results = [];
892
904
 
893
- function statementListToXMLTreeMethod(statements) {
894
- this.suggestPrefix('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
895
- var stats = this.rootSubjects(statements);
896
- var roots = stats.roots;
897
- var results = [];
905
+ for (var i = 0; i < roots.length; i++) {
906
+ var root = roots[i];
907
+ results.push(subjectXMLTree(root, stats));
908
+ }
898
909
 
899
- for (var i = 0; i < roots.length; i++) {
900
- var root = roots[i];
901
- results.push(subjectXMLTree(root, stats));
910
+ return results;
902
911
  }
903
912
 
904
- return results;
905
- }
913
+ var statementListToXMLTree = statementListToXMLTreeMethod.bind(this);
906
914
 
907
- var statementListToXMLTree = statementListToXMLTreeMethod.bind(this);
915
+ function escapeForXML(str) {
916
+ if (typeof str === 'undefined') return '@@@undefined@@@@';
917
+ return str.replace(/[&<"]/g, function (m) {
918
+ switch (m[0]) {
919
+ case '&':
920
+ return '&amp;';
908
921
 
909
- function escapeForXML(str) {
910
- if (typeof str === 'undefined') return '@@@undefined@@@@';
911
- return str.replace(/[&<"]/g, function (m) {
912
- switch (m[0]) {
913
- case '&':
914
- return '&amp;';
922
+ case '<':
923
+ return '&lt;';
915
924
 
916
- case '<':
917
- return '&lt;';
918
-
919
- case '"':
920
- return '&quot;';
921
- // '
922
- }
923
- });
924
- }
925
+ case '"':
926
+ return '&quot;';
927
+ // '
928
+ }
929
+ });
930
+ }
925
931
 
926
- function relURIMethod(term) {
927
- return escapeForXML(this.base ? Util.uri.refTo(this.base, term.uri) : term.uri);
928
- }
932
+ function relURIMethod(term) {
933
+ return escapeForXML(this.base ? Util.uri.refTo(this.base, term.uri) : term.uri);
934
+ }
929
935
 
930
- var relURI = relURIMethod.bind(this); // The tree for a subject
936
+ var relURI = relURIMethod.bind(this); // The tree for a subject
931
937
 
932
- function subjectXMLTreeMethod(subject, stats) {
933
- var results = [];
934
- var type, t, st, pred;
935
- var sts = stats.subjects[this.toStr(subject)]; // relevant statements
938
+ function subjectXMLTreeMethod(subject, stats) {
939
+ var results = [];
940
+ var type, t, st, pred;
941
+ var sts = stats.subjects[this.toStr(subject)]; // relevant statements
936
942
 
937
- if (typeof sts === 'undefined') {
938
- // empty bnode
939
- return propertyXMLTree(subject, stats);
940
- } // Sort only on the predicate, leave the order at object
941
- // level undisturbed. This leaves multilingual content in
942
- // the order of entry (for partner literals), which helps
943
- // readability.
944
- //
945
- // For the predicate sort, we attempt to split the uri
946
- // as a hint to the sequence
943
+ if (typeof sts === 'undefined') {
944
+ // empty bnode
945
+ return propertyXMLTree(subject, stats);
946
+ } // Sort only on the predicate, leave the order at object
947
+ // level undisturbed. This leaves multilingual content in
948
+ // the order of entry (for partner literals), which helps
949
+ // readability.
950
+ //
951
+ // For the predicate sort, we attempt to split the uri
952
+ // as a hint to the sequence
947
953
 
948
954
 
949
- sts.sort(function (a, b) {
950
- var ap = a.predicate.uri;
951
- var bp = b.predicate.uri;
955
+ sts.sort(function (a, b) {
956
+ var ap = a.predicate.uri;
957
+ var bp = b.predicate.uri;
952
958
 
953
- if (ap.substring(0, liPrefix.length) === liPrefix || bp.substring(0, liPrefix.length) === liPrefix) {
954
- // we're only interested in sorting list items
955
- return ap.localeCompare(bp);
956
- }
959
+ if (ap.substring(0, liPrefix.length) === liPrefix || bp.substring(0, liPrefix.length) === liPrefix) {
960
+ // we're only interested in sorting list items
961
+ return ap.localeCompare(bp);
962
+ }
957
963
 
958
- var as = ap.substring(liPrefix.length);
959
- var bs = bp.substring(liPrefix.length);
960
- var an = parseInt(as, 10);
961
- var bn = parseInt(bs, 10);
964
+ var as = ap.substring(liPrefix.length);
965
+ var bs = bp.substring(liPrefix.length);
966
+ var an = parseInt(as, 10);
967
+ var bn = parseInt(bs, 10);
962
968
 
963
- if (isNaN(an) || isNaN(bn) || an !== as || bn !== bs) {
964
- // we only care about integers
965
- return ap.localeCompare(bp);
966
- }
969
+ if (isNaN(an) || isNaN(bn) || an !== as || bn !== bs) {
970
+ // we only care about integers
971
+ return ap.localeCompare(bp);
972
+ }
967
973
 
968
- return an - bn;
969
- });
974
+ return an - bn;
975
+ });
970
976
 
971
- for (var i = 0; i < sts.length; i++) {
972
- st = sts[i]; // look for a type
977
+ for (var i = 0; i < sts.length; i++) {
978
+ st = sts[i]; // look for a type
973
979
 
974
- if (st.predicate.uri === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' && !type && st.object.termType === 'NamedNode') {
975
- type = st.object;
976
- continue; // don't include it as a child element
977
- } // see whether predicate can be replaced with "li"
980
+ if (st.predicate.uri === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' && !type && st.object.termType === 'NamedNode') {
981
+ type = st.object;
982
+ continue; // don't include it as a child element
983
+ } // see whether predicate can be replaced with "li"
978
984
 
979
985
 
980
- pred = st.predicate;
986
+ pred = st.predicate;
981
987
 
982
- if (pred.uri.substr(0, liPrefix.length) === liPrefix) {
983
- var number = pred.uri.substr(liPrefix.length); // make sure these are actually numeric list items
988
+ if (pred.uri.substr(0, liPrefix.length) === liPrefix) {
989
+ var number = pred.uri.substr(liPrefix.length); // make sure these are actually numeric list items
984
990
 
985
- var intNumber = parseInt(number, 10);
991
+ var intNumber = parseInt(number, 10);
986
992
 
987
- if (number === intNumber.toString()) {
988
- // was numeric; don't need to worry about ordering since we've already
989
- // sorted the statements
990
- pred = this.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#li');
993
+ if (number === intNumber.toString()) {
994
+ // was numeric; don't need to worry about ordering since we've already
995
+ // sorted the statements
996
+ pred = this.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#li');
997
+ }
991
998
  }
992
- }
993
999
 
994
- t = qname(pred);
1000
+ t = qname(pred);
995
1001
 
996
- switch (st.object.termType) {
997
- case 'BlankNode':
998
- if (stats.incoming[st.object].length === 1) {
999
- // there should always be something in the incoming array for a bnode
1000
- results = results.concat(['<' + t + ' rdf:parseType="Resource">', subjectXMLTree(st.object, stats), '</' + t + '>']);
1001
- } else {
1002
- results = results.concat(['<' + t + ' rdf:nodeID="' + st.object.toNT().slice(2) + '"/>']);
1003
- }
1002
+ switch (st.object.termType) {
1003
+ case 'BlankNode':
1004
+ if (stats.incoming[st.object].length === 1) {
1005
+ // there should always be something in the incoming array for a bnode
1006
+ results = results.concat(['<' + t + ' rdf:parseType="Resource">', subjectXMLTree(st.object, stats), '</' + t + '>']);
1007
+ } else {
1008
+ results = results.concat(['<' + t + ' rdf:nodeID="' + st.object.toNT().slice(2) + '"/>']);
1009
+ }
1004
1010
 
1005
- break;
1011
+ break;
1006
1012
 
1007
- case 'NamedNode':
1008
- results = results.concat(['<' + t + ' rdf:resource="' + relURI(st.object) + '"/>']);
1009
- break;
1013
+ case 'NamedNode':
1014
+ results = results.concat(['<' + t + ' rdf:resource="' + relURI(st.object) + '"/>']);
1015
+ break;
1010
1016
 
1011
- case 'Literal':
1012
- results = results.concat(['<' + t + (st.object.datatype.equals(this.xsd.string) ? '' : ' rdf:datatype="' + escapeForXML(st.object.datatype.uri) + '"') + (st.object.language ? ' xml:lang="' + st.object.language + '"' : '') + '>' + escapeForXML(st.object.value) + '</' + t + '>']);
1013
- break;
1017
+ case 'Literal':
1018
+ results = results.concat(['<' + t + (st.object.datatype.equals(this.xsd.string) ? '' : ' rdf:datatype="' + escapeForXML(st.object.datatype.uri) + '"') + (st.object.language ? ' xml:lang="' + st.object.language + '"' : '') + '>' + escapeForXML(st.object.value) + '</' + t + '>']);
1019
+ break;
1014
1020
 
1015
- case 'Collection':
1016
- results = results.concat(['<' + t + ' rdf:parseType="Collection">', collectionXMLTree(st.object, stats), '</' + t + '>']);
1017
- break;
1021
+ case 'Collection':
1022
+ results = results.concat(['<' + t + ' rdf:parseType="Collection">', collectionXMLTree(st.object, stats), '</' + t + '>']);
1023
+ break;
1018
1024
 
1019
- default:
1020
- throw new Error("Can't serialize object of type " + st.object.termType + ' into XML');
1021
- } // switch
1025
+ default:
1026
+ throw new Error("Can't serialize object of type " + st.object.termType + ' into XML');
1027
+ } // switch
1022
1028
 
1023
- }
1029
+ }
1024
1030
 
1025
- var tag = type ? qname(type) : 'rdf:Description';
1026
- var attrs = '';
1031
+ var tag = type ? qname(type) : 'rdf:Description';
1032
+ var attrs = '';
1027
1033
 
1028
- if (subject.termType === 'BlankNode') {
1029
- if (!stats.incoming[subject] || stats.incoming[subject].length !== 1) {
1030
- // not an anonymous bnode
1031
- attrs = ' rdf:nodeID="' + subject.toNT().slice(2) + '"';
1034
+ if (subject.termType === 'BlankNode') {
1035
+ if (!stats.incoming[subject] || stats.incoming[subject].length !== 1) {
1036
+ // not an anonymous bnode
1037
+ attrs = ' rdf:nodeID="' + subject.toNT().slice(2) + '"';
1038
+ }
1039
+ } else {
1040
+ attrs = ' rdf:about="' + relURI(subject) + '"';
1032
1041
  }
1033
- } else {
1034
- attrs = ' rdf:about="' + relURI(subject) + '"';
1042
+
1043
+ return ['<' + tag + attrs + '>'].concat([results]).concat(['</' + tag + '>']);
1035
1044
  }
1036
1045
 
1037
- return ['<' + tag + attrs + '>'].concat([results]).concat(['</' + tag + '>']);
1038
- }
1046
+ var subjectXMLTree = subjectXMLTreeMethod.bind(this);
1039
1047
 
1040
- var subjectXMLTree = subjectXMLTreeMethod.bind(this);
1048
+ function collectionXMLTree(subject, stats) {
1049
+ var res = [];
1041
1050
 
1042
- function collectionXMLTree(subject, stats) {
1043
- var res = [];
1051
+ for (var i = 0; i < subject.elements.length; i++) {
1052
+ res.push(subjectXMLTree(subject.elements[i], stats));
1053
+ }
1044
1054
 
1045
- for (var i = 0; i < subject.elements.length; i++) {
1046
- res.push(subjectXMLTree(subject.elements[i], stats));
1047
- }
1055
+ return res;
1056
+ } // The property tree for a single subject or anonymos node
1048
1057
 
1049
- return res;
1050
- } // The property tree for a single subject or anonymos node
1051
1058
 
1059
+ function propertyXMLTreeMethod(subject, stats) {
1060
+ var results = [];
1061
+ var sts = stats.subjects[this.toStr(subject)]; // relevant statements
1052
1062
 
1053
- function propertyXMLTreeMethod(subject, stats) {
1054
- var results = [];
1055
- var sts = stats.subjects[this.toStr(subject)]; // relevant statements
1063
+ if (!sts) return results; // No relevant statements
1056
1064
 
1057
- if (!sts) return results; // No relevant statements
1065
+ sts.sort();
1058
1066
 
1059
- sts.sort();
1067
+ for (var i = 0; i < sts.length; i++) {
1068
+ var st = sts[i];
1060
1069
 
1061
- for (var i = 0; i < sts.length; i++) {
1062
- var st = sts[i];
1070
+ switch (st.object.termType) {
1071
+ case 'BlankNode':
1072
+ if (stats.rootsHash[st.object.toNT()]) {
1073
+ // This bnode has been done as a root -- no content here @@ what bout first time
1074
+ results = results.concat(['<' + qname(st.predicate) + ' rdf:nodeID="' + st.object.toNT().slice(2) + '">', '</' + qname(st.predicate) + '>']);
1075
+ } else {
1076
+ results = results.concat(['<' + qname(st.predicate) + ' rdf:parseType="Resource">', propertyXMLTree(st.object, stats), '</' + qname(st.predicate) + '>']);
1077
+ }
1063
1078
 
1064
- switch (st.object.termType) {
1065
- case 'BlankNode':
1066
- if (stats.rootsHash[st.object.toNT()]) {
1067
- // This bnode has been done as a root -- no content here @@ what bout first time
1068
- results = results.concat(['<' + qname(st.predicate) + ' rdf:nodeID="' + st.object.toNT().slice(2) + '">', '</' + qname(st.predicate) + '>']);
1069
- } else {
1070
- results = results.concat(['<' + qname(st.predicate) + ' rdf:parseType="Resource">', propertyXMLTree(st.object, stats), '</' + qname(st.predicate) + '>']);
1071
- }
1079
+ break;
1072
1080
 
1073
- break;
1081
+ case 'NamedNode':
1082
+ results = results.concat(['<' + qname(st.predicate) + ' rdf:resource="' + relURI(st.object) + '"/>']);
1083
+ break;
1074
1084
 
1075
- case 'NamedNode':
1076
- results = results.concat(['<' + qname(st.predicate) + ' rdf:resource="' + relURI(st.object) + '"/>']);
1077
- break;
1085
+ case 'Literal':
1086
+ results = results.concat(['<' + qname(st.predicate) + (st.object.datatype.equals(this.xsd.string) ? '' : ' rdf:datatype="' + escapeForXML(st.object.datatype.value) + '"') + (st.object.language ? ' xml:lang="' + st.object.language + '"' : '') + '>' + escapeForXML(st.object.value) + '</' + qname(st.predicate) + '>']);
1087
+ break;
1078
1088
 
1079
- case 'Literal':
1080
- results = results.concat(['<' + qname(st.predicate) + (st.object.datatype.equals(this.xsd.string) ? '' : ' rdf:datatype="' + escapeForXML(st.object.datatype.value) + '"') + (st.object.language ? ' xml:lang="' + st.object.language + '"' : '') + '>' + escapeForXML(st.object.value) + '</' + qname(st.predicate) + '>']);
1081
- break;
1089
+ case 'Collection':
1090
+ results = results.concat(['<' + qname(st.predicate) + ' rdf:parseType="Collection">', collectionXMLTree(st.object, stats), '</' + qname(st.predicate) + '>']);
1091
+ break;
1082
1092
 
1083
- case 'Collection':
1084
- results = results.concat(['<' + qname(st.predicate) + ' rdf:parseType="Collection">', collectionXMLTree(st.object, stats), '</' + qname(st.predicate) + '>']);
1085
- break;
1093
+ default:
1094
+ throw new Error("Can't serialize object of type " + st.object.termType + ' into XML');
1095
+ } // switch
1086
1096
 
1087
- default:
1088
- throw new Error("Can't serialize object of type " + st.object.termType + ' into XML');
1089
- } // switch
1097
+ }
1090
1098
 
1099
+ return results;
1091
1100
  }
1092
1101
 
1093
- return results;
1094
- }
1102
+ var propertyXMLTree = propertyXMLTreeMethod.bind(this);
1095
1103
 
1096
- var propertyXMLTree = propertyXMLTreeMethod.bind(this);
1104
+ function qnameMethod(term) {
1105
+ var uri = term.uri;
1106
+ var j = uri.indexOf('#');
1097
1107
 
1098
- function qnameMethod(term) {
1099
- var uri = term.uri;
1100
- var j = uri.indexOf('#');
1108
+ if (j < 0 && this.flags.indexOf('/') < 0) {
1109
+ j = uri.lastIndexOf('/');
1110
+ }
1101
1111
 
1102
- if (j < 0 && this.flags.indexOf('/') < 0) {
1103
- j = uri.lastIndexOf('/');
1104
- }
1112
+ if (j < 0) throw new Error('Cannot make qname out of <' + uri + '>');
1105
1113
 
1106
- if (j < 0) throw new Error('Cannot make qname out of <' + uri + '>');
1114
+ for (var k = j + 1; k < uri.length; k++) {
1115
+ if (this._notNameChars.indexOf(uri[k]) >= 0) {
1116
+ throw new Error('Invalid character "' + uri[k] + '" cannot be in XML qname for URI: ' + uri);
1117
+ }
1118
+ }
1107
1119
 
1108
- for (var k = j + 1; k < uri.length; k++) {
1109
- if (__Serializer.prototype._notNameChars.indexOf(uri[k]) >= 0) {
1110
- throw new Error('Invalid character "' + uri[k] + '" cannot be in XML qname for URI: ' + uri);
1120
+ var localid = uri.slice(j + 1);
1121
+ var namesp = uri.slice(0, j + 1);
1122
+
1123
+ if (this.defaultNamespace && this.defaultNamespace === namesp && this.flags.indexOf('d') < 0) {
1124
+ // d -> suppress default
1125
+ return localid;
1111
1126
  }
1127
+
1128
+ var prefix = this.prefixes[namesp];
1129
+ if (!prefix) prefix = this.makeUpPrefix(namesp);
1130
+ namespaceCounts[namesp] = true;
1131
+ return prefix + ':' + localid;
1112
1132
  }
1113
1133
 
1114
- var localid = uri.slice(j + 1);
1115
- var namesp = uri.slice(0, j + 1);
1134
+ var qname = qnameMethod.bind(this); // Body of toXML:
1116
1135
 
1117
- if (this.defaultNamespace && this.defaultNamespace === namesp && this.flags.indexOf('d') < 0) {
1118
- // d -> suppress default
1119
- return localid;
1136
+ var tree = statementListToXMLTree(sts);
1137
+ var str = '<rdf:RDF';
1138
+
1139
+ if (this.defaultNamespace) {
1140
+ str += ' xmlns="' + escapeForXML(this.defaultNamespace) + '"';
1120
1141
  }
1121
1142
 
1122
- var prefix = this.prefixes[namesp];
1123
- if (!prefix) prefix = this.makeUpPrefix(namesp);
1124
- namespaceCounts[namesp] = true;
1125
- return prefix + ':' + localid;
1126
- }
1143
+ for (var ns in namespaceCounts) {
1144
+ if (!namespaceCounts.hasOwnProperty(ns)) continue; // Rel uris in xml ns is not strictly allowed in the XMLNS spec but needed in practice often
1127
1145
 
1128
- var qname = qnameMethod.bind(this); // Body of toXML:
1146
+ var ns2 = this.base && this.flags.includes('z') ? Util.uri.refTo(this.base, ns) : ns;
1147
+ str += '\n xmlns:' + this.prefixes[ns] + '="' + escapeForXML(ns2) + '"';
1148
+ }
1129
1149
 
1130
- var tree = statementListToXMLTree(sts);
1131
- var str = '<rdf:RDF';
1150
+ str += '>';
1151
+ var tree2 = [str, tree, '</rdf:RDF>']; // @@ namespace declrations
1132
1152
 
1133
- if (this.defaultNamespace) {
1134
- str += ' xmlns="' + escapeForXML(this.defaultNamespace) + '"';
1135
- }
1153
+ return XMLtreeToString(tree2, -1);
1154
+ } // End @@ body
1136
1155
 
1137
- for (var ns in namespaceCounts) {
1138
- if (!namespaceCounts.hasOwnProperty(ns)) continue; // Rel uris in xml ns is not strictly allowed in the XMLNS spec but needed in practice often
1156
+ }]);
1157
+ return Serializer;
1158
+ }(); // String escaping utilities
1139
1159
 
1140
- var ns2 = this.base && this.flags.includes('z') ? Util.uri.refTo(this.base, ns) : ns;
1141
- str += '\n xmlns:' + this.prefixes[ns] + '="' + escapeForXML(ns2) + '"';
1142
- }
1143
1160
 
1144
- str += '>';
1145
- var tree2 = [str, tree, '</rdf:RDF>']; // @@ namespace declrations
1161
+ exports.Serializer = Serializer;
1146
1162
 
1147
- return XMLtreeToString(tree2, -1);
1148
- }; // End @@ body
1163
+ function hexify(str) {
1164
+ // also used in parser
1165
+ return encodeURI(str);
1166
+ }
1149
1167
 
1168
+ function backslashUify(str) {
1169
+ var res = '';
1170
+ var k;
1150
1171
 
1151
- var Serializer = function Serializer(store) {
1152
- return new __Serializer(store);
1153
- };
1172
+ for (var i = 0; i < str.length; i++) {
1173
+ k = str.charCodeAt(i);
1154
1174
 
1155
- return Serializer;
1156
- }();
1175
+ if (k > 65535) {
1176
+ res += "\\U" + ('00000000' + k.toString(16)).slice(-8); // convert to upper?
1177
+ } else if (k > 126) {
1178
+ res += "\\u" + ('0000' + k.toString(16)).slice(-4);
1179
+ } else {
1180
+ res += str[i];
1181
+ }
1182
+ }
1157
1183
 
1158
- exports.default = _default;
1184
+ return res;
1185
+ }