rdflib 2.3.9 → 2.4.0

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/esm/fetcher.js CHANGED
@@ -977,27 +977,27 @@ export default class Fetcher {
977
977
  linkData(originalUri, rel, uri, why, reverse) {
978
978
  if (!uri) return;
979
979
  let kb = this.store;
980
- let predicate;
981
980
  // See http://www.w3.org/TR/powder-dr/#httplink for describedby 2008-12-10
982
981
  let obj = kb.rdfFactory.namedNode(Uri.join(uri, originalUri.value));
982
+ let predicates;
983
983
  if (rel === 'alternate' || rel === 'seeAlso' || rel === 'meta' || rel === 'describedby') {
984
984
  if (obj.value === originalUri.value) {
985
985
  return;
986
986
  }
987
- predicate = this.ns.rdfs('seeAlso');
987
+ // Also emit the IANA relation predicate triple (issue #741)
988
+ predicates = [kb.rdfFactory.namedNode(this.ianaLinkRelation(rel)), this.ns.rdfs('seeAlso')];
988
989
  } else if (rel === 'type') {
989
- predicate = kb.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type');
990
+ predicates = [kb.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')];
990
991
  } else {
991
992
  // See https://www.iana.org/assignments/link-relations/link-relations.xml
992
993
  // Alas not yet in RDF yet for each predicate
993
994
  // encode space in e.g. rel="shortcut icon"
994
- predicate = kb.rdfFactory.namedNode(Uri.join(encodeURIComponent(rel), 'http://www.iana.org/assignments/link-relations/'));
995
- }
996
- if (reverse) {
997
- kb.add(obj, predicate, originalUri, why);
998
- } else {
999
- kb.add(originalUri, predicate, obj, why);
995
+ predicates = [kb.rdfFactory.namedNode(this.ianaLinkRelation(rel))];
1000
996
  }
997
+ kb.addAll(predicates.map(predicate => reverse ? kb.rdfFactory.quad(obj, predicate, originalUri, why) : kb.rdfFactory.quad(originalUri, predicate, obj, why)));
998
+ }
999
+ ianaLinkRelation(rel) {
1000
+ return Uri.join(encodeURIComponent(rel), 'http://www.iana.org/assignments/link-relations/');
1001
1001
  }
1002
1002
  parseLinkHeader(linkHeader, originalUri, reqNode) {
1003
1003
  if (!linkHeader) {
package/lib/fetcher.d.ts CHANGED
@@ -340,6 +340,7 @@ export default class Fetcher implements CallbackifyInterface {
340
340
  original: Quad_Subject;
341
341
  } & Options, errorMessage: string, statusCode: StatusValues, response?: ExtendedResponse): Promise<FetchError>;
342
342
  linkData(originalUri: NamedNode, rel: string, uri: string, why: Quad_Graph, reverse?: boolean): void;
343
+ private ianaLinkRelation;
343
344
  parseLinkHeader(linkHeader: string, originalUri: NamedNode, reqNode: Quad_Graph): void;
344
345
  doneFetch(options: {
345
346
  req: Quad_Subject;
package/lib/fetcher.js CHANGED
@@ -986,27 +986,27 @@ class Fetcher {
986
986
  linkData(originalUri, rel, uri, why, reverse) {
987
987
  if (!uri) return;
988
988
  let kb = this.store;
989
- let predicate;
990
989
  // See http://www.w3.org/TR/powder-dr/#httplink for describedby 2008-12-10
991
990
  let obj = kb.rdfFactory.namedNode(Uri.join(uri, originalUri.value));
991
+ let predicates;
992
992
  if (rel === 'alternate' || rel === 'seeAlso' || rel === 'meta' || rel === 'describedby') {
993
993
  if (obj.value === originalUri.value) {
994
994
  return;
995
995
  }
996
- predicate = this.ns.rdfs('seeAlso');
996
+ // Also emit the IANA relation predicate triple (issue #741)
997
+ predicates = [kb.rdfFactory.namedNode(this.ianaLinkRelation(rel)), this.ns.rdfs('seeAlso')];
997
998
  } else if (rel === 'type') {
998
- predicate = kb.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type');
999
+ predicates = [kb.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')];
999
1000
  } else {
1000
1001
  // See https://www.iana.org/assignments/link-relations/link-relations.xml
1001
1002
  // Alas not yet in RDF yet for each predicate
1002
1003
  // encode space in e.g. rel="shortcut icon"
1003
- predicate = kb.rdfFactory.namedNode(Uri.join(encodeURIComponent(rel), 'http://www.iana.org/assignments/link-relations/'));
1004
- }
1005
- if (reverse) {
1006
- kb.add(obj, predicate, originalUri, why);
1007
- } else {
1008
- kb.add(originalUri, predicate, obj, why);
1004
+ predicates = [kb.rdfFactory.namedNode(this.ianaLinkRelation(rel))];
1009
1005
  }
1006
+ kb.addAll(predicates.map(predicate => reverse ? kb.rdfFactory.quad(obj, predicate, originalUri, why) : kb.rdfFactory.quad(originalUri, predicate, obj, why)));
1007
+ }
1008
+ ianaLinkRelation(rel) {
1009
+ return Uri.join(encodeURIComponent(rel), 'http://www.iana.org/assignments/link-relations/');
1010
1010
  }
1011
1011
  parseLinkHeader(linkHeader, originalUri, reqNode) {
1012
1012
  if (!linkHeader) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rdflib",
3
3
  "description": "an RDF library for node.js. Suitable for client and server side.",
4
- "version": "2.3.9",
4
+ "version": "2.4.0",
5
5
  "private": false,
6
6
  "browserslist": [
7
7
  "> 0.5%"
package/src/fetcher.ts CHANGED
@@ -1346,30 +1346,40 @@ export default class Fetcher implements CallbackifyInterface {
1346
1346
  ) {
1347
1347
  if (!uri) return
1348
1348
  let kb = this.store
1349
- let predicate
1350
1349
  // See http://www.w3.org/TR/powder-dr/#httplink for describedby 2008-12-10
1351
1350
  let obj = kb.rdfFactory.namedNode(Uri.join(uri, originalUri.value))
1352
1351
 
1352
+ let predicates: Quad_Predicate[]
1353
1353
  if (rel === 'alternate' || rel === 'seeAlso' || rel === 'meta' ||
1354
1354
  rel === 'describedby') {
1355
1355
  if (obj.value === originalUri.value) { return }
1356
- predicate = this.ns.rdfs('seeAlso')
1356
+ // Also emit the IANA relation predicate triple (issue #741)
1357
+ predicates = [
1358
+ kb.rdfFactory.namedNode(this.ianaLinkRelation(rel)),
1359
+ this.ns.rdfs('seeAlso')
1360
+ ]
1357
1361
  } else if (rel === 'type') {
1358
- predicate = kb.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')
1362
+ predicates = [kb.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')]
1359
1363
  } else {
1360
1364
  // See https://www.iana.org/assignments/link-relations/link-relations.xml
1361
1365
  // Alas not yet in RDF yet for each predicate
1362
1366
  // encode space in e.g. rel="shortcut icon"
1363
- predicate = kb.rdfFactory.namedNode(
1364
- Uri.join(encodeURIComponent(rel),
1365
- 'http://www.iana.org/assignments/link-relations/')
1367
+ predicates = [kb.rdfFactory.namedNode(
1368
+ this.ianaLinkRelation(rel)
1369
+ )]
1370
+ }
1371
+ kb.addAll(
1372
+ predicates.map(predicate =>
1373
+ reverse
1374
+ ? kb.rdfFactory.quad(obj, predicate, originalUri, why)
1375
+ : kb.rdfFactory.quad(originalUri, predicate, obj, why)
1366
1376
  )
1367
- }
1368
- if (reverse) {
1369
- kb.add(obj, predicate, originalUri, why)
1370
- } else {
1371
- kb.add(originalUri, predicate, obj, why)
1372
- }
1377
+ )
1378
+ }
1379
+
1380
+ private ianaLinkRelation(rel: string) {
1381
+ return Uri.join(encodeURIComponent(rel),
1382
+ 'http://www.iana.org/assignments/link-relations/');
1373
1383
  }
1374
1384
 
1375
1385
  parseLinkHeader (