comparison src/json_ld_quads.ts @ 3:a7ba8627a7b6

still trying to make imports work. add other files too
author drewp@bigasterisk.com
date Wed, 04 Dec 2019 00:09:15 -0800
parents
children 6fefd287aff9
comparison
equal deleted inserted replaced
2:6cd3aaf431b6 3:a7ba8627a7b6
1 import { Quad, Node } from "./rdf_types";
2 import * as jsonld from "jsonld";
3
4 function quadFromExpandedStatement(rdfEnv: any, subj: any, pred: string, obj: any, graphNode: any): Quad {
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) {
24 if (err) {
25 throw new Error();
26 }
27 (expanded as [object]).forEach(function (g) {
28 var graph = g['@id'];
29 var graphNode = rdfEnv.createNamedNode(graph) as Node;
30 g['@graph'].forEach(function (subj) {
31 for (let pred in subj) {
32 if (pred.match(/^[^@]/)) {
33 subj[pred].forEach(function (obj) {
34 onQuad(quadFromExpandedStatement(rdfEnv, subj, pred, obj, graphNode));
35 });
36 }
37 else {
38 if (pred === "@type") {
39 subj[pred].forEach((obj) => {
40 onQuad(quadFromTypeStatement(rdfEnv, subj, obj, graphNode));
41 });
42 }
43 }
44 }
45 });
46 });
47 done();
48 });
49 }
50 ;