Mercurial > code > home > repos > streamed-graph
comparison src/json_ld_quads.ts @ 13:b9f451791f3a
refactor and update jsonldquads. WIP
author | drewp@localhost |
---|---|
date | Fri, 06 Dec 2019 20:33:36 -0800 |
parents | 6fefd287aff9 |
children | 7ca4ff2088c3 |
comparison
equal
deleted
inserted
replaced
12:091a03abd6cb | 13:b9f451791f3a |
---|---|
1 import * as jsonld from "jsonld"; | 1 import * as jsonld from "jsonld"; |
2 import { DataFactory, Quad } from 'n3'; | 2 import { Quad, NamedNode, Literal, N3Store } from 'n3'; |
3 const { namedNode, literal, quad } = DataFactory; | 3 |
4 | |
5 | |
6 import { DataFactory } from 'n3'; | |
7 const { literal, quad, namedNode } = DataFactory; | |
8 | |
4 import ns from 'n3/src/IRIs'; | 9 import ns from 'n3/src/IRIs'; |
5 const {rdf} = ns; | 10 const { rdf } = ns; |
6 | 11 |
7 export function eachJsonLdQuad(jsonLdObj: object, onQuad: (q: Quad) => void, done: () => void) { | 12 function _emitQuad( |
8 jsonld.expand(jsonLdObj, function onExpand(err, expanded) { | 13 onQuad: (q: Quad) => void, |
9 if (err) { | 14 subjNode: NamedNode, |
10 throw new Error(); | 15 pred: string | { '@id': string }, |
11 } | 16 subj: any, |
12 (expanded as [object]).forEach(function (g) { | 17 graphNode: NamedNode) { |
13 var graph = g['@id']; | 18 let predNode: NamedNode; |
14 var graphNode = namedNode(graph); | 19 if (pred === "@type") { |
15 g['@graph'].forEach(function (subj) { | 20 predNode = namedNode(rdf.type); |
16 const subjNode = namedNode(subj['@id']); | 21 } |
17 for (let pred in subj) { | 22 else { |
18 if (pred === '@id') { | 23 predNode = namedNode(pred['@id']); |
19 continue; | 24 } |
25 subj[pred as string].forEach(function (obj: any) { | |
26 const objNode = (obj['@id'] ? namedNode(obj['@id']) : | |
27 literal(obj['@value'], | |
28 obj['@language'] || obj['@type'])); | |
29 onQuad(quad(subjNode, predNode, objNode, graphNode)); | |
30 }); | |
31 } | |
32 | |
33 export async function eachJsonLdQuad(jsonLdObj: object, onQuad: (q: Quad) => void) { | |
34 | |
35 return new Promise(function (resolve, reject) { | |
36 | |
37 jsonld.expand(jsonLdObj, function onExpand(err, expanded) { | |
38 if (err) { | |
39 reject(err); | |
40 } | |
41 (expanded as [object]).forEach(function (g) { | |
42 var graph = g['@id']; | |
43 var graphNode = namedNode(graph); | |
44 g['@graph'].forEach(function (subj) { | |
45 const subjNode = namedNode(subj['@id']); | |
46 for (let pred in subj) { | |
47 if (pred === '@id') { | |
48 continue; | |
49 } 2 | |
50 _emitQuad(onQuad, subjNode, pred, subj, graphNode); | |
20 } | 51 } |
21 let predNode; | 52 }); |
22 if (pred === "@type") { | |
23 predNode = namedNode(rdf.type); | |
24 } else { | |
25 predNode = namedNode(pred['@id']); | |
26 } | |
27 subj[pred].forEach(function (obj) { | |
28 const objNode = (obj['@id'] ? namedNode(obj['@id']) : | |
29 literal(obj['@value'], obj['@language'] || obj['@type'])); | |
30 onQuad(quad(subjNode, predNode, objNode, graphNode)); | |
31 }); | |
32 } | |
33 }); | 53 }); |
54 resolve(); | |
34 }); | 55 }); |
35 done(); | |
36 }); | 56 }); |
37 } | 57 } |
38 ; | 58 ; |