annotate src/tabulate.ts @ 100:ad08e5e25fc9

revert jsonld a few years to avoid a vite/commonjs build issue the newer jsonld has this dep graph: jsonld 5.2.0 └─┬ rdf-canonize 3.0.0 └── setimmediate 1.0.5 and that setimmediate uses strict in a way that breaks the build, etc.
author drewp@bigasterisk.com
date Fri, 11 Feb 2022 22:57:23 -0800
parents 26c55d5d5202
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
1 // Organize graph data into tables (column orders, etc) for the view layer.
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
2
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
3 import Immutable from "immutable"; // mostly using this for the builtin equals() testing, since NamedNode(x)!=NamedNode(x)
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
4 import {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
5 DataFactory,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
6 NamedNode,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
7 Quad,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
8 Quad_Object,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
9 Store,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
10 Term,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
11 Util,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
12 } from "n3";
97
26c55d5d5202 WIP on views & joins
drewp@bigasterisk.com
parents: 94
diff changeset
13 import { TableDesc } from "./view_loader";
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
14
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
15 const { namedNode } = DataFactory;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
16
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
17 // // import ns from 'n3/src/IRIs';
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
18 // // const { rdf } = ns;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
19 export const rdf = {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
20 type: namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"),
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
21 };
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
22
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
23 type UriSet = Immutable.Set<NamedNode>;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
24 export type TypeToSubjs = Immutable.Map<NamedNode, UriSet>;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
25
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
26 // https://github.com/rdfjs/N3.js/issues/265
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
27 if ((NamedNode.prototype as any).hashCode === undefined) {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
28 (NamedNode.prototype as any).hashCode = () => 0;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
29 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
30
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
31 function getType(graph: Store, subj: NamedNode): NamedNode | null {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
32 let subjType: NamedNode | null = null;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
33
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
34 graph.forObjects(
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
35 (o: Quad_Object) => {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
36 subjType = o as NamedNode;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
37 },
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
38 subj,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
39 rdf.type,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
40 null
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
41 );
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
42 return subjType;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
43 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
44
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
45 // When there are multiple types, an arbitrary one is used.
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
46 export function groupByRdfType(
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
47 graph: Store
94
a5f53d397526 view: pick types to show at top-level
drewp@bigasterisk.com
parents: 88
diff changeset
48 ): { byType: TypeToSubjs; typesPresent: NamedNode[]; untypedSubjs: NamedNode[] } {
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
49 let byType: TypeToSubjs = Immutable.Map();
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
50 let untyped: UriSet = Immutable.Set(); // subjs
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
51 const internSubjs = new Map<string, NamedNode>();
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
52 graph.forEach(
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
53 (q) => {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
54 if (!Util.isNamedNode(q.subject)) {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
55 throw new Error("unsupported " + q.subject.value);
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
56 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
57 const subj = q.subject as NamedNode;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
58
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
59 const subjType = getType(graph, subj);
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
60
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
61 if (subjType !== null) {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
62 // (subj, rdf:type, subjType) in graph
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
63 const oldKeys = Array.from(byType.keys());
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
64 const oldVal = byType.get(subjType, Immutable.Set<NamedNode>());
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
65 const newVal = oldVal.add(subj);
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
66 byType = byType.set(subjType, newVal);
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
67 } else {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
68 untyped = untyped.add(subj);
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
69 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
70 },
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
71 null,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
72 null,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
73 null,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
74 null
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
75 );
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
76
94
a5f53d397526 view: pick types to show at top-level
drewp@bigasterisk.com
parents: 88
diff changeset
77 const typesPresent = Array.from(byType.keys());
a5f53d397526 view: pick types to show at top-level
drewp@bigasterisk.com
parents: 88
diff changeset
78 typesPresent.sort();
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
79
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
80 const untypedSubjs = Array.from(untyped.values());
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
81 untypedSubjs.sort();
94
a5f53d397526 view: pick types to show at top-level
drewp@bigasterisk.com
parents: 88
diff changeset
82 return { byType: byType, typesPresent: typesPresent, untypedSubjs: untypedSubjs };
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
83 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
84
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
85 export function predsForSubj(graph: Store, typeUri: NamedNode): NamedNode[] {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
86 const predsSet: Set<NamedNode> = new Set();
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
87 graph.forEach(
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
88 (q: Quad) => {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
89 predsSet.add(q.predicate as NamedNode);
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
90 },
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
91 typeUri,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
92 null,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
93 null,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
94 null
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
95 );
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
96 const preds = Array.from(predsSet.values());
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
97 preds.sort();
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
98 return preds;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
99 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
100
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
101 interface ISP {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
102 subj: NamedNode;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
103 pred: NamedNode;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
104 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
105 const SP = Immutable.Record<ISP>({
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
106 subj: new NamedNode(""),
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
107 pred: new NamedNode(""),
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
108 });
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
109
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
110 export class MultiSubjsTypeBlockLayout {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
111 subjs: NamedNode[];
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
112 preds: NamedNode[];
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
113 graphCells: Immutable.Map<ISP, Immutable.Set<Term>>;
97
26c55d5d5202 WIP on views & joins
drewp@bigasterisk.com
parents: 94
diff changeset
114 constructor(graph: Store, byType: TypeToSubjs, table: TableDesc) {
26c55d5d5202 WIP on views & joins
drewp@bigasterisk.com
parents: 94
diff changeset
115 const subjSet = byType.get(table.primary);
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
116 this.subjs = subjSet ? Array.from(subjSet) : [];
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
117 this.subjs.sort();
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
118
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
119 let preds = Immutable.Set<NamedNode>();
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
120
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
121 this.graphCells = Immutable.Map<ISP, Immutable.Set<Term>>().withMutations(
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
122 (mutGraphCells) => {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
123 this.subjs.forEach((subj: NamedNode) => {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
124 graph.forEach(
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
125 (q: Quad) => {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
126 if (!Util.isNamedNode(q.predicate)) {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
127 throw new Error();
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
128 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
129
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
130 const pred = q.predicate as NamedNode;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
131 if (pred.equals(rdf.type)) {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
132 // the whole block is labeled with the type
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
133 return;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
134 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
135 preds = preds.add(pred);
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
136 const cellKey = this.makeCellKey(subj, pred);
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
137 mutGraphCells.set(
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
138 cellKey,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
139 mutGraphCells.get(cellKey, Immutable.Set<Term>()).add(q.object)
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
140 );
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
141 },
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
142 subj,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
143 null,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
144 null,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
145 null
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
146 );
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
147 });
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
148 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
149 );
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
150 this.preds = Array.from(preds);
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
151 this.preds.splice(this.preds.indexOf(rdf.type), 1);
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
152 // also pull out label, which should be used on 1st column
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
153 this.preds.sort();
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
154 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
155
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
156 makeCellKey(subj: NamedNode, pred: NamedNode): ISP {
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
157 return SP({
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
158 subj: subj,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
159 pred: pred,
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
160 });
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
161 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
162 }