annotate service/wifi/src/graph_access.ts @ 1480:ae023bba2104

refactor plain graph functions from lit-element Ignore-this: db67b7d211f72ba9d14b0d490f7dc9da darcs-hash:88cdb343d3f5e47f06e2737402ef48257b0f80e9
author drewp <drewp@bigasterisk.com>
date Mon, 06 Jan 2020 22:39:46 -0800
parents
children 50d66febeeb0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1480
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 import { Literal, N3Store, Util, NamedNode, DataFactory } from "n3";
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 const { literal, namedNode } = DataFactory;
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4 // workaround for uris that don't have good labels in the graph
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5 export function labelFromUri(
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 uri: NamedNode,
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7 prefix: string,
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
8 tailsToLabels: { [key: string]: string },
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
9 defaultLabel: string
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10 ) {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11 let label = defaultLabel === undefined ? uri.value : defaultLabel;
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
12 Object.entries(tailsToLabels).forEach(([tail, useLabel]) => {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 if (uri.equals(namedNode(prefix + tail))) {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
14 label = useLabel as string;
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
15 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16 });
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17 return label;
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20 export function graphLiteral(
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 store: N3Store,
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22 subj: NamedNode,
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23 pred: string,
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
24 notFoundResult?: string
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25 ): Literal {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26 const keep: Array<Literal> = [];
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27 store.forEach(
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 q => {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29 if (!Util.isLiteral(q.object)) {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 throw new Error("non literal found");
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32 let seen = false;
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
33 for (let other of keep) {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
34 if (other.equals(q.object)) {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35 seen = true;
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
36 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
37 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
38 if (!seen) {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
39 keep.push(q.object as Literal);
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
40 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
41 },
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42 subj,
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 namedNode(pred),
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 null,
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 null
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46 );
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47 if (keep.length == 0) {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
48 return literal(notFoundResult || "(missing)");
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
50 if (keep.length == 1) {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
51 return keep[0];
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
52 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
53 console.log(`${subj.value} ${pred} had ${keep.length} objects:`, keep);
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
54 return keep[0];
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
55 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
56
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
57 export function graphUriValue(
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
58 store: N3Store,
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
59 subj: NamedNode,
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
60 pred: string
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
61 ): NamedNode | undefined {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
62 const keep: Array<NamedNode> = [];
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
63 store.forEach(
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
64 q => {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
65 if (!Util.isNamedNode(q.object)) {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
66 throw new Error("non uri found");
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
67 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
68 keep.push(q.object as NamedNode);
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
69 },
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
70 subj,
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
71 namedNode(pred),
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
72 null,
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
73 null
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
74 );
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
75 if (keep.length == 0) {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
76 return undefined;
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
77 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
78 if (keep.length == 1) {
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
79 return keep[0];
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
80 }
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
81 throw new Error("found multiple matches for pred");
ae023bba2104 refactor plain graph functions from lit-element
drewp <drewp@bigasterisk.com>
parents:
diff changeset
82 }