@lblod/graph-rdfa-processor 2.1.5 → 2.1.7
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/bug6.html +940 -0
- package/bug7.html +1956 -0
- package/dist/rdfa-graph.js +4 -4
- package/dist/uri-resolver.js +22 -20
- package/package.json +1 -1
- package/src/rdfa-graph.js +11 -2
- package/src/uri-resolver.js +139 -78
- package/test/test.js +2 -2
package/dist/rdfa-graph.js
CHANGED
@@ -544,21 +544,21 @@ function () {
|
|
544
544
|
}
|
545
545
|
}
|
546
546
|
|
547
|
-
s += '"""' + value.replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\").replace(/"""/g, '\\"\\"\\"') + '"""^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>';
|
547
|
+
s += '"""' + value.replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\").replace(/\\\\\\/g, "\\\\\\\\\\\\").replace(/"""/g, '\\"\\"\\"') + '"""^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>';
|
548
548
|
} else if (this.objects[i].type == "http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML") {
|
549
549
|
// We can use innerHTML as a shortcut from the parentNode if the list is not empty
|
550
550
|
if (this.objects[i].value.length == 0) {
|
551
551
|
s += '""""""^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML>';
|
552
552
|
} else {
|
553
|
-
s += '"""' + this.objects[i].value[0].parentNode.innerHTML.replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\").replace(/"""/g, '\\"\\"\\"') + '"""^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML>';
|
553
|
+
s += '"""' + this.objects[i].value[0].parentNode.innerHTML.replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\").replace(/\\\\\\/g, "\\\\\\\\\\\\").replace(/"""/g, '\\"\\"\\"') + '"""^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML>';
|
554
554
|
}
|
555
555
|
} else {
|
556
556
|
var l = this.objects[i].value.toString();
|
557
557
|
|
558
558
|
if (l.indexOf("\n") >= 0 || l.indexOf("\r") >= 0) {
|
559
|
-
s += '"""' + l.replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\").replace(/"/g, '\\"') + '"""';
|
559
|
+
s += '"""' + l.replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\").replace(/\\\\\\/g, "\\\\\\\\\\\\").replace(/"/g, '\\"') + '"""';
|
560
560
|
} else {
|
561
|
-
s += '"' + l.replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\").replace(/"/g, '\\"') + '"';
|
561
|
+
s += '"' + l.replace(/\\\\\\/g, "\\\\\\\\\\\\").replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\").replace(/\\\\\\/g, "\\\\\\\\\\\\").replace(/"/g, '\\"') + '"';
|
562
562
|
}
|
563
563
|
|
564
564
|
if (this.objects[i].type != "http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral") {
|
package/dist/uri-resolver.js
CHANGED
@@ -21,6 +21,8 @@ function () {
|
|
21
21
|
_createClass(URIResolver, [{
|
22
22
|
key: "parseURI",
|
23
23
|
value: function parseURI(uri) {
|
24
|
+
uri = uri.replace("\n", ""); // bugfix: sometimes there is a \n in the uri...
|
25
|
+
|
24
26
|
var match = URIResolver.SCHEME.exec(uri);
|
25
27
|
|
26
28
|
if (!match) {
|
@@ -33,7 +35,7 @@ function () {
|
|
33
35
|
parsed.scheme = match[0].substring(0, match[0].length - 1);
|
34
36
|
parsed.schemeSpecificPart = parsed.spec.substring(match[0].length);
|
35
37
|
|
36
|
-
if (parsed.schemeSpecificPart.charAt(0) ==
|
38
|
+
if (parsed.schemeSpecificPart.charAt(0) == "/" && parsed.schemeSpecificPart.charAt(1) == "/") {
|
37
39
|
this.parseGeneric(parsed);
|
38
40
|
} else {
|
39
41
|
parsed.isGeneric = false;
|
@@ -103,8 +105,8 @@ function () {
|
|
103
105
|
return this.spec;
|
104
106
|
}
|
105
107
|
|
106
|
-
if (href.charAt(0) ==
|
107
|
-
var lastHash = this.spec.lastIndexOf(
|
108
|
+
if (href.charAt(0) == "#") {
|
109
|
+
var lastHash = this.spec.lastIndexOf("#");
|
108
110
|
return lastHash < 0 ? this.spec + href : this.spec.substring(0, lastHash) + href;
|
109
111
|
}
|
110
112
|
|
@@ -112,15 +114,15 @@ function () {
|
|
112
114
|
throw new Error("Cannot resolve uri against non-generic URI: " + this.spec);
|
113
115
|
}
|
114
116
|
|
115
|
-
var colon = href.indexOf(
|
117
|
+
var colon = href.indexOf(":");
|
116
118
|
|
117
|
-
if (href.charAt(0) ==
|
119
|
+
if (href.charAt(0) == "/") {
|
118
120
|
return this.scheme + "://" + this.authority + href;
|
119
|
-
} else if (href.charAt(0) ==
|
120
|
-
if (this.path.charAt(this.path.length - 1) ==
|
121
|
+
} else if (href.charAt(0) == "." && href.charAt(1) == "/") {
|
122
|
+
if (this.path.charAt(this.path.length - 1) == "/") {
|
121
123
|
return this.scheme + "://" + this.authority + this.path + href.substring(2);
|
122
124
|
} else {
|
123
|
-
var last = this.path.lastIndexOf(
|
125
|
+
var last = this.path.lastIndexOf("/");
|
124
126
|
return this.scheme + "://" + this.authority + this.path.substring(0, last) + href.substring(1);
|
125
127
|
}
|
126
128
|
} else if (URIResolver.SCHEME.test(href)) {
|
@@ -128,10 +130,10 @@ function () {
|
|
128
130
|
} else if (href.charAt(0) == "?") {
|
129
131
|
return this.scheme + "://" + this.authority + this.path + href;
|
130
132
|
} else {
|
131
|
-
if (this.path.charAt(this.path.length - 1) ==
|
133
|
+
if (this.path.charAt(this.path.length - 1) == "/") {
|
132
134
|
return this.scheme + "://" + this.authority + this.path + href;
|
133
135
|
} else {
|
134
|
-
var last = this.path.lastIndexOf(
|
136
|
+
var last = this.path.lastIndexOf("/");
|
135
137
|
return this.scheme + "://" + this.authority + this.path.substring(0, last + 1) + href;
|
136
138
|
}
|
137
139
|
}
|
@@ -159,7 +161,7 @@ function () {
|
|
159
161
|
for (; i < this.segments.length && i < otherURI.segments.length; i++) {
|
160
162
|
if (this.segments[i] != otherURI.segments[i]) {
|
161
163
|
//alert(this.path+" different from "+otherURI.path+" at '"+this.segments[i]+"' vs '"+otherURI.segments[i]+"'");
|
162
|
-
var offset = otherURI.path.charAt(otherURI.path.length - 1) ==
|
164
|
+
var offset = otherURI.path.charAt(otherURI.path.length - 1) == "/" ? 0 : -1;
|
163
165
|
var relative = "";
|
164
166
|
|
165
167
|
for (var j = i; j < otherURI.segments.length + offset; j++) {
|
@@ -174,7 +176,7 @@ function () {
|
|
174
176
|
}
|
175
177
|
}
|
176
178
|
|
177
|
-
if (this.path.charAt(this.path.length - 1) ==
|
179
|
+
if (this.path.charAt(this.path.length - 1) == "/") {
|
178
180
|
relative += "/";
|
179
181
|
}
|
180
182
|
|
@@ -195,7 +197,7 @@ function () {
|
|
195
197
|
}
|
196
198
|
}
|
197
199
|
|
198
|
-
if (this.path.charAt(this.path.length - 1) ==
|
200
|
+
if (this.path.charAt(this.path.length - 1) == "/") {
|
199
201
|
relative += "/";
|
200
202
|
}
|
201
203
|
|
@@ -210,7 +212,7 @@ function () {
|
|
210
212
|
}, {
|
211
213
|
key: "parseGeneric",
|
212
214
|
value: function parseGeneric(parsed) {
|
213
|
-
if (parsed.schemeSpecificPart.charAt(0) !=
|
215
|
+
if (parsed.schemeSpecificPart.charAt(0) != "/" || parsed.schemeSpecificPart.charAt(1) != "/") {
|
214
216
|
throw new Error("Generic URI values should start with '//':" + parsed.spec);
|
215
217
|
}
|
216
218
|
|
@@ -218,14 +220,14 @@ function () {
|
|
218
220
|
var pathStart = work.indexOf("/");
|
219
221
|
parsed.authority = pathStart < 0 ? work : work.substring(0, pathStart);
|
220
222
|
parsed.path = pathStart < 0 ? "" : work.substring(pathStart);
|
221
|
-
var hash = parsed.path.indexOf(
|
223
|
+
var hash = parsed.path.indexOf("#");
|
222
224
|
|
223
225
|
if (hash >= 0) {
|
224
226
|
parsed.fragment = parsed.path.substring(hash + 1);
|
225
227
|
parsed.path = parsed.path.substring(0, hash);
|
226
228
|
}
|
227
229
|
|
228
|
-
var questionMark = parsed.path.indexOf(
|
230
|
+
var questionMark = parsed.path.indexOf("?");
|
229
231
|
|
230
232
|
if (questionMark >= 0) {
|
231
233
|
parsed.query = parsed.path.substring(questionMark + 1);
|
@@ -237,15 +239,15 @@ function () {
|
|
237
239
|
} else {
|
238
240
|
parsed.segments = parsed.path.split(/\//);
|
239
241
|
|
240
|
-
if (parsed.segments.length > 0 && parsed.segments[0] ==
|
242
|
+
if (parsed.segments.length > 0 && parsed.segments[0] == "" && parsed.path.length > 1 && parsed.path.charAt(1) != "/") {
|
241
243
|
// empty segment at the start, remove it
|
242
244
|
parsed.segments.shift();
|
243
245
|
}
|
244
246
|
|
245
|
-
if (parsed.segments.length > 0 && parsed.path.length > 0 && parsed.path.charAt(parsed.path.length - 1) ==
|
247
|
+
if (parsed.segments.length > 0 && parsed.path.length > 0 && parsed.path.charAt(parsed.path.length - 1) == "/" && parsed.segments[parsed.segments.length - 1] == "") {
|
246
248
|
// we may have an empty the end
|
247
249
|
// check to see if it is legimate
|
248
|
-
if (parsed.path.length > 1 && parsed.path.charAt(parsed.path.length - 2) !=
|
250
|
+
if (parsed.path.length > 1 && parsed.path.charAt(parsed.path.length - 2) != "/") {
|
249
251
|
parsed.segments.pop();
|
250
252
|
}
|
251
253
|
} // check for non-escaped characters
|
@@ -256,7 +258,7 @@ function () {
|
|
256
258
|
|
257
259
|
for (var j = 0; j < check.length; j++) {
|
258
260
|
if (check[j].length > 0) {
|
259
|
-
throw new Error("
|
261
|
+
throw new Error("Unescaped character " + check[j].charAt(0) + " (" + check[j].charCodeAt(0) + ") in URI " + parsed.spec);
|
260
262
|
}
|
261
263
|
}
|
262
264
|
}
|
package/package.json
CHANGED
package/src/rdfa-graph.js
CHANGED
@@ -461,6 +461,7 @@ export class RDFaPredicate {
|
|
461
461
|
'"""' +
|
462
462
|
value
|
463
463
|
.replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\")
|
464
|
+
.replace(/\\\\\\/g, "\\\\\\\\\\\\")
|
464
465
|
.replace(/"""/g, '\\"\\"\\"') +
|
465
466
|
'"""^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>';
|
466
467
|
} else if (
|
@@ -475,6 +476,7 @@ export class RDFaPredicate {
|
|
475
476
|
'"""' +
|
476
477
|
this.objects[i].value[0].parentNode.innerHTML
|
477
478
|
.replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\")
|
479
|
+
.replace(/\\\\\\/g, "\\\\\\\\\\\\")
|
478
480
|
.replace(/"""/g, '\\"\\"\\"') +
|
479
481
|
'"""^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML>';
|
480
482
|
}
|
@@ -484,12 +486,19 @@ export class RDFaPredicate {
|
|
484
486
|
if (l.indexOf("\n") >= 0 || l.indexOf("\r") >= 0) {
|
485
487
|
s +=
|
486
488
|
'"""' +
|
487
|
-
l
|
489
|
+
l
|
490
|
+
.replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\")
|
491
|
+
.replace(/\\\\\\/g, "\\\\\\\\\\\\")
|
492
|
+
.replace(/"/g, '\\"') +
|
488
493
|
'"""';
|
489
494
|
} else {
|
490
495
|
s +=
|
491
496
|
'"' +
|
492
|
-
l
|
497
|
+
l
|
498
|
+
.replace(/\\\\\\/g, "\\\\\\\\\\\\")
|
499
|
+
.replace(/([^\\]|^)(\\)(?!\\)/g, "$1\\\\")
|
500
|
+
.replace(/\\\\\\/g, "\\\\\\\\\\\\")
|
501
|
+
.replace(/"/g, '\\"') +
|
493
502
|
'"';
|
494
503
|
}
|
495
504
|
if (
|
package/src/uri-resolver.js
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
export default class URIResolver {
|
2
|
-
|
3
2
|
parseURI(uri) {
|
3
|
+
uri = uri.replace("\n", ""); // bugfix: sometimes there is a \n in the uri...
|
4
4
|
var match = URIResolver.SCHEME.exec(uri);
|
5
5
|
if (!match) {
|
6
6
|
throw new Error("Bad URI value, no scheme: " + uri);
|
7
7
|
}
|
8
8
|
var parsed = { spec: uri };
|
9
|
-
parsed.scheme = match[0].substring(0,match[0].length-1);
|
9
|
+
parsed.scheme = match[0].substring(0, match[0].length - 1);
|
10
10
|
parsed.schemeSpecificPart = parsed.spec.substring(match[0].length);
|
11
|
-
if (
|
11
|
+
if (
|
12
|
+
parsed.schemeSpecificPart.charAt(0) == "/" &&
|
13
|
+
parsed.schemeSpecificPart.charAt(1) == "/"
|
14
|
+
) {
|
12
15
|
this.parseGeneric(parsed);
|
13
16
|
} else {
|
14
17
|
parsed.isGeneric = false;
|
@@ -17,38 +20,42 @@ export default class URIResolver {
|
|
17
20
|
if (!this.isGeneric) {
|
18
21
|
return;
|
19
22
|
}
|
20
|
-
if (this.segments.length==0) {
|
23
|
+
if (this.segments.length == 0) {
|
21
24
|
return;
|
22
25
|
}
|
23
26
|
// edge case of ending in "/."
|
24
|
-
if (
|
25
|
-
this.path
|
26
|
-
this.
|
27
|
-
|
27
|
+
if (
|
28
|
+
this.path.length > 1 &&
|
29
|
+
this.path.substring(this.path.length - 2) == "/."
|
30
|
+
) {
|
31
|
+
this.path = this.path.substring(0, this.path.length - 1);
|
32
|
+
this.segments.splice(this.segments.length - 1, 1);
|
33
|
+
this.schemeSpecificPart = "//" + this.authority + this.path;
|
28
34
|
if (typeof this.query != "undefined") {
|
29
35
|
this.schemeSpecificPart += "?" + this.query;
|
30
36
|
}
|
31
37
|
if (typeof this.fragment != "undefined") {
|
32
38
|
this.schemeSpecificPart += "#" + this.fragment;
|
33
39
|
}
|
34
|
-
this.spec = this.scheme+":"+this.schemeSpecificPart;
|
40
|
+
this.spec = this.scheme + ":" + this.schemeSpecificPart;
|
35
41
|
return;
|
36
42
|
}
|
37
|
-
var end = this.path.charAt(this.path.length-1);
|
38
|
-
if (end!="/") {
|
43
|
+
var end = this.path.charAt(this.path.length - 1);
|
44
|
+
if (end != "/") {
|
39
45
|
end = "";
|
40
46
|
}
|
41
|
-
for (var i=0; i < this.segments.length; i++) {
|
42
|
-
if (i>0 && this.segments[i]=="..") {
|
43
|
-
this.segments.splice(i-1,2);
|
47
|
+
for (var i = 0; i < this.segments.length; i++) {
|
48
|
+
if (i > 0 && this.segments[i] == "..") {
|
49
|
+
this.segments.splice(i - 1, 2);
|
44
50
|
i -= 2;
|
45
51
|
}
|
46
|
-
if (this.segments[i]==".") {
|
47
|
-
this.segments.splice(i,1);
|
52
|
+
if (this.segments[i] == ".") {
|
53
|
+
this.segments.splice(i, 1);
|
48
54
|
i--;
|
49
55
|
}
|
50
56
|
}
|
51
|
-
this.path =
|
57
|
+
this.path =
|
58
|
+
this.segments.length == 0 ? "/" : "/" + this.segments.join("/") + end;
|
52
59
|
this.schemeSpecificPart = "//" + this.authority + this.path;
|
53
60
|
if (typeof this.query != "undefined") {
|
54
61
|
this.schemeSpecificPart += "?" + this.query;
|
@@ -56,148 +63,202 @@ export default class URIResolver {
|
|
56
63
|
if (typeof this.fragment != "undefined") {
|
57
64
|
this.schemeSpecificPart += "#" + this.fragment;
|
58
65
|
}
|
59
|
-
this.spec = this.scheme+":"+this.schemeSpecificPart;
|
60
|
-
}
|
66
|
+
this.spec = this.scheme + ":" + this.schemeSpecificPart;
|
67
|
+
};
|
61
68
|
|
62
69
|
parsed.resolve = function(href) {
|
63
70
|
if (!href) {
|
64
71
|
return this.spec;
|
65
72
|
}
|
66
|
-
if (href.charAt(0)==
|
67
|
-
var lastHash = this.spec.lastIndexOf(
|
68
|
-
return lastHash<
|
73
|
+
if (href.charAt(0) == "#") {
|
74
|
+
var lastHash = this.spec.lastIndexOf("#");
|
75
|
+
return lastHash < 0
|
76
|
+
? this.spec + href
|
77
|
+
: this.spec.substring(0, lastHash) + href;
|
69
78
|
}
|
70
79
|
if (!this.isGeneric) {
|
71
|
-
throw new Error(
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
80
|
+
throw new Error(
|
81
|
+
"Cannot resolve uri against non-generic URI: " + this.spec,
|
82
|
+
);
|
83
|
+
}
|
84
|
+
var colon = href.indexOf(":");
|
85
|
+
if (href.charAt(0) == "/") {
|
86
|
+
return this.scheme + "://" + this.authority + href;
|
87
|
+
} else if (href.charAt(0) == "." && href.charAt(1) == "/") {
|
88
|
+
if (this.path.charAt(this.path.length - 1) == "/") {
|
89
|
+
return (
|
90
|
+
this.scheme + "://" + this.authority + this.path + href.substring(2)
|
91
|
+
);
|
79
92
|
} else {
|
80
|
-
var last = this.path.lastIndexOf(
|
81
|
-
return
|
93
|
+
var last = this.path.lastIndexOf("/");
|
94
|
+
return (
|
95
|
+
this.scheme +
|
96
|
+
"://" +
|
97
|
+
this.authority +
|
98
|
+
this.path.substring(0, last) +
|
99
|
+
href.substring(1)
|
100
|
+
);
|
82
101
|
}
|
83
102
|
} else if (URIResolver.SCHEME.test(href)) {
|
84
103
|
return href;
|
85
|
-
} else if (href.charAt(0)=="?") {
|
86
|
-
return this.scheme+"://"+this.authority+this.path+href;
|
104
|
+
} else if (href.charAt(0) == "?") {
|
105
|
+
return this.scheme + "://" + this.authority + this.path + href;
|
87
106
|
} else {
|
88
|
-
if (this.path.charAt(this.path.length-1)==
|
89
|
-
return this.scheme+"://"+this.authority+this.path+href;
|
107
|
+
if (this.path.charAt(this.path.length - 1) == "/") {
|
108
|
+
return this.scheme + "://" + this.authority + this.path + href;
|
90
109
|
} else {
|
91
|
-
var last = this.path.lastIndexOf(
|
92
|
-
return
|
110
|
+
var last = this.path.lastIndexOf("/");
|
111
|
+
return (
|
112
|
+
this.scheme +
|
113
|
+
"://" +
|
114
|
+
this.authority +
|
115
|
+
this.path.substring(0, last + 1) +
|
116
|
+
href
|
117
|
+
);
|
93
118
|
}
|
94
119
|
}
|
95
120
|
};
|
96
121
|
|
97
122
|
parsed.relativeTo = function(otherURI) {
|
98
|
-
if (otherURI.scheme!=this.scheme) {
|
123
|
+
if (otherURI.scheme != this.scheme) {
|
99
124
|
return this.spec;
|
100
125
|
}
|
101
126
|
if (!this.isGeneric) {
|
102
|
-
throw new Error(
|
127
|
+
throw new Error(
|
128
|
+
"A non generic URI cannot be made relative: " + this.spec,
|
129
|
+
);
|
103
130
|
}
|
104
131
|
if (!otherURI.isGeneric) {
|
105
|
-
throw new Error(
|
132
|
+
throw new Error(
|
133
|
+
"Cannot make a relative URI against a non-generic URI: " +
|
134
|
+
otherURI.spec,
|
135
|
+
);
|
106
136
|
}
|
107
|
-
if (otherURI.authority!=this.authority) {
|
137
|
+
if (otherURI.authority != this.authority) {
|
108
138
|
return this.spec;
|
109
139
|
}
|
110
|
-
var i=0;
|
140
|
+
var i = 0;
|
111
141
|
for (; i < this.segments.length && i < otherURI.segments.length; i++) {
|
112
|
-
if (this.segments[i]!=otherURI.segments[i]) {
|
142
|
+
if (this.segments[i] != otherURI.segments[i]) {
|
113
143
|
//alert(this.path+" different from "+otherURI.path+" at '"+this.segments[i]+"' vs '"+otherURI.segments[i]+"'");
|
114
|
-
var offset =
|
144
|
+
var offset =
|
145
|
+
otherURI.path.charAt(otherURI.path.length - 1) == "/" ? 0 : -1;
|
115
146
|
var relative = "";
|
116
|
-
for (var j=i; j < otherURI.segments.length+offset; j++) {
|
147
|
+
for (var j = i; j < otherURI.segments.length + offset; j++) {
|
117
148
|
relative += "../";
|
118
149
|
}
|
119
|
-
for (var j=i; j < this.segments.length; j++) {
|
150
|
+
for (var j = i; j < this.segments.length; j++) {
|
120
151
|
relative += this.segments[j];
|
121
|
-
if (
|
152
|
+
if (j + 1 < this.segments.length) {
|
122
153
|
relative += "/";
|
123
154
|
}
|
124
155
|
}
|
125
|
-
if (this.path.charAt(this.path.length-1)==
|
156
|
+
if (this.path.charAt(this.path.length - 1) == "/") {
|
126
157
|
relative += "/";
|
127
158
|
}
|
128
159
|
return relative;
|
129
160
|
}
|
130
161
|
}
|
131
|
-
if (this.segments.length==otherURI.segments.length) {
|
132
|
-
return this.hash ? this.hash :
|
162
|
+
if (this.segments.length == otherURI.segments.length) {
|
163
|
+
return this.hash ? this.hash : this.query ? this.query : "";
|
133
164
|
} else if (i < this.segments.length) {
|
134
165
|
var relative = "";
|
135
|
-
for (var j=i; j < this.segments.length; j++) {
|
166
|
+
for (var j = i; j < this.segments.length; j++) {
|
136
167
|
relative += this.segments[j];
|
137
|
-
if (
|
168
|
+
if (j + 1 < this.segments.length) {
|
138
169
|
relative += "/";
|
139
170
|
}
|
140
171
|
}
|
141
|
-
if (this.path.charAt(this.path.length-1)==
|
172
|
+
if (this.path.charAt(this.path.length - 1) == "/") {
|
142
173
|
relative += "/";
|
143
174
|
}
|
144
175
|
return relative;
|
145
176
|
} else {
|
146
|
-
throw new Error(
|
177
|
+
throw new Error(
|
178
|
+
"Cannot calculate a relative URI for " +
|
179
|
+
this.spec +
|
180
|
+
" against " +
|
181
|
+
otherURI.spec,
|
182
|
+
);
|
147
183
|
}
|
148
184
|
};
|
149
185
|
return parsed;
|
150
186
|
}
|
151
187
|
|
152
188
|
parseGeneric(parsed) {
|
153
|
-
if (
|
154
|
-
|
189
|
+
if (
|
190
|
+
parsed.schemeSpecificPart.charAt(0) != "/" ||
|
191
|
+
parsed.schemeSpecificPart.charAt(1) != "/"
|
192
|
+
) {
|
193
|
+
throw new Error(
|
194
|
+
"Generic URI values should start with '//':" + parsed.spec,
|
195
|
+
);
|
155
196
|
}
|
156
197
|
|
157
198
|
var work = parsed.schemeSpecificPart.substring(2);
|
158
199
|
var pathStart = work.indexOf("/");
|
159
|
-
parsed.authority = pathStart<0 ? work : work.substring(0,pathStart);
|
160
|
-
parsed.path = pathStart<0 ? "" : work.substring(pathStart);
|
161
|
-
var hash = parsed.path.indexOf(
|
162
|
-
if (hash>=0) {
|
163
|
-
parsed.fragment = parsed.path.substring(hash+1);
|
164
|
-
parsed.path = parsed.path.substring(0,hash);
|
200
|
+
parsed.authority = pathStart < 0 ? work : work.substring(0, pathStart);
|
201
|
+
parsed.path = pathStart < 0 ? "" : work.substring(pathStart);
|
202
|
+
var hash = parsed.path.indexOf("#");
|
203
|
+
if (hash >= 0) {
|
204
|
+
parsed.fragment = parsed.path.substring(hash + 1);
|
205
|
+
parsed.path = parsed.path.substring(0, hash);
|
165
206
|
}
|
166
|
-
var questionMark = parsed.path.indexOf(
|
167
|
-
if (questionMark>=0) {
|
168
|
-
parsed.query = parsed.path.substring(questionMark+1);
|
169
|
-
parsed.path = parsed.path.substring(0,questionMark);
|
207
|
+
var questionMark = parsed.path.indexOf("?");
|
208
|
+
if (questionMark >= 0) {
|
209
|
+
parsed.query = parsed.path.substring(questionMark + 1);
|
210
|
+
parsed.path = parsed.path.substring(0, questionMark);
|
170
211
|
}
|
171
|
-
if (parsed.path=="/" || parsed.path=="") {
|
212
|
+
if (parsed.path == "/" || parsed.path == "") {
|
172
213
|
parsed.segments = [];
|
173
214
|
} else {
|
174
215
|
parsed.segments = parsed.path.split(/\//);
|
175
|
-
if (
|
216
|
+
if (
|
217
|
+
parsed.segments.length > 0 &&
|
218
|
+
parsed.segments[0] == "" &&
|
219
|
+
parsed.path.length > 1 &&
|
220
|
+
parsed.path.charAt(1) != "/"
|
221
|
+
) {
|
176
222
|
// empty segment at the start, remove it
|
177
223
|
parsed.segments.shift();
|
178
224
|
}
|
179
|
-
if (
|
225
|
+
if (
|
226
|
+
parsed.segments.length > 0 &&
|
227
|
+
parsed.path.length > 0 &&
|
228
|
+
parsed.path.charAt(parsed.path.length - 1) == "/" &&
|
229
|
+
parsed.segments[parsed.segments.length - 1] == ""
|
230
|
+
) {
|
180
231
|
// we may have an empty the end
|
181
232
|
// check to see if it is legimate
|
182
|
-
if (
|
233
|
+
if (
|
234
|
+
parsed.path.length > 1 &&
|
235
|
+
parsed.path.charAt(parsed.path.length - 2) != "/"
|
236
|
+
) {
|
183
237
|
parsed.segments.pop();
|
184
238
|
}
|
185
239
|
}
|
186
240
|
// check for non-escaped characters
|
187
|
-
for (var i=0; i < parsed.segments.length; i++) {
|
188
|
-
var check = parsed.segments[i].split(
|
241
|
+
for (var i = 0; i < parsed.segments.length; i++) {
|
242
|
+
var check = parsed.segments[i].split(
|
243
|
+
/%[A-Za-z0-9][A-Za-z0-9]|[\ud800-\udfff][\ud800-\udfff]|[A-Za-z0-9\-\._~!$&'()*+,;=@:\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+/,
|
244
|
+
);
|
189
245
|
|
190
|
-
for (var j=0; j < check.length; j++) {
|
191
|
-
if (check[j].length>0) {
|
192
|
-
throw new Error(
|
246
|
+
for (var j = 0; j < check.length; j++) {
|
247
|
+
if (check[j].length > 0) {
|
248
|
+
throw new Error(
|
249
|
+
"Unescaped character " +
|
250
|
+
check[j].charAt(0) +
|
251
|
+
" (" +
|
252
|
+
check[j].charCodeAt(0) +
|
253
|
+
") in URI " +
|
254
|
+
parsed.spec,
|
255
|
+
);
|
193
256
|
}
|
194
257
|
}
|
195
258
|
}
|
196
259
|
}
|
197
260
|
parsed.isGeneric = true;
|
198
261
|
}
|
199
|
-
|
200
262
|
}
|
201
263
|
|
202
|
-
|
203
264
|
URIResolver.SCHEME = /^[A-Za-z][A-Za-z0-9\+\-\.]*\:/;
|
package/test/test.js
CHANGED
@@ -23,8 +23,8 @@ describe("getRDFaGraph", function() {
|
|
23
23
|
assert.equal(graph.toString(), expected);
|
24
24
|
});
|
25
25
|
|
26
|
-
it("whatever", () => {
|
27
|
-
let ht = readFileSync("./
|
26
|
+
it.only("whatever", () => {
|
27
|
+
let ht = readFileSync("./bug7.html");
|
28
28
|
let { document } = jsdom(ht).defaultView.window;
|
29
29
|
|
30
30
|
let graph = getRDFaGraph(document, {
|