Mercurial > code > home > repos > homeauto
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 |
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 } |