Mercurial > code > home > repos > streamed-graph
view src/json_ld_quads.ts @ 20:9ec3cbc8791a
build is running, but no tests, and lots of code is disabled
author | drewp@bigasterisk.com |
---|---|
date | Fri, 13 Dec 2019 01:18:00 -0800 |
parents | 7ca4ff2088c3 |
children | e90d9021c6a0 |
line wrap: on
line source
import * as jsonld from "jsonld"; import { JsonLd, JsonLdArray } from 'jsonld/jsonld-spec'; import { Quad, NamedNode, DataFactory } from 'n3'; const { literal, quad, namedNode } = DataFactory; // import {} from 'n3'; // const { rdf } = ns; const rdf = { type: "http://rdf/type/todo" }; function _emitQuad( onQuad: (q: Quad) => void, subjNode: NamedNode, pred: string, subj: any, graphNode: NamedNode) { let predNode: NamedNode; if (pred === "@type") { predNode = namedNode(rdf.type); } else { predNode = namedNode(pred); } 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: JsonLd) { if (err) { reject(err); } (expanded as JsonLdArray).forEach(function (g: JsonLd) { var graph = (g as { '@id': string })['@id']; var graphNode = namedNode(graph); (g as { '@graph': JsonLdArray })['@graph'].forEach(function (subj: { [predOrId: string]: any; }) { console.log('process subj', subj) const subjNode = namedNode(subj['@id']); for (let pred in subj) { if (pred === '@id') { continue; } console.log('emit with', pred); _emitQuad(onQuad, subjNode, pred, subj, graphNode); } }); }); resolve(); }); }); } ;