rdflib
Version:
an RDF library for node.js. Suitable for client and server side.
53 lines • 1.74 kB
JavaScript
export default (function () {
return {
parseJSON: function (data, source, store) {
var subject, predicate, object;
var bnodes = {};
var why = store.sym(source);
for (var x in data) {
if (x.indexOf('_:') === 0) {
if (bnodes[x]) {
subject = bnodes[x];
} else {
subject = store.bnode(x);
bnodes[x] = subject;
}
} else {
subject = store.sym(x);
}
var preds = data[x];
for (var y in preds) {
var objects = preds[y];
predicate = store.sym(y);
for (var z in objects) {
var obj = objects[z];
if (obj.type === 'uri') {
object = store.sym(obj.value);
store.add(subject, predicate, object, why);
} else if (obj.type === 'BlankNode') {
if (bnodes[obj.value]) {
object = bnodes[obj.value];
} else {
object = store.bnode(obj.value);
bnodes[obj.value] = object;
}
store.add(subject, predicate, object, why);
} else if (obj.type === 'Literal') {
// var datatype
if (obj.datatype) {
object = store.literal(obj.value, undefined, store.sym(obj.datatype));
} else if (obj.lang) {
object = store.literal(obj.value, obj.lang);
} else {
object = store.literal(obj.value);
}
store.add(subject, predicate, object, why);
} else {
throw new Error('error: unexpected termtype: ' + z.type);
}
}
}
}
}
};
})();