view src/json_ld_quads.ts @ 9:26d3e4860adc

working on porting graph_view to n3.js. also working on making tests run
author drewp@bigasterisk.com
date Fri, 06 Dec 2019 09:19:43 -0800
parents 6fefd287aff9
children b9f451791f3a
line wrap: on
line source

import * as jsonld from "jsonld";
import { DataFactory, Quad } from 'n3';
const { namedNode, literal, quad } = DataFactory;
import ns from 'n3/src/IRIs';
const {rdf} = ns;

export function eachJsonLdQuad(jsonLdObj: object, onQuad: (q: Quad) => void, done: () => void) {
    jsonld.expand(jsonLdObj, function onExpand(err, expanded) {
        if (err) {
            throw new Error();
        }
        (expanded as [object]).forEach(function (g) {
            var graph = g['@id'];
            var graphNode = namedNode(graph);
            g['@graph'].forEach(function (subj) {
                const subjNode = namedNode(subj['@id']);
                for (let pred in subj) {
                    if (pred === '@id') {
                        continue;
                    }
                    let predNode;
                    if (pred === "@type") {
                        predNode = namedNode(rdf.type);
                    } else {
                        predNode = namedNode(pred['@id']);
                    }
                    subj[pred].forEach(function (obj) {
                        const objNode = (obj['@id'] ? namedNode(obj['@id']) :
                            literal(obj['@value'], obj['@language'] || obj['@type']));
                        onQuad(quad(subjNode, predNode, objNode, graphNode));
                    });
                }
            });
        });
        done();
    });
}
;