@oml/owl 0.19.3 → 0.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/index.d.ts +3 -0
- package/out/index.js +3 -0
- package/out/index.js.map +1 -1
- package/out/owl/owl-abox.d.ts +16 -5
- package/out/owl/owl-abox.js +365 -188
- package/out/owl/owl-abox.js.map +1 -1
- package/out/owl/owl-imports.js +4 -2
- package/out/owl/owl-imports.js.map +1 -1
- package/out/owl/owl-interfaces.d.ts +26 -1
- package/out/owl/owl-mapper.d.ts +2 -0
- package/out/owl/owl-mapper.js +77 -38
- package/out/owl/owl-mapper.js.map +1 -1
- package/out/owl/owl-service.d.ts +4 -0
- package/out/owl/owl-service.js +139 -44
- package/out/owl/owl-service.js.map +1 -1
- package/out/owl/owl-shacl.d.ts +8 -9
- package/out/owl/owl-shacl.js +43 -117
- package/out/owl/owl-shacl.js.map +1 -1
- package/out/owl/owl-sparql-engine.d.ts +6 -0
- package/out/owl/owl-sparql-engine.js +11 -0
- package/out/owl/owl-sparql-engine.js.map +1 -0
- package/out/owl/owl-sparql-oxigraph.d.ts +34 -0
- package/out/owl/owl-sparql-oxigraph.js +436 -0
- package/out/owl/owl-sparql-oxigraph.js.map +1 -0
- package/out/owl/owl-sparql.d.ts +0 -44
- package/out/owl/owl-sparql.js +0 -320
- package/out/owl/owl-sparql.js.map +1 -1
- package/out/owl/owl-store-lean.d.ts +29 -0
- package/out/owl/owl-store-lean.js +445 -0
- package/out/owl/owl-store-lean.js.map +1 -0
- package/out/owl/owl-store.d.ts +11 -1
- package/out/owl/owl-store.js +80 -6
- package/out/owl/owl-store.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +3 -0
- package/src/owl/owl-abox.ts +401 -200
- package/src/owl/owl-imports.ts +4 -2
- package/src/owl/owl-interfaces.ts +28 -1
- package/src/owl/owl-mapper.ts +79 -41
- package/src/owl/owl-service.ts +149 -49
- package/src/owl/owl-shacl.ts +55 -132
- package/src/owl/owl-sparql-engine.ts +34 -0
- package/src/owl/owl-sparql-oxigraph.ts +527 -0
- package/src/owl/owl-sparql.ts +3 -366
- package/src/owl/owl-store-lean.ts +438 -0
- package/src/owl/owl-store.ts +86 -7
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
// Copyright (c) 2026 Modelware. All rights reserved.
|
|
2
|
+
// Memory-lean reasoning store (the default OwlStore implementation).
|
|
3
|
+
//
|
|
4
|
+
// Rationale: the n3 Store builds full S/P/O/G index Maps + Quad/Term object wrappers over every
|
|
5
|
+
// quad (~1.3 KB/quad → ~1 GB on mass-props). The reasoners don't need general SPARQL indexing of
|
|
6
|
+
// the canonical store (oxigraph owns querying via the mirror); they need per-graph scans, bound
|
|
7
|
+
// pattern lookups over small graphs (TBox/SHACL), membership, and add/remove. LeanQuadStore stores
|
|
8
|
+
// quads as interned uint32 term-id columns with per-graph + per-predicate id lists (~130 B/quad),
|
|
9
|
+
// and exposes the n3-Store API subset the code actually calls — so it's a drop-in for the store
|
|
10
|
+
// behind ReasoningStore, ~8–9x smaller and faster on those ops (benchmarked).
|
|
11
|
+
//
|
|
12
|
+
// There are no per-model Quad arrays: the ABox chainer reads scope facts via forEachAssertedFact/
|
|
13
|
+
// forEachEntailedFact, which yield shared interned Term instances + a per-row cached key straight
|
|
14
|
+
// from the columns — so a model's facts are re-read across dependents (~21x) without materializing
|
|
15
|
+
// or retaining Quad objects, and without a separate factOf memo.
|
|
16
|
+
import { DataFactory } from 'n3';
|
|
17
|
+
const { namedNode, blankNode, literal, quad, defaultGraph } = DataFactory;
|
|
18
|
+
const XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string';
|
|
19
|
+
// --- LeanQuadStore: interned-column quad store exposing the n3-Store API subset we use ----------
|
|
20
|
+
const NULL_ID = -1; // wildcard (term not bound in a query)
|
|
21
|
+
const ABSENT_ID = -2; // bound term that was never interned -> matches nothing
|
|
22
|
+
class LeanQuadStore {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.termToId = new Map();
|
|
25
|
+
this.idToKey = [];
|
|
26
|
+
// Packed term-id columns; row index === quad id.
|
|
27
|
+
this.cs = [];
|
|
28
|
+
this.cp = [];
|
|
29
|
+
this.co = [];
|
|
30
|
+
this.cg = [];
|
|
31
|
+
this.graphRows = new Map();
|
|
32
|
+
this.predRows = new Map();
|
|
33
|
+
this.dead = new Set();
|
|
34
|
+
// Caches for the chainer's scope-fact path: one shared Term instance per term id, and the dedup
|
|
35
|
+
// key (`${s.id}|${p.id}|${o.id}`) per row — computed once, reused across the ~21x re-reads.
|
|
36
|
+
this.idToTerm = [];
|
|
37
|
+
this.rowKey = [];
|
|
38
|
+
}
|
|
39
|
+
keyOfTerm(t) {
|
|
40
|
+
switch (t.termType) {
|
|
41
|
+
case 'NamedNode': return 'N\x00' + t.value;
|
|
42
|
+
case 'BlankNode': return 'B\x00' + t.value;
|
|
43
|
+
case 'DefaultGraph': return 'D';
|
|
44
|
+
default: {
|
|
45
|
+
const lit = t;
|
|
46
|
+
const dt = lit.datatype ? lit.datatype.value : XSD_STRING;
|
|
47
|
+
return 'L\x00' + lit.value + '\x00' + dt + '\x00' + (lit.language || '');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
intern(key) {
|
|
52
|
+
let id = this.termToId.get(key);
|
|
53
|
+
if (id === undefined) {
|
|
54
|
+
id = this.idToKey.length;
|
|
55
|
+
this.termToId.set(key, id);
|
|
56
|
+
this.idToKey.push(key);
|
|
57
|
+
}
|
|
58
|
+
return id;
|
|
59
|
+
}
|
|
60
|
+
// -1 for null/undefined (wildcard); -2 for a bound term that isn't interned (matches nothing).
|
|
61
|
+
idOf(t) {
|
|
62
|
+
if (t === null || t === undefined) {
|
|
63
|
+
return NULL_ID;
|
|
64
|
+
}
|
|
65
|
+
const id = this.termToId.get(this.keyOfTerm(t));
|
|
66
|
+
return id === undefined ? ABSENT_ID : id;
|
|
67
|
+
}
|
|
68
|
+
termAt(id) {
|
|
69
|
+
const k = this.idToKey[id];
|
|
70
|
+
const kind = k.charCodeAt(0);
|
|
71
|
+
if (kind === 78 /* N */)
|
|
72
|
+
return namedNode(k.slice(2));
|
|
73
|
+
if (kind === 66 /* B */)
|
|
74
|
+
return blankNode(k.slice(2));
|
|
75
|
+
if (kind === 68 /* D */)
|
|
76
|
+
return defaultGraph();
|
|
77
|
+
const parts = k.slice(2).split('\x00');
|
|
78
|
+
const value = parts[0], dt = parts[1], lang = parts[2];
|
|
79
|
+
if (lang)
|
|
80
|
+
return literal(value, lang);
|
|
81
|
+
if (dt && dt !== XSD_STRING)
|
|
82
|
+
return literal(value, namedNode(dt));
|
|
83
|
+
return literal(value);
|
|
84
|
+
}
|
|
85
|
+
materialize(row) {
|
|
86
|
+
// Casts are safe: subjects are NamedNode/BlankNode, predicates NamedNode, objects any term,
|
|
87
|
+
// graphs NamedNode/DefaultGraph — guaranteed by how quads are inserted.
|
|
88
|
+
return quad(this.termAt(this.cs[row]), this.termAt(this.cp[row]), this.termAt(this.co[row]), this.termAt(this.cg[row]));
|
|
89
|
+
}
|
|
90
|
+
addRow(si, pi, oi, gi) {
|
|
91
|
+
const row = this.cs.length;
|
|
92
|
+
this.cs.push(si);
|
|
93
|
+
this.cp.push(pi);
|
|
94
|
+
this.co.push(oi);
|
|
95
|
+
this.cg.push(gi);
|
|
96
|
+
let gl = this.graphRows.get(gi);
|
|
97
|
+
if (!gl) {
|
|
98
|
+
gl = [];
|
|
99
|
+
this.graphRows.set(gi, gl);
|
|
100
|
+
}
|
|
101
|
+
gl.push(row);
|
|
102
|
+
let pl = this.predRows.get(pi);
|
|
103
|
+
if (!pl) {
|
|
104
|
+
pl = [];
|
|
105
|
+
this.predRows.set(pi, pl);
|
|
106
|
+
}
|
|
107
|
+
pl.push(row);
|
|
108
|
+
return row;
|
|
109
|
+
}
|
|
110
|
+
sharedTermAt(id) {
|
|
111
|
+
let t = this.idToTerm[id];
|
|
112
|
+
if (!t) {
|
|
113
|
+
t = this.termAt(id);
|
|
114
|
+
this.idToTerm[id] = t;
|
|
115
|
+
}
|
|
116
|
+
return t;
|
|
117
|
+
}
|
|
118
|
+
keyAt(row) {
|
|
119
|
+
let k = this.rowKey[row];
|
|
120
|
+
if (k === undefined) {
|
|
121
|
+
k = `${this.sharedTermAt(this.cs[row]).id}|${this.sharedTermAt(this.cp[row]).id}|${this.sharedTermAt(this.co[row]).id}`;
|
|
122
|
+
this.rowKey[row] = k;
|
|
123
|
+
}
|
|
124
|
+
return k;
|
|
125
|
+
}
|
|
126
|
+
isDead(row) {
|
|
127
|
+
return this.dead.has(row);
|
|
128
|
+
}
|
|
129
|
+
visitFact(row, visit) {
|
|
130
|
+
visit(this.sharedTermAt(this.cs[row]), this.sharedTermAt(this.cp[row]), this.sharedTermAt(this.co[row]), this.keyAt(row));
|
|
131
|
+
}
|
|
132
|
+
// Scope-fact iteration for the ABox chainer: shared terms + cached keys, no Quad materialization.
|
|
133
|
+
forEachFactInGraph(graph, visit) {
|
|
134
|
+
const gid = this.idOf(graph);
|
|
135
|
+
if (gid < 0)
|
|
136
|
+
return;
|
|
137
|
+
const rows = this.graphRows.get(gid);
|
|
138
|
+
if (!rows)
|
|
139
|
+
return;
|
|
140
|
+
for (const r of rows) {
|
|
141
|
+
if (!this.dead.has(r))
|
|
142
|
+
this.visitFact(r, visit);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
forEachFactInRows(rows, visit) {
|
|
146
|
+
for (const r of rows) {
|
|
147
|
+
if (!this.dead.has(r))
|
|
148
|
+
this.visitFact(r, visit);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Iterate rows matching the (possibly wildcard) pattern, skipping tombstoned rows.
|
|
152
|
+
forEachMatch(si, pi, oi, gi, visit) {
|
|
153
|
+
if (si === ABSENT_ID || pi === ABSENT_ID || oi === ABSENT_ID || gi === ABSENT_ID) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// Pick the most selective available index.
|
|
157
|
+
let candidates;
|
|
158
|
+
if (gi !== NULL_ID)
|
|
159
|
+
candidates = this.graphRows.get(gi);
|
|
160
|
+
else if (pi !== NULL_ID)
|
|
161
|
+
candidates = this.predRows.get(pi);
|
|
162
|
+
if (candidates) {
|
|
163
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
164
|
+
const r = candidates[i];
|
|
165
|
+
if (this.dead.has(r))
|
|
166
|
+
continue;
|
|
167
|
+
if (si !== NULL_ID && this.cs[r] !== si)
|
|
168
|
+
continue;
|
|
169
|
+
if (pi !== NULL_ID && this.cp[r] !== pi)
|
|
170
|
+
continue;
|
|
171
|
+
if (oi !== NULL_ID && this.co[r] !== oi)
|
|
172
|
+
continue;
|
|
173
|
+
if (gi !== NULL_ID && this.cg[r] !== gi)
|
|
174
|
+
continue;
|
|
175
|
+
visit(r);
|
|
176
|
+
}
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// Full scan (no graph or predicate bound).
|
|
180
|
+
const n = this.cs.length;
|
|
181
|
+
for (let r = 0; r < n; r++) {
|
|
182
|
+
if (this.dead.has(r))
|
|
183
|
+
continue;
|
|
184
|
+
if (si !== NULL_ID && this.cs[r] !== si)
|
|
185
|
+
continue;
|
|
186
|
+
if (pi !== NULL_ID && this.cp[r] !== pi)
|
|
187
|
+
continue;
|
|
188
|
+
if (oi !== NULL_ID && this.co[r] !== oi)
|
|
189
|
+
continue;
|
|
190
|
+
visit(r);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// --- n3-Store-compatible API (the subset used across the codebase) -----------------------
|
|
194
|
+
// Returns the new row id (used by LeanReasoningStore to track per-model entailment rows).
|
|
195
|
+
addQuad(subjectOrQuad, predicate, object, graph) {
|
|
196
|
+
let s, p, o, g;
|
|
197
|
+
if (predicate === undefined) {
|
|
198
|
+
const q = subjectOrQuad;
|
|
199
|
+
s = q.subject;
|
|
200
|
+
p = q.predicate;
|
|
201
|
+
o = q.object;
|
|
202
|
+
g = q.graph;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
s = subjectOrQuad;
|
|
206
|
+
p = predicate;
|
|
207
|
+
o = object;
|
|
208
|
+
g = (graph ?? defaultGraph());
|
|
209
|
+
}
|
|
210
|
+
return this.addRow(this.intern(this.keyOfTerm(s)), this.intern(this.keyOfTerm(p)), this.intern(this.keyOfTerm(o)), this.intern(this.keyOfTerm(g)));
|
|
211
|
+
}
|
|
212
|
+
addQuads(quads) {
|
|
213
|
+
for (const q of quads)
|
|
214
|
+
this.addQuad(q.subject, q.predicate, q.object, q.graph);
|
|
215
|
+
}
|
|
216
|
+
removeQuad(subjectOrQuad, predicate, object, graph) {
|
|
217
|
+
let s, p, o, g;
|
|
218
|
+
if (predicate === undefined) {
|
|
219
|
+
const q = subjectOrQuad;
|
|
220
|
+
s = q.subject;
|
|
221
|
+
p = q.predicate;
|
|
222
|
+
o = q.object;
|
|
223
|
+
g = q.graph;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
s = subjectOrQuad;
|
|
227
|
+
p = predicate;
|
|
228
|
+
o = object;
|
|
229
|
+
g = (graph ?? defaultGraph());
|
|
230
|
+
}
|
|
231
|
+
const si = this.idOf(s), pi = this.idOf(p), oi = this.idOf(o), gi = this.idOf(g);
|
|
232
|
+
this.forEachMatch(si, pi, oi, gi, (row) => { this.tombstone(row, gi); });
|
|
233
|
+
}
|
|
234
|
+
removeQuads(quads) {
|
|
235
|
+
for (const q of quads)
|
|
236
|
+
this.removeQuad(q.subject, q.predicate, q.object, q.graph);
|
|
237
|
+
}
|
|
238
|
+
tombstone(row, gi) {
|
|
239
|
+
if (this.dead.has(row))
|
|
240
|
+
return;
|
|
241
|
+
this.dead.add(row);
|
|
242
|
+
// Keep the graph list compact (graph removal is the common bulk case); predRows is filtered lazily via `dead`.
|
|
243
|
+
const gl = this.graphRows.get(gi >= 0 ? gi : this.cg[row]);
|
|
244
|
+
if (gl) {
|
|
245
|
+
const idx = gl.indexOf(row);
|
|
246
|
+
if (idx >= 0)
|
|
247
|
+
gl.splice(idx, 1);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
getQuads(subject, predicate, object, graph) {
|
|
251
|
+
const out = [];
|
|
252
|
+
this.forEachMatch(this.idOf(subject), this.idOf(predicate), this.idOf(object), this.idOf(graph), (row) => {
|
|
253
|
+
out.push(this.materialize(row));
|
|
254
|
+
});
|
|
255
|
+
return out;
|
|
256
|
+
}
|
|
257
|
+
countQuads(subject, predicate, object, graph) {
|
|
258
|
+
let count = 0;
|
|
259
|
+
this.forEachMatch(this.idOf(subject), this.idOf(predicate), this.idOf(object), this.idOf(graph), () => { count += 1; });
|
|
260
|
+
return count;
|
|
261
|
+
}
|
|
262
|
+
has(subjectOrQuad, predicate, object, graph) {
|
|
263
|
+
let s, p, o, g;
|
|
264
|
+
if (predicate === undefined) {
|
|
265
|
+
const q = subjectOrQuad;
|
|
266
|
+
s = q.subject;
|
|
267
|
+
p = q.predicate;
|
|
268
|
+
o = q.object;
|
|
269
|
+
g = q.graph;
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
s = subjectOrQuad;
|
|
273
|
+
p = predicate;
|
|
274
|
+
o = object;
|
|
275
|
+
g = (graph ?? defaultGraph());
|
|
276
|
+
}
|
|
277
|
+
let found = false;
|
|
278
|
+
this.forEachMatch(this.idOf(s), this.idOf(p), this.idOf(o), this.idOf(g), () => { found = true; });
|
|
279
|
+
return found;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// --- LeanReasoningStore: OwlStore over LeanQuadStore (mirrors ReasoningStore exactly) -----------
|
|
283
|
+
export class LeanReasoningStore {
|
|
284
|
+
constructor() {
|
|
285
|
+
this.store = new LeanQuadStore();
|
|
286
|
+
this.modelGraphs = new Map();
|
|
287
|
+
// Asserted facts live in the model's own graph (read straight from the store's columns, no
|
|
288
|
+
// per-model array). Entailed facts written via addEntailment/loadEntailments are tracked here
|
|
289
|
+
// by row id so forEachEntailedFact returns ONLY them (not TBox quads that the
|
|
290
|
+
// TBox chainer writes directly into the entailments graph via getStore().addQuads).
|
|
291
|
+
this.entailedRows = new Map();
|
|
292
|
+
this.modelDataGen = new Map();
|
|
293
|
+
}
|
|
294
|
+
bumpDataGen(modelUri) {
|
|
295
|
+
this.modelDataGen.set(modelUri, (this.modelDataGen.get(modelUri) ?? 0) + 1);
|
|
296
|
+
}
|
|
297
|
+
getModelDataGen(modelUri) {
|
|
298
|
+
return this.modelDataGen.get(modelUri) ?? 0;
|
|
299
|
+
}
|
|
300
|
+
loadModel(modelUri, quads) {
|
|
301
|
+
const existingGraphs = this.modelGraphs.get(modelUri);
|
|
302
|
+
const graphs = existingGraphs ?? this.graphsFromModelUri(modelUri);
|
|
303
|
+
if (existingGraphs) {
|
|
304
|
+
this.retractModel(modelUri);
|
|
305
|
+
}
|
|
306
|
+
this.modelGraphs.set(modelUri, graphs);
|
|
307
|
+
this.entailedRows.delete(modelUri);
|
|
308
|
+
for (const q of quads) {
|
|
309
|
+
this.store.addQuad(q.subject, q.predicate, q.object, graphs.own);
|
|
310
|
+
}
|
|
311
|
+
this.bumpDataGen(modelUri);
|
|
312
|
+
}
|
|
313
|
+
loadEntailments(modelUri, quads) {
|
|
314
|
+
const graphs = this.requireGraphs(modelUri);
|
|
315
|
+
this.removeGraph(graphs.entailments);
|
|
316
|
+
this.bumpDataGen(modelUri);
|
|
317
|
+
if (quads.length === 0) {
|
|
318
|
+
this.entailedRows.set(modelUri, []);
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
const rows = [];
|
|
322
|
+
for (const q of quads) {
|
|
323
|
+
rows.push(this.store.addQuad(q.subject, q.predicate, q.object, graphs.entailments));
|
|
324
|
+
}
|
|
325
|
+
this.entailedRows.set(modelUri, rows);
|
|
326
|
+
}
|
|
327
|
+
addEntailment(modelUri, q) {
|
|
328
|
+
const graphs = this.requireGraphs(modelUri);
|
|
329
|
+
const row = this.store.addQuad(q.subject, q.predicate, q.object, graphs.entailments);
|
|
330
|
+
const rows = this.entailedRows.get(modelUri) ?? [];
|
|
331
|
+
rows.push(row);
|
|
332
|
+
this.entailedRows.set(modelUri, rows);
|
|
333
|
+
this.bumpDataGen(modelUri);
|
|
334
|
+
}
|
|
335
|
+
removeEntailment(modelUri, q) {
|
|
336
|
+
const graphs = this.requireGraphs(modelUri);
|
|
337
|
+
this.store.removeQuad(quad(q.subject, q.predicate, q.object, graphs.entailments));
|
|
338
|
+
const rows = this.entailedRows.get(modelUri);
|
|
339
|
+
if (rows) {
|
|
340
|
+
this.entailedRows.set(modelUri, rows.filter((r) => !this.store.isDead(r)));
|
|
341
|
+
}
|
|
342
|
+
this.bumpDataGen(modelUri);
|
|
343
|
+
}
|
|
344
|
+
applyModelDelta(modelUri, quads, retracted, asserted) {
|
|
345
|
+
const graphs = this.resolveGraphs(modelUri);
|
|
346
|
+
this.modelGraphs.set(modelUri, graphs);
|
|
347
|
+
if (retracted.length > 0) {
|
|
348
|
+
this.store.removeQuads(retracted.map((q) => this.withGraph(q, graphs.own)));
|
|
349
|
+
}
|
|
350
|
+
if (asserted.length > 0) {
|
|
351
|
+
for (const q of asserted) {
|
|
352
|
+
this.store.addQuad(q.subject, q.predicate, q.object, graphs.own);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
this.bumpDataGen(modelUri);
|
|
356
|
+
}
|
|
357
|
+
retractModel(modelUri) {
|
|
358
|
+
const graphs = this.modelGraphs.get(modelUri);
|
|
359
|
+
if (!graphs)
|
|
360
|
+
return;
|
|
361
|
+
this.removeGraph(graphs.own);
|
|
362
|
+
this.removeGraph(graphs.entailments);
|
|
363
|
+
this.removeGraph(graphs.shaclRules);
|
|
364
|
+
this.modelGraphs.delete(modelUri);
|
|
365
|
+
this.entailedRows.delete(modelUri);
|
|
366
|
+
this.bumpDataGen(modelUri);
|
|
367
|
+
}
|
|
368
|
+
diffModel(modelUri, newQuads) {
|
|
369
|
+
const graphs = this.resolveGraphs(modelUri);
|
|
370
|
+
const existing = this.store.getQuads(null, null, null, graphs.own);
|
|
371
|
+
const next = newQuads.map((q) => this.withGraph(q, graphs.own));
|
|
372
|
+
const existingByKey = new Map(existing.map((q) => [this.quadKey(q), q]));
|
|
373
|
+
const nextByKey = new Map(next.map((q) => [this.quadKey(q), q]));
|
|
374
|
+
const retracted = [...existingByKey.entries()]
|
|
375
|
+
.filter(([key]) => !nextByKey.has(key))
|
|
376
|
+
.map(([, value]) => value)
|
|
377
|
+
.sort((a, b) => this.quadKey(a).localeCompare(this.quadKey(b)));
|
|
378
|
+
const asserted = [...nextByKey.entries()]
|
|
379
|
+
.filter(([key]) => !existingByKey.has(key))
|
|
380
|
+
.map(([, value]) => value)
|
|
381
|
+
.sort((a, b) => this.quadKey(a).localeCompare(this.quadKey(b)));
|
|
382
|
+
return {
|
|
383
|
+
isEmpty: retracted.length === 0 && asserted.length === 0,
|
|
384
|
+
retracted,
|
|
385
|
+
asserted,
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
clearEntailments(modelUri) {
|
|
389
|
+
const graphs = this.requireGraphs(modelUri);
|
|
390
|
+
this.removeGraph(graphs.entailments);
|
|
391
|
+
this.entailedRows.set(modelUri, []);
|
|
392
|
+
this.bumpDataGen(modelUri);
|
|
393
|
+
}
|
|
394
|
+
graphs(modelUri) {
|
|
395
|
+
return this.requireGraphs(modelUri);
|
|
396
|
+
}
|
|
397
|
+
getStore() {
|
|
398
|
+
return this.store;
|
|
399
|
+
}
|
|
400
|
+
forEachAssertedFact(modelUri, visit) {
|
|
401
|
+
const graphs = this.modelGraphs.get(modelUri);
|
|
402
|
+
if (!graphs)
|
|
403
|
+
return;
|
|
404
|
+
this.store.forEachFactInGraph(graphs.own, visit);
|
|
405
|
+
}
|
|
406
|
+
forEachEntailedFact(modelUri, visit) {
|
|
407
|
+
const rows = this.entailedRows.get(modelUri);
|
|
408
|
+
if (!rows)
|
|
409
|
+
return;
|
|
410
|
+
this.store.forEachFactInRows(rows, visit);
|
|
411
|
+
}
|
|
412
|
+
resolveGraphs(modelUri) {
|
|
413
|
+
const existing = this.modelGraphs.get(modelUri);
|
|
414
|
+
if (existing) {
|
|
415
|
+
return existing;
|
|
416
|
+
}
|
|
417
|
+
const graphs = this.graphsFromModelUri(modelUri);
|
|
418
|
+
this.modelGraphs.set(modelUri, graphs);
|
|
419
|
+
return graphs;
|
|
420
|
+
}
|
|
421
|
+
graphsFromModelUri(modelUri) {
|
|
422
|
+
return {
|
|
423
|
+
own: namedNode(modelUri),
|
|
424
|
+
entailments: namedNode(`${modelUri}__entailments`),
|
|
425
|
+
shaclRules: namedNode(`${modelUri}__shacl_rules`),
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
requireGraphs(modelUri) {
|
|
429
|
+
const graphs = this.modelGraphs.get(modelUri);
|
|
430
|
+
if (!graphs) {
|
|
431
|
+
throw new Error(`Unknown model '${modelUri}'. Load the model first.`);
|
|
432
|
+
}
|
|
433
|
+
return graphs;
|
|
434
|
+
}
|
|
435
|
+
withGraph(q, graph) {
|
|
436
|
+
return quad(q.subject, q.predicate, q.object, graph);
|
|
437
|
+
}
|
|
438
|
+
removeGraph(graph) {
|
|
439
|
+
this.store.removeQuads(this.store.getQuads(null, null, null, graph));
|
|
440
|
+
}
|
|
441
|
+
quadKey(q) {
|
|
442
|
+
return `${q.subject.id}|${q.predicate.id}|${q.object.id}|${q.graph.id}`;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
//# sourceMappingURL=owl-store-lean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owl-store-lean.js","sourceRoot":"","sources":["../../src/owl/owl-store-lean.ts"],"names":[],"mappings":"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"}
|
package/out/owl/owl-store.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Store } from 'n3';
|
|
2
|
-
import type { NamedNode, Quad } from 'n3';
|
|
2
|
+
import type { NamedNode, Quad, Term } from 'n3';
|
|
3
3
|
export interface ModelDiff {
|
|
4
4
|
isEmpty: boolean;
|
|
5
5
|
retracted: Quad[];
|
|
@@ -8,18 +8,28 @@ export interface ModelDiff {
|
|
|
8
8
|
export interface ModelGraphs {
|
|
9
9
|
own: NamedNode;
|
|
10
10
|
entailments: NamedNode;
|
|
11
|
+
shaclRules: NamedNode;
|
|
11
12
|
}
|
|
12
13
|
export declare class ReasoningStore {
|
|
13
14
|
private readonly store;
|
|
14
15
|
private readonly modelGraphs;
|
|
16
|
+
private readonly assertedQuadsByModel;
|
|
17
|
+
private readonly entailedQuadsByModel;
|
|
18
|
+
private readonly modelDataGen;
|
|
19
|
+
private bumpDataGen;
|
|
20
|
+
getModelDataGen(modelUri: string): number;
|
|
15
21
|
loadModel(modelUri: string, quads: Quad[]): void;
|
|
16
22
|
loadEntailments(modelUri: string, quads: Quad[]): void;
|
|
23
|
+
addEntailment(modelUri: string, q: Quad): void;
|
|
24
|
+
removeEntailment(modelUri: string, q: Quad): void;
|
|
17
25
|
applyModelDelta(modelUri: string, quads: Quad[], retracted: Quad[], asserted: Quad[]): void;
|
|
18
26
|
retractModel(modelUri: string): void;
|
|
19
27
|
diffModel(modelUri: string, newQuads: Quad[]): ModelDiff;
|
|
20
28
|
clearEntailments(modelUri: string): void;
|
|
21
29
|
graphs(modelUri: string): ModelGraphs;
|
|
22
30
|
getStore(): Store;
|
|
31
|
+
forEachAssertedFact(modelUri: string, visit: (subject: Term, predicate: NamedNode, object: Term, key: string) => void): void;
|
|
32
|
+
forEachEntailedFact(modelUri: string, visit: (subject: Term, predicate: NamedNode, object: Term, key: string) => void): void;
|
|
23
33
|
private resolveGraphs;
|
|
24
34
|
private graphsFromModelUri;
|
|
25
35
|
private requireGraphs;
|
package/out/owl/owl-store.js
CHANGED
|
@@ -5,33 +5,84 @@ export class ReasoningStore {
|
|
|
5
5
|
constructor() {
|
|
6
6
|
this.store = new Store();
|
|
7
7
|
this.modelGraphs = new Map();
|
|
8
|
+
this.assertedQuadsByModel = new Map();
|
|
9
|
+
this.entailedQuadsByModel = new Map();
|
|
10
|
+
// Monotonic per-model data version, bumped on every mutation of a model's asserted or entailed
|
|
11
|
+
// quads. Consumers (e.g. the Oxigraph mirror) compare it to detect exactly which models changed,
|
|
12
|
+
// without re-reading the data — so an edit re-syncs only the models that actually changed.
|
|
13
|
+
this.modelDataGen = new Map();
|
|
14
|
+
}
|
|
15
|
+
bumpDataGen(modelUri) {
|
|
16
|
+
this.modelDataGen.set(modelUri, (this.modelDataGen.get(modelUri) ?? 0) + 1);
|
|
17
|
+
}
|
|
18
|
+
getModelDataGen(modelUri) {
|
|
19
|
+
return this.modelDataGen.get(modelUri) ?? 0;
|
|
8
20
|
}
|
|
9
21
|
// Load a model's quads into its named graph.
|
|
10
22
|
// Retracts any existing quads for that model first.
|
|
11
23
|
// Graph IRI is derived from the model URI to keep model snapshots isolated.
|
|
12
24
|
loadModel(modelUri, quads) {
|
|
13
|
-
const
|
|
14
|
-
this.
|
|
25
|
+
const existingGraphs = this.modelGraphs.get(modelUri);
|
|
26
|
+
const graphs = existingGraphs ?? this.graphsFromModelUri(modelUri);
|
|
27
|
+
if (existingGraphs) {
|
|
28
|
+
this.retractModel(modelUri);
|
|
29
|
+
}
|
|
15
30
|
this.modelGraphs.set(modelUri, graphs);
|
|
16
|
-
this.
|
|
31
|
+
this.assertedQuadsByModel.set(modelUri, [...quads]);
|
|
32
|
+
this.entailedQuadsByModel.delete(modelUri);
|
|
33
|
+
for (const q of quads) {
|
|
34
|
+
this.store.addQuad(q.subject, q.predicate, q.object, graphs.own);
|
|
35
|
+
}
|
|
36
|
+
this.bumpDataGen(modelUri);
|
|
17
37
|
}
|
|
18
38
|
loadEntailments(modelUri, quads) {
|
|
19
39
|
const graphs = this.requireGraphs(modelUri);
|
|
20
40
|
this.removeGraph(graphs.entailments);
|
|
41
|
+
this.bumpDataGen(modelUri);
|
|
21
42
|
if (quads.length === 0) {
|
|
43
|
+
this.entailedQuadsByModel.set(modelUri, []);
|
|
22
44
|
return;
|
|
23
45
|
}
|
|
24
|
-
|
|
46
|
+
const entailed = [];
|
|
47
|
+
for (const q of quads) {
|
|
48
|
+
const entailedQuad = quad(q.subject, q.predicate, q.object, graphs.entailments);
|
|
49
|
+
entailed.push(entailedQuad);
|
|
50
|
+
this.store.addQuad(entailedQuad);
|
|
51
|
+
}
|
|
52
|
+
this.entailedQuadsByModel.set(modelUri, entailed);
|
|
53
|
+
}
|
|
54
|
+
addEntailment(modelUri, q) {
|
|
55
|
+
const graphs = this.requireGraphs(modelUri);
|
|
56
|
+
const entailedQuad = quad(q.subject, q.predicate, q.object, graphs.entailments);
|
|
57
|
+
const entailed = this.entailedQuadsByModel.get(modelUri) ?? [];
|
|
58
|
+
entailed.push(entailedQuad);
|
|
59
|
+
this.entailedQuadsByModel.set(modelUri, entailed);
|
|
60
|
+
this.store.addQuad(entailedQuad);
|
|
61
|
+
this.bumpDataGen(modelUri);
|
|
62
|
+
}
|
|
63
|
+
removeEntailment(modelUri, q) {
|
|
64
|
+
const graphs = this.requireGraphs(modelUri);
|
|
65
|
+
const entailedQuad = quad(q.subject, q.predicate, q.object, graphs.entailments);
|
|
66
|
+
const key = this.quadKey(entailedQuad);
|
|
67
|
+
const entailed = this.entailedQuadsByModel.get(modelUri) ?? [];
|
|
68
|
+
const next = entailed.filter((entry) => this.quadKey(entry) !== key);
|
|
69
|
+
this.entailedQuadsByModel.set(modelUri, next);
|
|
70
|
+
this.store.removeQuad(entailedQuad);
|
|
71
|
+
this.bumpDataGen(modelUri);
|
|
25
72
|
}
|
|
26
73
|
applyModelDelta(modelUri, quads, retracted, asserted) {
|
|
27
74
|
const graphs = this.resolveGraphs(modelUri);
|
|
28
75
|
this.modelGraphs.set(modelUri, graphs);
|
|
76
|
+
this.assertedQuadsByModel.set(modelUri, [...quads]);
|
|
29
77
|
if (retracted.length > 0) {
|
|
30
78
|
this.store.removeQuads(retracted.map((q) => this.withGraph(q, graphs.own)));
|
|
31
79
|
}
|
|
32
80
|
if (asserted.length > 0) {
|
|
33
|
-
|
|
81
|
+
for (const q of asserted) {
|
|
82
|
+
this.store.addQuad(q.subject, q.predicate, q.object, graphs.own);
|
|
83
|
+
}
|
|
34
84
|
}
|
|
85
|
+
this.bumpDataGen(modelUri);
|
|
35
86
|
}
|
|
36
87
|
// Retract all quads in all named graphs for a model
|
|
37
88
|
// (own quads + entailment quads)
|
|
@@ -41,7 +92,11 @@ export class ReasoningStore {
|
|
|
41
92
|
return;
|
|
42
93
|
this.removeGraph(graphs.own);
|
|
43
94
|
this.removeGraph(graphs.entailments);
|
|
95
|
+
this.removeGraph(graphs.shaclRules);
|
|
44
96
|
this.modelGraphs.delete(modelUri);
|
|
97
|
+
this.assertedQuadsByModel.delete(modelUri);
|
|
98
|
+
this.entailedQuadsByModel.delete(modelUri);
|
|
99
|
+
this.bumpDataGen(modelUri);
|
|
45
100
|
}
|
|
46
101
|
// Compare newly mapped quads against what is currently in the store.
|
|
47
102
|
// Returns the semantic difference — what was added and what was removed.
|
|
@@ -71,6 +126,8 @@ export class ReasoningStore {
|
|
|
71
126
|
clearEntailments(modelUri) {
|
|
72
127
|
const graphs = this.requireGraphs(modelUri);
|
|
73
128
|
this.removeGraph(graphs.entailments);
|
|
129
|
+
this.entailedQuadsByModel.set(modelUri, []);
|
|
130
|
+
this.bumpDataGen(modelUri);
|
|
74
131
|
}
|
|
75
132
|
// Returns the named graph IRIs for a model.
|
|
76
133
|
// Used by TBoxChainer, ABoxChainer, and SparqlService
|
|
@@ -83,6 +140,22 @@ export class ReasoningStore {
|
|
|
83
140
|
getStore() {
|
|
84
141
|
return this.store;
|
|
85
142
|
}
|
|
143
|
+
forEachAssertedFact(modelUri, visit) {
|
|
144
|
+
const quads = this.assertedQuadsByModel.get(modelUri);
|
|
145
|
+
if (!quads)
|
|
146
|
+
return;
|
|
147
|
+
for (const q of quads) {
|
|
148
|
+
visit(q.subject, q.predicate, q.object, `${q.subject.id}|${q.predicate.id}|${q.object.id}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
forEachEntailedFact(modelUri, visit) {
|
|
152
|
+
const quads = this.entailedQuadsByModel.get(modelUri);
|
|
153
|
+
if (!quads)
|
|
154
|
+
return;
|
|
155
|
+
for (const q of quads) {
|
|
156
|
+
visit(q.subject, q.predicate, q.object, `${q.subject.id}|${q.predicate.id}|${q.object.id}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
86
159
|
resolveGraphs(modelUri) {
|
|
87
160
|
const existing = this.modelGraphs.get(modelUri);
|
|
88
161
|
if (existing) {
|
|
@@ -95,7 +168,8 @@ export class ReasoningStore {
|
|
|
95
168
|
graphsFromModelUri(modelUri) {
|
|
96
169
|
return {
|
|
97
170
|
own: namedNode(modelUri),
|
|
98
|
-
entailments: namedNode(`${modelUri}__entailments`)
|
|
171
|
+
entailments: namedNode(`${modelUri}__entailments`),
|
|
172
|
+
shaclRules: namedNode(`${modelUri}__shacl_rules`),
|
|
99
173
|
};
|
|
100
174
|
}
|
|
101
175
|
requireGraphs(modelUri) {
|