Skip to content

Instantly share code, notes, and snippets.

@rescribet
Last active October 21, 2019 08:36
Show Gist options
  • Save rescribet/7ffc207be2ae0c18bc9fdef03a5b0ad3 to your computer and use it in GitHub Desktop.
Save rescribet/7ffc207be2ae0c18bc9fdef03a5b0ad3 to your computer and use it in GitHub Desktop.
JSON-LD parser connector for rdflib when not needing to support { termType: 'Collection' }
function convertTerm (kb, term) {
switch (term.termType) {
case 'BlankNode':
return kb.rdfFactory.blankNode(term.value);
case 'NamedNode':
return kb.rdfFactory.namedNode(term.value);
case 'Literal':
return kb.rdfFactory.literal(term.value, term.language || convertTerm(kb, term.datatype));
case 'DefaultGraph':
return kb.rdfFactory.defaultGraph();
default:
throw new Error(`Unknown term type '${term.termType}'`)
}
}
function parse(str, kb, base, callback) {
const baseString = base && Object.prototype.hasOwnProperty.call(base, 'termType')
? base.value
: base
return jsonld
.toRDF(JSON.parse(str), { base: baseString })
.then((dataset) => dataset.map((quad) => kb.rdfFactory.quad(
convertTerm(kb, quad.subject),
convertTerm(kb, quad.predicate),
convertTerm(kb, quad.object),
convertTerm(kb, quad.graph),
)))
.then(callback)
.catch(callback);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment