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 ;