Mercurial > code > home > repos > streamed-graph
comparison src/layout/json_ld_quads.ts @ 106:2468f2227d22
make src/layout/ and src/render/ separation
author | drewp@bigasterisk.com |
---|---|
date | Sun, 13 Mar 2022 22:00:30 -0700 |
parents | src/json_ld_quads.ts@77aa2e9234ed |
children | 5a1a79f54779 |
comparison
equal
deleted
inserted
replaced
105:4bb8c7775c83 | 106:2468f2227d22 |
---|---|
1 import * as jsonld from "jsonld"; | |
2 import { JsonLd, JsonLdArray } from "jsonld/jsonld-spec"; | |
3 import { Quad, NamedNode, DataFactory } from "n3"; | |
4 const { literal, quad, namedNode } = DataFactory; | |
5 | |
6 // const { rdf } = ns; | |
7 const rdf = { type: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }; | |
8 | |
9 function parseObjNode(obj: any) { | |
10 if (obj["@id"]) { | |
11 return namedNode(obj["@id"]); | |
12 } else { | |
13 if (obj["@value"] === undefined) { | |
14 throw new Error("no @id or @value"); | |
15 } | |
16 return literal(obj["@value"], obj["@language"] || obj["@type"]); | |
17 } | |
18 } | |
19 | |
20 function parsePred( | |
21 onQuad: (q: Quad) => void, | |
22 graphNode: NamedNode, | |
23 subjNode: NamedNode, | |
24 predKey: string, | |
25 subjGroup: any | |
26 ) { | |
27 let predNode: NamedNode; | |
28 if (predKey === "@type") { | |
29 subjGroup["@type"].forEach((aType: string) => { | |
30 onQuad(quad(subjNode, namedNode(rdf.type), namedNode(aType), graphNode)); | |
31 }); | |
32 return; | |
33 } | |
34 predNode = namedNode(predKey); | |
35 subjGroup[predKey].forEach(function(obj: any) { | |
36 const objNode = parseObjNode(obj); | |
37 onQuad(quad(subjNode, predNode, objNode, graphNode)); | |
38 }); | |
39 } | |
40 function parseSubj( | |
41 onQuad: (q: Quad) => void, | |
42 graphNode: NamedNode, | |
43 subjGroup: { [predOrId: string]: any } | |
44 ) { | |
45 const subjNode = namedNode(subjGroup["@id"]); | |
46 for (let predKey in subjGroup) { | |
47 if (predKey === "@id") { | |
48 continue; | |
49 } | |
50 parsePred(onQuad, graphNode, subjNode, predKey, subjGroup); | |
51 } | |
52 } | |
53 function parseGraph(onQuad: (q: Quad) => void, g: JsonLd) { | |
54 var graph = (g as { "@id": string })["@id"]; | |
55 var graphNode = namedNode(graph); | |
56 (g as { "@graph": JsonLdArray })["@graph"].forEach(subj => { | |
57 parseSubj(onQuad, graphNode, subj); | |
58 }); | |
59 } | |
60 | |
61 export async function eachJsonLdQuad( | |
62 jsonLdObj: object, | |
63 onQuad: (q: Quad) => void | |
64 ) { | |
65 const expanded = await jsonld.expand(jsonLdObj); | |
66 (expanded as JsonLdArray).forEach((g: JsonLd) => parseGraph(onQuad, g)); | |
67 } |