rdflib
Version:
an RDF library for node.js. Suitable for client and server side.
54 lines (53 loc) • 1.77 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)
}
}
}
}
}
}
})()