annotate src/layout/rdf_value.ts @ 106:2468f2227d22

make src/layout/ and src/render/ separation
author drewp@bigasterisk.com
date Sun, 13 Mar 2022 22:00:30 -0700
parents src/rdf_value.ts@47d3b5a5bd5e
children 5e6840229a05
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
95
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
1 import { Store, Term, NamedNode } from "n3";
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
2 import { RDFS } from "./namespaces";
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
3
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
4 function _singleValue(g: Store, s: Term, p: Term): Term {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
5 const quads = g.getQuads(s, p, null, null);
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
6 const objs = new Set(quads.map((q) => q.object));
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
7 if (objs.size == 0) {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
8 throw new Error("no value for " + s.value + " " + p.value);
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
9 } else if (objs.size == 1) {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
10 const obj = objs.values().next().value;
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
11 return obj as Term;
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
12 } else {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
13 throw new Error("too many different values: " + JSON.stringify(quads));
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
14 }
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
15 }
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
16
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
17 export function stringValue(g: Store, s: Term, p: Term): string {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
18 const ret = _singleValue(g, s, p);
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
19 if (ret.termType != "Literal") {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
20 throw new Error(`ret=${ret}`);
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
21 }
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
22 return ret.value as string;
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
23 }
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
24
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
25 export function uriValue(g: Store, s: Term, p: Term): NamedNode {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
26 const ret = _singleValue(g, s, p);
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
27 if (ret.termType != "NamedNode") {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
28 throw new Error(`ret=${ret}`);
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
29 }
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
30
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
31 return ret;
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
32 }
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
33
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
34 export function labelOrTail(g: Store, uri: NamedNode): string {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
35 let ret: string;
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
36 try {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
37 ret = stringValue(g, uri, RDFS("label"));
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
38 } catch (e) {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
39 const words = uri.value.split("/");
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
40 ret = words[words.length - 1];
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
41 }
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
42 if (!ret) {
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
43 ret = uri.value;
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
44 }
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
45 return ret;
47d3b5a5bd5e refactor
drewp@bigasterisk.com
parents:
diff changeset
46 }