# HG changeset patch # User drewp@localhost # Date 1575693216 28800 # Node ID b9f451791f3a8969bd9bdd296cf6a37345d6b3da # Parent 091a03abd6cb015aaeb23d770527f8ab342cfdf3 refactor and update jsonldquads. WIP diff -r 091a03abd6cb -r b9f451791f3a src/json_ld_quads.ts --- a/src/json_ld_quads.ts Fri Dec 06 20:33:01 2019 -0800 +++ b/src/json_ld_quads.ts Fri Dec 06 20:33:36 2019 -0800 @@ -1,38 +1,58 @@ import * as jsonld from "jsonld"; -import { DataFactory, Quad } from 'n3'; -const { namedNode, literal, quad } = DataFactory; +import { Quad, NamedNode, Literal, N3Store } from 'n3'; + + + +import { DataFactory } from 'n3'; +const { literal, quad, namedNode } = DataFactory; + import ns from 'n3/src/IRIs'; -const {rdf} = ns; +const { rdf } = ns; -export function eachJsonLdQuad(jsonLdObj: object, onQuad: (q: Quad) => void, done: () => void) { - jsonld.expand(jsonLdObj, function onExpand(err, expanded) { - if (err) { - throw new Error(); - } - (expanded as [object]).forEach(function (g) { - var graph = g['@id']; - var graphNode = namedNode(graph); - g['@graph'].forEach(function (subj) { - const subjNode = namedNode(subj['@id']); - for (let pred in subj) { - if (pred === '@id') { - continue; +function _emitQuad( + onQuad: (q: Quad) => void, + subjNode: NamedNode, + pred: string | { '@id': string }, + subj: any, + graphNode: NamedNode) { + let predNode: NamedNode; + if (pred === "@type") { + predNode = namedNode(rdf.type); + } + else { + predNode = namedNode(pred['@id']); + } + subj[pred as string].forEach(function (obj: any) { + const objNode = (obj['@id'] ? namedNode(obj['@id']) : + literal(obj['@value'], + obj['@language'] || obj['@type'])); + onQuad(quad(subjNode, predNode, objNode, graphNode)); + }); +} + +export async function eachJsonLdQuad(jsonLdObj: object, onQuad: (q: Quad) => void) { + + return new Promise(function (resolve, reject) { + + jsonld.expand(jsonLdObj, function onExpand(err, expanded) { + if (err) { + reject(err); + } + (expanded as [object]).forEach(function (g) { + var graph = g['@id']; + var graphNode = namedNode(graph); + g['@graph'].forEach(function (subj) { + const subjNode = namedNode(subj['@id']); + for (let pred in subj) { + if (pred === '@id') { + continue; + } 2 + _emitQuad(onQuad, subjNode, pred, subj, graphNode); } - let predNode; - if (pred === "@type") { - predNode = namedNode(rdf.type); - } else { - predNode = namedNode(pred['@id']); - } - subj[pred].forEach(function (obj) { - const objNode = (obj['@id'] ? namedNode(obj['@id']) : - literal(obj['@value'], obj['@language'] || obj['@type'])); - onQuad(quad(subjNode, predNode, objNode, graphNode)); - }); - } + }); }); + resolve(); }); - done(); }); } ;