Mercurial > code > home > repos > streamed-graph
changeset 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 | 1c3a39057b11 |
files | package-lock.json package.json src/graph_view.ts src/streamed-graph.ts src/streamed_graph_client.ts tasks.py |
diffstat | 6 files changed, 97 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/package-lock.json Thu Dec 05 01:32:13 2019 -0800 +++ b/package-lock.json Fri Dec 06 09:19:43 2019 -0800 @@ -217,6 +217,11 @@ "@types/node": "*" } }, + "@types/jasmine": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.5.0.tgz", + "integrity": "sha512-kGCRI9oiCxFS6soGKlyzhMzDydfcPix9PpTkr7h11huxOxhWwP37Tg7DYBaQ18eQTNreZEuLkhpbGSqVNZPnnw==" + }, "@types/jsonld": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@types/jsonld/-/jsonld-1.5.0.tgz", @@ -234,6 +239,16 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, + "@types/n3": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.1.1.tgz", + "integrity": "sha512-Vl18OW3L7L3o++K4qnJQutzEWPTKADFjm/yGYGtpx03neEV/00tCzuyC3hd8pcINne46o0fT6LF1IYCfcR9HDA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/rdf-js": "*" + } + }, "@types/node": { "version": "12.12.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz", @@ -252,6 +267,15 @@ "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", "dev": true }, + "@types/rdf-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/rdf-js/-/rdf-js-2.0.4.tgz", + "integrity": "sha512-JPeHNs5ioxSqv4aVddCw7eEJVA37zz6O15l8ACCT6cDJa/q6pnbCk8Ti30hIJJn4oV6r0lDI5uzTd/UQynEBCg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/serve-static": { "version": "1.13.3", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", @@ -764,8 +788,7 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base": { "version": "0.11.2", @@ -864,7 +887,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1247,8 +1269,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.2", @@ -2154,6 +2175,11 @@ "mime-types": "^2.1.12" } }, + "fp-ts": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.2.0.tgz", + "integrity": "sha512-muJL9NOYluuoRezrvOyQvLAHIXrYg7u/Tc6cu4PP/Ed4TJKrm6BVSX8H1goT/4nhgP/yQ+Z4Xjjt4ijeKFX4Ng==" + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -2194,8 +2220,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "1.2.9", @@ -2778,7 +2803,6 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3085,7 +3109,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -3094,8 +3117,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", @@ -3321,6 +3343,20 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "jasmine": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.5.0.tgz", + "integrity": "sha512-DYypSryORqzsGoMazemIHUfMkXM7I7easFaxAvNM3Mr6Xz3Fy36TupTrAOxZWN8MVKEU5xECv22J4tUQf3uBzQ==", + "requires": { + "glob": "^7.1.4", + "jasmine-core": "~3.5.0" + } + }, + "jasmine-core": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.5.0.tgz", + "integrity": "sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3810,7 +3846,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3877,6 +3912,11 @@ } } }, + "monocle-ts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/monocle-ts/-/monocle-ts-2.0.0.tgz", + "integrity": "sha512-vPM02WypUz0Xo2MtLUPgvdelCRn70VT05pdAB7qmHJSNY4CAoQt3ClpH77AG3yZk7PY8CA6++ezHcENUDOiuEA==" + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -3957,6 +3997,11 @@ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, + "newtype-ts": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/newtype-ts/-/newtype-ts-0.3.2.tgz", + "integrity": "sha512-1F5ff8LdXtMgcuy+t2F0q6b8VCt26YiXCw/YCSLacBBGH5N+fkFzNoRzvvP6JAjmFCb1Zcfyn0ZyJOCJIpTkKQ==" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -4113,7 +4158,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -4281,8 +4325,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "2.0.1", @@ -6246,8 +6289,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { "version": "7.2.0",
--- a/package.json Thu Dec 05 01:32:13 2019 -0800 +++ b/package.json Fri Dec 06 09:19:43 2019 -0800 @@ -5,14 +5,20 @@ "@polymer/polymer": "^3.3.1", "@types/async": "^3.0.3", "@types/eventsource": "^1.1.2", + "@types/jasmine": "^3.5.0", "@types/jsonld": "^1.5.0", "@webcomponents/webcomponentsjs": "^2.4.0", "async": "^3.1.0", + "fp-ts": "^2.2.0", + "jasmine": "^3.5.0", "jsonld": "^1.8.1", "lit-html": "^1.1.2", - "n3": "^1.3.4" + "monocle-ts": "^2.0.0", + "n3": "^1.3.4", + "newtype-ts": "^0.3.2" }, "devDependencies": { + "@types/n3": "^1.1.1", "@types/node": "^12.12.14", "@types/webpack": "^4.41.0", "@types/webpack-dev-server": "^3.9.0",
--- a/src/graph_view.ts Thu Dec 05 01:32:13 2019 -0800 +++ b/src/graph_view.ts Fri Dec 06 09:19:43 2019 -0800 @@ -1,18 +1,22 @@ // from /my/site/homepage/www/rdf/browse/graphView.js +/// <reference types="./n3.d.ts"> + import { html } from 'lit-html'; -import { SuffixLabels } from './suffixLabels.js'; -import { Store, Quad, DataFactory } from "n3" -const { namedNode, literal, quad } = DataFactory; +import { SuffixLabels } from './suffixLabels'; + +import { NamedNode, N3Store } from 'n3'; + +import ns from 'n3/src/IRIs'; +const {rdf} = ns; -const groupByRdfType = (graph: Store) => { - const env = graph.store.rdf; - const rdfType = env.createNamedNode('rdf:type'); - const byType = new Map(); // type : subjs +const groupByRdfType = (graph: N3Store) => { + const rdfType = new NamedNode(rdf.type); + const byType: Map<NamedNode, Set<NamedNode>> = new Map(); // type : subjs const untyped = new Set(); // subjs - graph.quadStore.quads({}, (q) => { + graph.getQuads({}, (q) => { let subjType = null; - graph.quadStore.quads({ + graph.getQuads({ subject: q.subject, predicate: rdfType }, @@ -31,15 +35,13 @@ return { byType: byType, untyped: untyped }; }; -const graphView = (graph: Store) => { - const env = graph.store.rdf; - +const graphView = (graph: N3Store) => { const labels = new SuffixLabels(); - graph.quadStore.quads({}, (q) => { + graph.getQuads({}, (q) => { if (q.subject.interfaceName == "NamedNode") { labels.planDisplayForNode(q.subject); } if (q.predicate.interfaceName == "NamedNode") { labels.planDisplayForNode(q.predicate); } if (q.object.interfaceName == "NamedNode") { labels.planDisplayForNode(q.object); } - if (q.object.interfaceName == "Literal" && q.object.datatype) { labels.planDisplayForNode(env.createNamedNode(q.object.datatype)); } + if (q.object.interfaceName == "Literal" && q.object.datatype) { labels.planDisplayForNode(new NamedNode(q.object.datatype)); } }); const rdfNode = (n) => { @@ -48,7 +50,7 @@ if (n.datatype) { dtPart = html` ^^<span class="literalType"> - ${rdfNode(env.createNamedNode(n.datatype))} + ${rdfNode(new NamedNode(n.datatype))} </span>`; } return html`<span class="literal">${n.nominalValue}${dtPart}</span>`; @@ -74,7 +76,7 @@ /// bunch of table rows const predBlock = (subj, pred) => { const objsSet = new Set(); - graph.quadStore.quads({ subject: subj, predicate: pred }, (q) => { + graph.getQuads({ subject: subj, predicate: pred }, (q) => { if (q.object.length) { console.log(q.object) @@ -100,9 +102,9 @@ untypedSubjs.sort(); const subjBlock = (subj) => { - const subjNode = env.createNamedNode(subj); + const subjNode = new NamedNode(subj); const predsSet = new Set(); - graph.quadStore.quads({ subject: subjNode }, (q) => { + graph.getQuads({ subject: subjNode }, (q) => { predsSet.add(q.predicate); }); const preds = Array.from(predsSet.values()); @@ -124,7 +126,7 @@ const preds = new Set(); subjs.forEach((subj) => { - graph.quadStore.quads({ subject: env.createNamedNode(subj) }, (q) => { + graph.getQuads({ subject: new NamedNode(subj) }, (q) => { preds.add(q.predicate.toString()); const cellKey = subj + '|||' + q.predicate.toString(); if (!graphCells.has(cellKey)) { @@ -140,7 +142,7 @@ const thead = () => { const predColumnHead = (pred) => { - return html`<th>${rdfNode(env.createNamedNode(pred))}</th>`; + return html`<th>${rdfNode(new NamedNode(pred))}</th>`; }; return html` <thead> @@ -167,14 +169,14 @@ return html` <tr> - <td>${rdfNode(env.createNamedNode(subj))}</td> + <td>${rdfNode(new NamedNode(subj))}</td> ${predsList.map(cell)} </tr> `; }; return html` - <div>[icon] ${rdfNode(env.createNamedNode(typeUri))} resources</div> + <div>[icon] ${rdfNode(new NamedNode(typeUri))} resources</div> <div class="typeBlockScroll"> <table class="typeBlock"> ${thead()}
--- a/src/streamed-graph.ts Thu Dec 05 01:32:13 2019 -0800 +++ b/src/streamed-graph.ts Fri Dec 06 09:19:43 2019 -0800 @@ -7,7 +7,7 @@ import { customElement, property, computed } from '@polymer/decorators'; import { render } from 'lit-html'; import { graphView } from './graph_view'; -import { Store, DataFactory } from "n3" +import { N3Store } from "n3" import { StreamedGraphClient } from './streamed_graph_client'; @@ -17,7 +17,7 @@ url: string = ''; @property({ type: Object }) - graph: {version: number, graph: Store}; + graph: {version: number, graph: N3Store}; @property({ type: Boolean }) expanded: Boolean = false;
--- a/src/streamed_graph_client.ts Thu Dec 05 01:32:13 2019 -0800 +++ b/src/streamed_graph_client.ts Fri Dec 06 09:19:43 2019 -0800 @@ -4,7 +4,7 @@ // import * as jsonld from "jsonld"; import { eachJsonLdQuad } from "./json_ld_quads"; -import { Store, DataFactory } from "n3" +import { Store } from "n3" // /// <reference types="eventsource" /> // const EventSource = window.EventSource;
--- a/tasks.py Thu Dec 05 01:32:13 2019 -0800 +++ b/tasks.py Fri Dec 06 09:19:43 2019 -0800 @@ -14,3 +14,7 @@ ctx.run(f'npm run build') ctx.run(f'cp build/streamed-graph.bundle.js /my/site/homepage/www/rdf/streamed-graph.bundle.js') ctx.run(f'cp streamed-graph.css /my/site/homepage/www/rdf/streamed-graph.css') + +@task +def test(ctx): + ctx.run(f'node_modules/ts-node/dist/bin.js node_modules/jasmine/bin/jasmine --config=jasmine.json') \ No newline at end of file