UNPKG

@bahulneel/rdflib

Version:

an RDF library for node.js. Suitable for client and server side.

112 lines (89 loc) 3.35 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.jsonldObjectToTerm = jsonldObjectToTerm; exports.default = jsonldParser; var _jsonld = _interopRequireDefault(require("jsonld")); var _utils = require("./utils"); /** * Parses json-ld formatted JS objects to a rdf Term. * @param kb - The DataFactory to use. * @param obj - The json-ld object to process. * @return {Literal|NamedNode|BlankNode|Collection} */ function jsonldObjectToTerm(kb, obj) { if (typeof obj === 'string') { return kb.rdfFactory.literal(obj); } if (Object.prototype.hasOwnProperty.call(obj, '@list')) { if (kb.rdfFactory.supports["COLLECTIONS"] === true) { return listToCollection(kb, obj['@list']); } return listToStatements(kb, obj); } if (Object.prototype.hasOwnProperty.call(obj, '@id')) { return kb.rdfFactory.namedNode(obj['@id']); } if (Object.prototype.hasOwnProperty.call(obj, '@language')) { return kb.rdfFactory.literal(obj['@value'], obj['@language']); } if (Object.prototype.hasOwnProperty.call(obj, '@type')) { return kb.rdfFactory.literal(obj['@value'], kb.rdfFactory.namedNode(obj['@type'])); } if (Object.prototype.hasOwnProperty.call(obj, '@value')) { return kb.rdfFactory.literal(obj['@value']); } return kb.rdfFactory.literal(obj); } /** * Adds the statements in a json-ld list object to {kb}. */ function listToStatements(kb, obj) { var listId = obj['@id'] ? kb.rdfFactory.namedNode(obj['@id']) : kb.rdfFactory.blankNode(); var items = obj['@list'].map(function (listItem) { return jsonldObjectToTerm(kb, listItem); }); var statements = (0, _utils.arrayToStatements)(kb.rdfFactory, listId, items); kb.addAll(statements); return listId; } function listToCollection(kb, obj) { if (!Array.isArray(obj)) { throw new TypeError("Object must be an array"); } return kb.rdfFactory.collection(obj.map(function (o) { return jsonldObjectToTerm(kb, o); })); } /** * Takes a json-ld formatted string {str} and adds its statements to {kb}. * * Ensure that {kb.rdfFactory} is a DataFactory. */ function jsonldParser(str, kb, base, callback) { var baseString = base && Object.prototype.hasOwnProperty.call(base, 'termType') ? base.value : base; return _jsonld.default.flatten(JSON.parse(str), null, { base: baseString }).then(function (flattened) { return flattened.reduce(function (store, flatResource) { var id = flatResource['@id'] ? kb.rdfFactory.namedNode(flatResource['@id']) : kb.rdfFactory.blankNode(); for (var _i = 0, _Object$keys = Object.keys(flatResource); _i < _Object$keys.length; _i++) { var property = _Object$keys[_i]; if (property === '@id') { continue; } var value = flatResource[property]; if (Array.isArray(value)) { for (var i = 0; i < value.length; i++) { kb.addStatement(kb.rdfFactory.quad(id, kb.rdfFactory.namedNode(property), jsonldObjectToTerm(kb, value[i]))); } } else { kb.addStatement(kb.rdfFactory.quad(id, kb.rdfFactory.namedNode(property), jsonldObjectToTerm(kb, value))); } } return kb; }, kb); }).then(callback).catch(callback); }