Mercurial > code > home > repos > streamed-graph
view src/json_ld_quads.ts @ 36:8b4dc9e87b56
reindent to 2-spaces with prettier
author | drewp@bigasterisk.com |
---|---|
date | Sat, 28 Dec 2019 02:24:55 -0800 |
parents | 29d8ed02a275 |
children | 709e305dbd4f |
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; // const { rdf } = ns; const rdf = { type: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }; 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 ) { const expanded = await jsonld.expand(jsonLdObj); (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; }) { const subjNode = namedNode(subj["@id"]); for (let pred in subj) { if (pred === "@id") { continue; } _emitQuad(onQuad, subjNode, pred, subj, graphNode); } }); }); }