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 });