Mercurial > code > home > repos > streamed-graph
annotate src/layout/rdf_value.ts @ 114:4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
author | drewp@bigasterisk.com |
---|---|
date | Sat, 19 Mar 2022 16:12:49 -0700 |
parents | cbcd82d21356 |
children |
rev | line source |
---|---|
109 | 1 import { NamedNode, Store, Term } from "n3"; |
95 | 2 import { RDFS } from "./namespaces"; |
3 | |
4 function _singleValue(g: Store, s: Term, p: Term): Term { | |
5 const quads = g.getQuads(s, p, null, null); | |
6 const objs = new Set(quads.map((q) => q.object)); | |
7 if (objs.size == 0) { | |
8 throw new Error("no value for " + s.value + " " + p.value); | |
9 } else if (objs.size == 1) { | |
10 const obj = objs.values().next().value; | |
11 return obj as Term; | |
12 } else { | |
13 throw new Error("too many different values: " + JSON.stringify(quads)); | |
14 } | |
15 } | |
16 | |
17 export function stringValue(g: Store, s: Term, p: Term): string { | |
18 const ret = _singleValue(g, s, p); | |
19 if (ret.termType != "Literal") { | |
20 throw new Error(`ret=${ret}`); | |
21 } | |
22 return ret.value as string; | |
23 } | |
24 | |
25 export function uriValue(g: Store, s: Term, p: Term): NamedNode { | |
26 const ret = _singleValue(g, s, p); | |
27 if (ret.termType != "NamedNode") { | |
28 throw new Error(`ret=${ret}`); | |
29 } | |
30 | |
31 return ret; | |
32 } | |
33 | |
34 export function labelOrTail(g: Store, uri: NamedNode): string { | |
35 let ret: string; | |
36 try { | |
37 ret = stringValue(g, uri, RDFS("label")); | |
38 } catch (e) { | |
39 const words = uri.value.split("/"); | |
40 ret = words[words.length - 1]; | |
41 } | |
42 if (!ret) { | |
43 ret = uri.value; | |
44 } | |
45 return ret; | |
46 } | |
108
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
47 |
109 | 48 export function uniqueSortedTerms<T extends NamedNode | Term>( |
49 terms: Iterable<T> | |
50 ): T[] { | |
108
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
51 const uniques: T[] = []; |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
52 const seen = new Set(); |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
53 for (let o of terms) { |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
54 if (!seen.has(o.id)) { |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
55 seen.add(o.id); |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
56 uniques.push(o); |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
57 } |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
58 } |
109 | 59 uniques.sort((a, b) => { |
60 return a.id.localeCompare(b.id); | |
61 }); | |
108
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
62 return uniques; |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
63 } |
114
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
64 |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
65 // A default dict of Term[] with (NamedNode,NamedNode) pairs as keys. |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
66 // |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
67 // Immutable.Map<Immutable.Record<Uri,Uri>, Immutable.Set<Term>>() didn't seem to work. |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
68 export class UriPairMap { |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
69 _d = new Map<string, Term[]>(); |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
70 |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
71 _key(k1: NamedNode, k2: NamedNode): string { |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
72 return k1.id + "|" + k2.id; |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
73 } |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
74 |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
75 add(k1: NamedNode, k2: NamedNode, v: Term) { |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
76 const key = this._key(k1, k2); |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
77 let cur = this._d.get(key); |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
78 if (cur === undefined) { |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
79 cur = []; |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
80 this._d.set(key, cur); |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
81 } |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
82 cur.push(v); |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
83 } |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
84 |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
85 get(k1: NamedNode, k2: NamedNode): Term[] { |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
86 const key = this._key(k1, k2); |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
87 const v = this._d.get(key); |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
88 if (v === undefined) { |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
89 return []; |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
90 } |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
91 return v; |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
92 } |
4b33a479dc2f
fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents:
109
diff
changeset
|
93 } |