diff --git a/CHANGELOG.md b/CHANGELOG.md index cb35e27..56f8d44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -70,6 +70,7 @@ - Use a pre-computed map of replacement values. - Performance difference depends on the number of replacements. The [rdf-canon][] escaping test showed up to 15% improvement. +- Support generalized RDF `BlankNode` predicate during N-Quads serialization. ### Fixed - Disable native lib tests in a browser. diff --git a/lib/NQuads.js b/lib/NQuads.js index 6923a77..17498a8 100644 --- a/lib/NQuads.js +++ b/lib/NQuads.js @@ -240,8 +240,12 @@ module.exports = class NQuads { nquad += `_:${s.value}`; } - // predicate can only be NamedNode - nquad += ` <${_iriEscape(p.value)}> `; + // predicate normally a NamedNode, can be a BlankNode in generalized RDF + if(p.termType === TYPE_NAMED_NODE) { + nquad += ` <${_iriEscape(p.value)}> `; + } else { + nquad += ` _:${p.value} `; + } // object is NamedNode, BlankNode, or Literal if(o.termType === TYPE_NAMED_NODE) {