Mercurial > code > home > repos > streamed-graph
comparison src/json_ld_quads.ts @ 8:6fefd287aff9
closer- element now holds a changing graph, but can't draw it yet
author | drewp@bigasterisk.com |
---|---|
date | Thu, 05 Dec 2019 01:32:13 -0800 |
parents | a7ba8627a7b6 |
children | b9f451791f3a |
comparison
equal
deleted
inserted
replaced
7:daf08d794660 | 8:6fefd287aff9 |
---|---|
1 import { Quad, Node } from "./rdf_types"; | |
2 import * as jsonld from "jsonld"; | 1 import * as jsonld from "jsonld"; |
2 import { DataFactory, Quad } from 'n3'; | |
3 const { namedNode, literal, quad } = DataFactory; | |
4 import ns from 'n3/src/IRIs'; | |
5 const {rdf} = ns; | |
3 | 6 |
4 function quadFromExpandedStatement(rdfEnv: any, subj: any, pred: string, obj: any, graphNode: any): Quad { | 7 export function eachJsonLdQuad(jsonLdObj: object, onQuad: (q: Quad) => void, done: () => void) { |
5 return { | |
6 subject: rdfEnv.createNamedNode(subj['@id']), | |
7 predicate: rdfEnv.createNamedNode(pred), | |
8 object: (obj['@id'] ? rdfEnv.createNamedNode(obj['@id']) : | |
9 rdfEnv.createLiteral(obj['@value'], obj['@language'], obj['@type'])), | |
10 graph: graphNode, | |
11 }; | |
12 } | |
13 function quadFromTypeStatement(rdfEnv: any, subj: any, obj: any, graphNode: any): Quad { | |
14 return { | |
15 subject: rdfEnv.createNamedNode(subj['@id']), | |
16 predicate: rdfEnv.createNamedNode('rdf:type'), | |
17 object: rdfEnv.createNamedNode(obj), | |
18 graph: graphNode, | |
19 }; | |
20 } | |
21 | |
22 export function eachJsonLdQuad(rdfEnv: any, jsonLdObj: object, onQuad: (Quad) => void, done: () => void) { | |
23 jsonld.expand(jsonLdObj, function onExpand(err, expanded) { | 8 jsonld.expand(jsonLdObj, function onExpand(err, expanded) { |
24 if (err) { | 9 if (err) { |
25 throw new Error(); | 10 throw new Error(); |
26 } | 11 } |
27 (expanded as [object]).forEach(function (g) { | 12 (expanded as [object]).forEach(function (g) { |
28 var graph = g['@id']; | 13 var graph = g['@id']; |
29 var graphNode = rdfEnv.createNamedNode(graph) as Node; | 14 var graphNode = namedNode(graph); |
30 g['@graph'].forEach(function (subj) { | 15 g['@graph'].forEach(function (subj) { |
16 const subjNode = namedNode(subj['@id']); | |
31 for (let pred in subj) { | 17 for (let pred in subj) { |
32 if (pred.match(/^[^@]/)) { | 18 if (pred === '@id') { |
33 subj[pred].forEach(function (obj) { | 19 continue; |
34 onQuad(quadFromExpandedStatement(rdfEnv, subj, pred, obj, graphNode)); | |
35 }); | |
36 } | 20 } |
37 else { | 21 let predNode; |
38 if (pred === "@type") { | 22 if (pred === "@type") { |
39 subj[pred].forEach((obj) => { | 23 predNode = namedNode(rdf.type); |
40 onQuad(quadFromTypeStatement(rdfEnv, subj, obj, graphNode)); | 24 } else { |
41 }); | 25 predNode = namedNode(pred['@id']); |
42 } | |
43 } | 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 }); | |
44 } | 32 } |
45 }); | 33 }); |
46 }); | 34 }); |
47 done(); | 35 done(); |
48 }); | 36 }); |