changeset 46:709e305dbd4f

bug on rdf:type stmts, i think, so I refactored a bunch and now maybe it's more testable and typeable
author drewp@bigasterisk.com
date Sun, 05 Jan 2020 23:54:00 -0800
parents 3e414d575d96
children 7d17a02b5ae0
files src/json_ld_quads.ts src/streamed-graph.css
diffstat 2 files changed, 50 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/src/json_ld_quads.ts	Fri Jan 03 23:42:04 2020 -0800
+++ b/src/json_ld_quads.ts	Sun Jan 05 23:54:00 2020 -0800
@@ -6,46 +6,67 @@
 // const { rdf } = ns;
 const rdf = { type: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" };
 
-function _emitQuad(
+function parseObjNode(obj: any) {
+  if (obj["@id"]) {
+    return namedNode(obj["@id"]);
+  } else {
+    if (obj["@value"] === undefined) {
+      throw new Error("no @id or @value");
+    }
+    return literal(obj["@value"], obj["@language"] || obj["@type"]);
+  }
+}
+
+function parsePred(
   onQuad: (q: Quad) => void,
+  graphNode: NamedNode,
   subjNode: NamedNode,
-  pred: string,
-  subj: any,
-  graphNode: NamedNode
+  predKey: string,
+  subjGroup: any
 ) {
   let predNode: NamedNode;
-  if (pred === "@type") {
-    predNode = namedNode(rdf.type);
-  } else {
-    predNode = namedNode(pred);
+  if (predKey === "@type") {
+    onQuad(
+      quad(
+        subjNode,
+        namedNode(rdf.type),
+        namedNode(subjGroup["@type"]),
+        graphNode
+      )
+    );
+    return;
   }
-  subj[pred as string].forEach(function(obj: any) {
-    const objNode = obj["@id"]
-      ? namedNode(obj["@id"])
-      : literal(obj["@value"], obj["@language"] || obj["@type"]);
+  predNode = namedNode(predKey);
+  subjGroup[predKey].forEach(function(obj: any) {
+    const objNode = parseObjNode(obj);
     onQuad(quad(subjNode, predNode, objNode, graphNode));
   });
 }
+function parseSubj(
+  onQuad: (q: Quad) => void,
+  graphNode: NamedNode,
+  subjGroup: { [predOrId: string]: any }
+) {
+  const subjNode = namedNode(subjGroup["@id"]);
+  for (let predKey in subjGroup) {
+    if (predKey === "@id") {
+      continue;
+    }
+    parsePred(onQuad, graphNode, subjNode, predKey, subjGroup);
+  }
+}
+function parseGraph(onQuad: (q: Quad) => void, g: JsonLd) {
+  var graph = (g as { "@id": string })["@id"];
+  var graphNode = namedNode(graph);
+  (g as { "@graph": JsonLdArray })["@graph"].forEach(subj => {
+    parseSubj(onQuad, graphNode, subj);
+  });
+}
 
 export async function eachJsonLdQuad(
   jsonLdObj: object,
   onQuad: (q: Quad) => void
 ) {
   const expanded = await jsonld.expand(jsonLdObj);
-
-  (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;
-    }) {
-      const subjNode = namedNode(subj["@id"]);
-      for (let pred in subj) {
-        if (pred === "@id") {
-          continue;
-        }
-        _emitQuad(onQuad, subjNode, pred, subj, graphNode);
-      }
-    });
-  });
+  (expanded as JsonLdArray).forEach((g: JsonLd) => parseGraph(onQuad, g));
 }
--- a/src/streamed-graph.css	Fri Jan 03 23:42:04 2020 -0800
+++ b/src/streamed-graph.css	Sun Jan 05 23:54:00 2020 -0800
@@ -16,7 +16,7 @@
 div#graphView {
 }
 div a {
-  color: #007;
+  color: rgb(66, 66, 200);
 }
 .expander {
   display: inline-block;