view src/json_ld_quads.ts @ 20:9ec3cbc8791a

build is running, but no tests, and lots of code is disabled
author drewp@bigasterisk.com
date Fri, 13 Dec 2019 01:18:00 -0800
parents 7ca4ff2088c3
children e90d9021c6a0
line wrap: on
line source

import * as jsonld from "jsonld";
import { JsonLd, JsonLdArray } from 'jsonld/jsonld-spec';
import { Quad, NamedNode, DataFactory } from 'n3';
const { literal, quad, namedNode } = DataFactory;

// import {} from 'n3';
// const { rdf } = ns;
const rdf = { type: "http://rdf/type/todo" };

function _emitQuad(
    onQuad: (q: Quad) => void,
    subjNode: NamedNode,
    pred: string,
    subj: any,
    graphNode: NamedNode) {
    let predNode: NamedNode;
    if (pred === "@type") {
        predNode = namedNode(rdf.type);
    }
    else {
        predNode = namedNode(pred);
    }
    subj[pred as string].forEach(function (obj: any) {
        const objNode = (obj['@id'] ? namedNode(obj['@id']) :
            literal(obj['@value'],
                obj['@language'] || obj['@type']));
        onQuad(quad(subjNode, predNode, objNode, graphNode));
    });
}

export async function eachJsonLdQuad(jsonLdObj: object, onQuad: (q: Quad) => void) {

    return new Promise(function (resolve, reject) {

        jsonld.expand(jsonLdObj, function onExpand(err, expanded: JsonLd) {
            if (err) {
                reject(err);
            }
            (expanded as JsonLdArray).forEach(function (g: JsonLd) {
                var graph = (g as { '@id': string })['@id'];
                var graphNode = namedNode(graph);
                (g as { '@graph': JsonLdArray })['@graph'].forEach(function (subj: { [predOrId: string]: any; }) {
                    console.log('process subj', subj)
                    const subjNode = namedNode(subj['@id']);
                    for (let pred in subj) {
                        if (pred === '@id') {
                            continue;
                        }
                        console.log('emit with', pred);
                        _emitQuad(onQuad, subjNode, pred, subj, graphNode);
                    }
                });
            });
            resolve();
        });
    });
}
;