From 781a94082bbfdf951242e7339593a996c8bb388d Mon Sep 17 00:00:00 2001 From: Ben De Meester Date: Wed, 31 Aug 2016 09:03:16 +0200 Subject: [PATCH] support for blank nodes --- index.js | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/index.js b/index.js index d653fec..f3a8e82 100644 --- a/index.js +++ b/index.js @@ -24,20 +24,30 @@ function serializeXML(graph, done) { }) var subjectNodes = Object.create(null) + var blankNodes = Object.create(null) graph.forEach(serializeTriple) function serializeTriple(triple) { - if(triple.subject.interfaceName !== 'NamedNode') - throw new Error('triple subject must be a NamedNode') + var subject, + subjectNode; + if (triple.subject.interfaceName === 'BlankNode') { + subject = triple.subject.nominalValue - var subject = triple.subject.nominalValue + subjectNode = blankNodes[subject] - var subjectNode = subjectNodes[subject] + if (subjectNode === undefined) + subjectNode = blankNodes[subject] = [] + } + else { + subject = triple.subject.nominalValue + + subjectNode = subjectNodes[subject] - if(subjectNode === undefined) - subjectNode = subjectNodes[subject] = [] + if (subjectNode === undefined) + subjectNode = subjectNodes[subject] = [] + } if(triple.predicate.interfaceName !== 'NamedNode') throw new Error('predicate must be a NamedNode') @@ -60,6 +70,13 @@ function serializeXML(graph, done) { } } + case 'BlankNode': + return { + _attr: { + 'rdf:nodeID': "_:" + object.nominalValue + } + } + case 'Literal': if(object.datatype.interfaceName !== 'NamedNode') @@ -140,6 +157,19 @@ function serializeXML(graph, done) { ].concat(subjectNodes[subject]) } }) + ).concat( + Object.keys(blankNodes) + .map(function (subject) { + return { + 'rdf:Description': [ + { + _attr: { + 'rdf:nodeID': "_:" + subject + } + } + ].concat(blankNodes[subject]) + } + }) ) }, { declaration: true, @@ -160,7 +190,7 @@ XMLSerializer.prototype.serialize = serializeXML var instance = new XMLSerializer() for (var property in instance) { - XMLSerializer[property] = instance[property] + XMLSerializer[property] = instance[property] } module.exports = XMLSerializer