@oml/owl 0.7.0

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.
Files changed (46) hide show
  1. package/README.md +46 -0
  2. package/out/index.d.ts +10 -0
  3. package/out/index.js +12 -0
  4. package/out/index.js.map +1 -0
  5. package/out/owl/owl-abox.d.ts +79 -0
  6. package/out/owl/owl-abox.js +765 -0
  7. package/out/owl/owl-abox.js.map +1 -0
  8. package/out/owl/owl-imports.d.ts +9 -0
  9. package/out/owl/owl-imports.js +102 -0
  10. package/out/owl/owl-imports.js.map +1 -0
  11. package/out/owl/owl-interfaces.d.ts +121 -0
  12. package/out/owl/owl-interfaces.js +3 -0
  13. package/out/owl/owl-interfaces.js.map +1 -0
  14. package/out/owl/owl-mapper.d.ts +80 -0
  15. package/out/owl/owl-mapper.js +1217 -0
  16. package/out/owl/owl-mapper.js.map +1 -0
  17. package/out/owl/owl-service.d.ts +65 -0
  18. package/out/owl/owl-service.js +552 -0
  19. package/out/owl/owl-service.js.map +1 -0
  20. package/out/owl/owl-shacl.d.ts +28 -0
  21. package/out/owl/owl-shacl.js +337 -0
  22. package/out/owl/owl-shacl.js.map +1 -0
  23. package/out/owl/owl-sparql.d.ts +71 -0
  24. package/out/owl/owl-sparql.js +260 -0
  25. package/out/owl/owl-sparql.js.map +1 -0
  26. package/out/owl/owl-store.d.ts +32 -0
  27. package/out/owl/owl-store.js +142 -0
  28. package/out/owl/owl-store.js.map +1 -0
  29. package/out/owl/owl-tbox.d.ts +98 -0
  30. package/out/owl/owl-tbox.js +575 -0
  31. package/out/owl/owl-tbox.js.map +1 -0
  32. package/out/owl-module.d.ts +15 -0
  33. package/out/owl-module.js +22 -0
  34. package/out/owl-module.js.map +1 -0
  35. package/package.json +52 -0
  36. package/src/index.ts +12 -0
  37. package/src/owl/owl-abox.ts +930 -0
  38. package/src/owl/owl-imports.ts +108 -0
  39. package/src/owl/owl-interfaces.ts +145 -0
  40. package/src/owl/owl-mapper.ts +1510 -0
  41. package/src/owl/owl-service.ts +642 -0
  42. package/src/owl/owl-shacl.ts +400 -0
  43. package/src/owl/owl-sparql.ts +317 -0
  44. package/src/owl/owl-store.ts +173 -0
  45. package/src/owl/owl-tbox.ts +727 -0
  46. package/src/owl-module.ts +52 -0
@@ -0,0 +1,260 @@
1
+ // Copyright (c) 2026 Modelware. All rights reserved.
2
+ // NOTE: Comunica's QueryEngine attempts to spawn workers during construction.
3
+ // This works in Node.js and browser main thread. For browser Web Worker contexts (language server),
4
+ // the Worker constructor is mocked in browser-server.ts to prevent nested worker spawning while
5
+ // allowing Comunica to initialize and execute queries successfully (without parallel execution).
6
+ import { QueryEngine } from '@comunica/query-sparql';
7
+ import { Store } from 'n3';
8
+ import { deriveSelectQueryFromShacl } from './owl-shacl.js';
9
+ export const deriveSelectQueryFromShape = deriveSelectQueryFromShacl;
10
+ export class SparqlService {
11
+ constructor(reasoningStore, importGraph, aboxEntailmentCache, reasoningService) {
12
+ this.reasoningStore = reasoningStore;
13
+ this.importGraph = importGraph;
14
+ this.aboxEntailmentCache = aboxEntailmentCache;
15
+ this.reasoningService = reasoningService;
16
+ this.engine = new QueryEngine();
17
+ this.filteredStoreCache = new Map();
18
+ this.dirtyFilteredStores = new Set();
19
+ }
20
+ /**
21
+ * Executes a SPARQL query over the model's reasoned context.
22
+ * Queries must use explicit GRAPH patterns to access data.
23
+ * Available named graphs for a model context are:
24
+ * <modelNamespace> - asserted quads
25
+ * <modelNamespace__entailments> - inferred quads
26
+ * The same pattern applies to all models in the import closure.
27
+ */
28
+ async query(modelUri, sparql) {
29
+ try {
30
+ this.ensureFreshEntailments(modelUri);
31
+ return await this.querySelect(modelUri, sparql);
32
+ }
33
+ catch (error) {
34
+ let warnings = [];
35
+ try {
36
+ warnings = this.toMissingModelsWarnings(this.getQueryContext(modelUri).missingModels);
37
+ }
38
+ catch {
39
+ warnings = [];
40
+ }
41
+ return {
42
+ success: false,
43
+ rows: [],
44
+ warnings,
45
+ error: error instanceof Error ? error.message : String(error),
46
+ };
47
+ }
48
+ }
49
+ /**
50
+ * Executes a SPARQL SELECT query over currently available store state.
51
+ * This method does not trigger inference refresh.
52
+ * The same named-graph contract applies as query(): explicit GRAPH patterns are required.
53
+ */
54
+ async queryRaw(modelUri, sparql) {
55
+ return this.querySelect(modelUri, sparql);
56
+ }
57
+ async construct(modelUri, sparql) {
58
+ try {
59
+ this.ensureFreshEntailments(modelUri);
60
+ const queryContext = this.getQueryContext(modelUri);
61
+ const warnings = this.composeWarnings(modelUri, queryContext.missingModels);
62
+ const filteredStore = this.getOrCreateFilteredStore(modelUri, queryContext);
63
+ const baseIRI = this.resolveBaseIri(modelUri);
64
+ const quadsStream = await this.engine.queryQuads(sparql, {
65
+ sources: [filteredStore],
66
+ unionDefaultGraph: true,
67
+ baseIRI,
68
+ });
69
+ const quads = [];
70
+ for await (const inferred of quadsStream) {
71
+ quads.push(inferred);
72
+ }
73
+ return {
74
+ success: true,
75
+ quads,
76
+ warnings,
77
+ };
78
+ }
79
+ catch (error) {
80
+ return {
81
+ success: false,
82
+ quads: [],
83
+ warnings: [],
84
+ error: error instanceof Error ? error.message : String(error),
85
+ };
86
+ }
87
+ }
88
+ async ask(modelUri, sparql) {
89
+ try {
90
+ this.ensureFreshEntailments(modelUri);
91
+ const queryContext = this.getQueryContext(modelUri);
92
+ const warnings = this.composeWarnings(modelUri, queryContext.missingModels);
93
+ const filteredStore = this.getOrCreateFilteredStore(modelUri, queryContext);
94
+ const baseIRI = this.resolveBaseIri(modelUri);
95
+ const result = await this.engine.queryBoolean(sparql, {
96
+ sources: [filteredStore],
97
+ unionDefaultGraph: true,
98
+ baseIRI,
99
+ });
100
+ return {
101
+ success: true,
102
+ result,
103
+ warnings,
104
+ };
105
+ }
106
+ catch (error) {
107
+ return {
108
+ success: false,
109
+ result: false,
110
+ warnings: [],
111
+ error: error instanceof Error ? error.message : String(error),
112
+ };
113
+ }
114
+ }
115
+ getAvailableGraphs(modelUri) {
116
+ return this.getQueryContext(modelUri).graphs;
117
+ }
118
+ invalidateFilteredStore(modelUri) {
119
+ this.filteredStoreCache.delete(modelUri);
120
+ this.dirtyFilteredStores.add(modelUri);
121
+ }
122
+ removeFilteredStore(modelUri) {
123
+ this.filteredStoreCache.delete(modelUri);
124
+ this.dirtyFilteredStores.delete(modelUri);
125
+ }
126
+ async querySelect(modelUri, sparql) {
127
+ try {
128
+ const queryContext = this.getQueryContext(modelUri);
129
+ const warnings = this.composeWarnings(modelUri, queryContext.missingModels);
130
+ const filteredStore = this.getOrCreateFilteredStore(modelUri, queryContext);
131
+ const baseIRI = this.resolveBaseIri(modelUri);
132
+ const bindingsStream = await this.engine.queryBindings(sparql, {
133
+ sources: [filteredStore],
134
+ unionDefaultGraph: true,
135
+ baseIRI,
136
+ });
137
+ const rows = [];
138
+ for await (const binding of bindingsStream) {
139
+ const row = new Map();
140
+ binding.forEach((value, variable) => {
141
+ if (!this.isQueryValueTerm(value)) {
142
+ return;
143
+ }
144
+ const variableName = variable.value;
145
+ row.set(variableName, this.toRdfTerm(value));
146
+ });
147
+ rows.push(row);
148
+ }
149
+ return {
150
+ success: true,
151
+ rows,
152
+ warnings,
153
+ };
154
+ }
155
+ catch (error) {
156
+ const queryContext = this.getQueryContext(modelUri);
157
+ const warnings = this.composeWarnings(modelUri, queryContext.missingModels);
158
+ return {
159
+ success: false,
160
+ rows: [],
161
+ warnings,
162
+ error: error instanceof Error ? error.message : String(error),
163
+ };
164
+ }
165
+ }
166
+ ensureFreshEntailments(modelUri) {
167
+ const closure = [modelUri, ...this.importGraph.dependenciesOf(modelUri)];
168
+ const requiresRefresh = closure.some((uri) => this.aboxEntailmentCache.isDirty(uri) || this.aboxEntailmentCache.isAbsent(uri));
169
+ if (requiresRefresh) {
170
+ this.reasoningService.runInference(modelUri);
171
+ }
172
+ }
173
+ resolveBaseIri(modelUri) {
174
+ try {
175
+ return this.reasoningStore.graphs(modelUri).own.value;
176
+ }
177
+ catch {
178
+ return modelUri;
179
+ }
180
+ }
181
+ getQueryContext(modelUri) {
182
+ const allUris = [modelUri, ...this.importGraph.dependenciesOf(modelUri)];
183
+ const seen = new Set();
184
+ const graphs = [];
185
+ const missingModels = [];
186
+ for (const uri of allUris) {
187
+ let own;
188
+ let entailments;
189
+ try {
190
+ ({ own, entailments } = this.reasoningStore.graphs(uri));
191
+ }
192
+ catch {
193
+ missingModels.push(uri);
194
+ continue;
195
+ }
196
+ for (const graph of [own, entailments]) {
197
+ if (seen.has(graph.value)) {
198
+ continue;
199
+ }
200
+ seen.add(graph.value);
201
+ graphs.push(graph);
202
+ }
203
+ }
204
+ return { graphs, missingModels };
205
+ }
206
+ toRdfTerm(term) {
207
+ if (term.termType === 'NamedNode') {
208
+ return { termType: 'NamedNode', value: term.value };
209
+ }
210
+ if (term.termType === 'BlankNode') {
211
+ return { termType: 'BlankNode', value: term.value };
212
+ }
213
+ const literal = term;
214
+ return {
215
+ termType: 'Literal',
216
+ value: term.value,
217
+ datatype: literal.datatype.value,
218
+ language: literal.language,
219
+ };
220
+ }
221
+ isQueryValueTerm(term) {
222
+ return term.termType === 'NamedNode' || term.termType === 'BlankNode' || term.termType === 'Literal';
223
+ }
224
+ toMissingModelsWarnings(missingModels) {
225
+ return missingModels.map((modelUri) => `Model not loaded: ${modelUri}`);
226
+ }
227
+ composeWarnings(modelUri, missingModels) {
228
+ const closureWarnings = [modelUri, ...this.importGraph.dependenciesOf(modelUri)]
229
+ .flatMap((uri) => this.aboxEntailmentCache.getValidationWarnings(uri));
230
+ return [...new Set([...this.toMissingModelsWarnings(missingModels), ...closureWarnings])];
231
+ }
232
+ createFilteredStore(graphs) {
233
+ const filteredStore = new Store();
234
+ const mainStore = this.reasoningStore.getStore();
235
+ const seenTriples = new Set();
236
+ for (const graph of graphs) {
237
+ const uniqueQuads = mainStore.getQuads(null, null, null, graph).filter((quad) => {
238
+ const key = `${quad.subject.id}|${quad.predicate.id}|${quad.object.id}`;
239
+ if (seenTriples.has(key)) {
240
+ return false;
241
+ }
242
+ seenTriples.add(key);
243
+ return true;
244
+ });
245
+ filteredStore.addQuads(uniqueQuads);
246
+ }
247
+ return filteredStore;
248
+ }
249
+ getOrCreateFilteredStore(modelUri, queryContext) {
250
+ const cached = this.filteredStoreCache.get(modelUri);
251
+ if (cached && !this.dirtyFilteredStores.has(modelUri)) {
252
+ return cached;
253
+ }
254
+ const store = this.createFilteredStore(queryContext.graphs);
255
+ this.filteredStoreCache.set(modelUri, store);
256
+ this.dirtyFilteredStores.delete(modelUri);
257
+ return store;
258
+ }
259
+ }
260
+ //# sourceMappingURL=owl-sparql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owl-sparql.js","sourceRoot":"","sources":["../../src/owl/owl-sparql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Store } from 'n3';
2
+ import type { NamedNode, Quad } from 'n3';
3
+ export interface ModelDiff {
4
+ isEmpty: boolean;
5
+ retracted: Quad[];
6
+ asserted: Quad[];
7
+ }
8
+ export interface ModelGraphs {
9
+ own: NamedNode;
10
+ entailments: NamedNode;
11
+ }
12
+ export declare class ReasoningStore {
13
+ private readonly store;
14
+ private readonly modelGraphs;
15
+ loadModel(modelUri: string, quads: Quad[]): void;
16
+ loadEntailments(modelUri: string, quads: Quad[]): void;
17
+ applyModelDelta(modelUri: string, quads: Quad[], retracted: Quad[], asserted: Quad[]): void;
18
+ retractModel(modelUri: string): void;
19
+ diffModel(modelUri: string, newQuads: Quad[]): ModelDiff;
20
+ clearEntailments(modelUri: string): void;
21
+ graphs(modelUri: string): ModelGraphs;
22
+ getStore(): Store;
23
+ private resolveGraphs;
24
+ private graphsFromNamespace;
25
+ private graphsFromModelUri;
26
+ private namespaceFromQuads;
27
+ private ontologyIriFromNamespace;
28
+ private requireGraphs;
29
+ private withGraph;
30
+ private removeGraph;
31
+ private quadKey;
32
+ }
@@ -0,0 +1,142 @@
1
+ // Copyright (c) 2026 Modelware. All rights reserved.
2
+ import { DataFactory, Store } from 'n3';
3
+ const OML_NAMESPACE = 'http://opencaesar.io/oml#namespace';
4
+ const { namedNode, quad } = DataFactory;
5
+ export class ReasoningStore {
6
+ constructor() {
7
+ this.store = new Store();
8
+ this.modelGraphs = new Map();
9
+ }
10
+ // Load a model's quads into its named graph.
11
+ // Retracts any existing quads for that model first.
12
+ // Graph IRI is derived from the ontology namespace embedded in the quads.
13
+ loadModel(modelUri, quads) {
14
+ const graphs = this.resolveGraphs(modelUri, quads);
15
+ this.retractModel(modelUri);
16
+ this.modelGraphs.set(modelUri, graphs);
17
+ this.store.addQuads(quads.map((q) => this.withGraph(q, graphs.own)));
18
+ }
19
+ loadEntailments(modelUri, quads) {
20
+ const graphs = this.requireGraphs(modelUri);
21
+ this.removeGraph(graphs.entailments);
22
+ if (quads.length === 0) {
23
+ return;
24
+ }
25
+ this.store.addQuads(quads.map((q) => this.withGraph(q, graphs.entailments)));
26
+ }
27
+ applyModelDelta(modelUri, quads, retracted, asserted) {
28
+ const graphs = this.resolveGraphs(modelUri, quads, true);
29
+ this.modelGraphs.set(modelUri, graphs);
30
+ if (retracted.length > 0) {
31
+ this.store.removeQuads(retracted.map((q) => this.withGraph(q, graphs.own)));
32
+ }
33
+ if (asserted.length > 0) {
34
+ this.store.addQuads(asserted.map((q) => this.withGraph(q, graphs.own)));
35
+ }
36
+ }
37
+ // Retract all quads in all named graphs for a model
38
+ // (own quads + entailment quads)
39
+ retractModel(modelUri) {
40
+ const graphs = this.modelGraphs.get(modelUri);
41
+ if (!graphs)
42
+ return;
43
+ this.removeGraph(graphs.own);
44
+ this.removeGraph(graphs.entailments);
45
+ this.modelGraphs.delete(modelUri);
46
+ }
47
+ // Compare newly mapped quads against what is currently in the store.
48
+ // Returns the semantic difference — what was added and what was removed.
49
+ // If the diff is empty, nothing downstream needs to run.
50
+ diffModel(modelUri, newQuads) {
51
+ const graphs = this.resolveGraphs(modelUri, newQuads, true);
52
+ const existing = this.store.getQuads(null, null, null, graphs.own);
53
+ const next = newQuads.map((q) => this.withGraph(q, graphs.own));
54
+ const existingByKey = new Map(existing.map((q) => [this.quadKey(q), q]));
55
+ const nextByKey = new Map(next.map((q) => [this.quadKey(q), q]));
56
+ const retracted = [...existingByKey.entries()]
57
+ .filter(([key]) => !nextByKey.has(key))
58
+ .map(([, value]) => value)
59
+ .sort((a, b) => this.quadKey(a).localeCompare(this.quadKey(b)));
60
+ const asserted = [...nextByKey.entries()]
61
+ .filter(([key]) => !existingByKey.has(key))
62
+ .map(([, value]) => value)
63
+ .sort((a, b) => this.quadKey(a).localeCompare(this.quadKey(b)));
64
+ return {
65
+ isEmpty: retracted.length === 0 && asserted.length === 0,
66
+ retracted,
67
+ asserted,
68
+ };
69
+ }
70
+ // Clear only the entailment named graph for a model.
71
+ // Called before re-running TBox or ABox chaining.
72
+ clearEntailments(modelUri) {
73
+ const graphs = this.requireGraphs(modelUri);
74
+ this.removeGraph(graphs.entailments);
75
+ }
76
+ // Returns the named graph IRIs for a model.
77
+ // Used by TBoxChainer, ABoxChainer, and SparqlService
78
+ // to know which graphs to read from and write to.
79
+ graphs(modelUri) {
80
+ return this.requireGraphs(modelUri);
81
+ }
82
+ // Expose the underlying N3 Store for direct use by
83
+ // TBoxChainer, ABoxChainer, and Comunica.
84
+ getStore() {
85
+ return this.store;
86
+ }
87
+ resolveGraphs(modelUri, quads, allowExisting = false) {
88
+ const namespace = this.namespaceFromQuads(quads);
89
+ if (namespace) {
90
+ const graphs = this.graphsFromNamespace(namespace);
91
+ this.modelGraphs.set(modelUri, graphs);
92
+ return graphs;
93
+ }
94
+ if (allowExisting) {
95
+ const existing = this.modelGraphs.get(modelUri);
96
+ if (existing)
97
+ return existing;
98
+ }
99
+ // Keep reasoning resilient during transient states (e.g. non-mappable documents):
100
+ // if namespace is missing, fall back to a stable graph derived from the model URI.
101
+ const fallback = this.graphsFromModelUri(modelUri);
102
+ this.modelGraphs.set(modelUri, fallback);
103
+ return fallback;
104
+ }
105
+ graphsFromNamespace(namespace) {
106
+ const ontologyIri = this.ontologyIriFromNamespace(namespace);
107
+ return {
108
+ own: namedNode(ontologyIri),
109
+ entailments: namedNode(`${ontologyIri}__entailments`),
110
+ };
111
+ }
112
+ graphsFromModelUri(modelUri) {
113
+ return {
114
+ own: namedNode(modelUri),
115
+ entailments: namedNode(`${modelUri}__entailments`)
116
+ };
117
+ }
118
+ namespaceFromQuads(quads) {
119
+ const namespaceQuad = quads.find((q) => q.predicate.value === OML_NAMESPACE && q.object.termType === 'NamedNode');
120
+ return namespaceQuad?.object.value;
121
+ }
122
+ ontologyIriFromNamespace(namespace) {
123
+ return namespace.replace(/[\/#]+$/, '');
124
+ }
125
+ requireGraphs(modelUri) {
126
+ const graphs = this.modelGraphs.get(modelUri);
127
+ if (!graphs) {
128
+ throw new Error(`Unknown model '${modelUri}'. Load the model first.`);
129
+ }
130
+ return graphs;
131
+ }
132
+ withGraph(q, graph) {
133
+ return quad(q.subject, q.predicate, q.object, graph);
134
+ }
135
+ removeGraph(graph) {
136
+ this.store.removeQuads(this.store.getQuads(null, null, null, graph));
137
+ }
138
+ quadKey(q) {
139
+ return `${q.subject.id}|${q.predicate.id}|${q.object.id}|${q.graph.id}`;
140
+ }
141
+ }
142
+ //# sourceMappingURL=owl-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owl-store.js","sourceRoot":"","sources":["../../src/owl/owl-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import type { Ontology } from '@oml/language';
2
+ import type { OwlImportGraph, OwlStore, OwlTBoxIndexCache } from './owl-interfaces.js';
3
+ export interface TBoxIndex {
4
+ superClasses: Map<string, string[]>;
5
+ subProperties: Map<string, string[]>;
6
+ domain: Map<string, string[]>;
7
+ objectRange: Map<string, string[]>;
8
+ datatypeRange: Map<string, string[]>;
9
+ inverseRoles: Map<string, string[]>;
10
+ forwardRules: ForwardRuleDefinition[];
11
+ symmetricProperties: Set<string>;
12
+ transitiveProperties: Set<string>;
13
+ functionalProperties: Set<string>;
14
+ inverseFunctionalProperties: Set<string>;
15
+ }
16
+ export interface ForwardRuleDefinition {
17
+ iri: string;
18
+ body: RuleAtom[];
19
+ head: RuleAtom[];
20
+ }
21
+ export type RuleAtom = {
22
+ kind: 'class';
23
+ classIri: string;
24
+ argument: RuleTermPattern;
25
+ } | {
26
+ kind: 'property';
27
+ propertyIri: string;
28
+ argument1: RuleTermPattern;
29
+ argument2: RuleTermPattern;
30
+ };
31
+ export type RuleTermPattern = {
32
+ kind: 'variable';
33
+ name: string;
34
+ } | {
35
+ kind: 'named';
36
+ iri: string;
37
+ } | {
38
+ kind: 'literal';
39
+ value: string;
40
+ datatype: string;
41
+ language: string;
42
+ };
43
+ export declare class TBoxIndexBuilder {
44
+ private readonly reasoningStore;
45
+ private readonly tboxIndexCache;
46
+ private readonly importGraph;
47
+ constructor(reasoningStore: OwlStore, tboxIndexCache: OwlTBoxIndexCache, importGraph: OwlImportGraph);
48
+ buildOwn(modelUri: string, ontology?: Ontology): TBoxIndex;
49
+ buildMerged(modelUri: string): TBoxIndex;
50
+ private allQuads;
51
+ private pushMapArrayUnique;
52
+ private emptyIndex;
53
+ private mergeStringArrayMap;
54
+ private mergeSet;
55
+ private mergeForwardRules;
56
+ private buildForwardRules;
57
+ private lowerRelationEntityRule;
58
+ private lowerOmlRule;
59
+ private lowerPredicates;
60
+ private lowerArgument;
61
+ private lowerLiteral;
62
+ private resolveRefIri;
63
+ private memberIri;
64
+ private ontologyOf;
65
+ private normalizeNamespace;
66
+ private closeSuperClassesTransitively;
67
+ private closeSubPropertiesTransitively;
68
+ private isDatatypeIri;
69
+ }
70
+ export declare class TBoxIndexCache {
71
+ private readonly ownIndexes;
72
+ private readonly mergedIndexes;
73
+ private readonly dirtyMerged;
74
+ getOwn(modelUri: string): TBoxIndex | undefined;
75
+ setOwn(modelUri: string, index: TBoxIndex): void;
76
+ hasOwn(modelUri: string): boolean;
77
+ invalidateOwn(modelUri: string): void;
78
+ getMerged(modelUri: string): TBoxIndex | undefined;
79
+ setMerged(modelUri: string, index: TBoxIndex): void;
80
+ hasMerged(modelUri: string): boolean;
81
+ isMergedDirty(modelUri: string): boolean;
82
+ invalidateMerged(modelUri: string): void;
83
+ invalidateMergedAll(modelUris: string[]): void;
84
+ }
85
+ export declare class TBoxChainer {
86
+ private readonly reasoningStore;
87
+ private static readonly MAX_CHAIN_ITERATIONS;
88
+ constructor(reasoningStore: OwlStore);
89
+ chain(modelUri: string): void;
90
+ private fireT1;
91
+ private fireT2;
92
+ private fireT3;
93
+ private fireT4;
94
+ private fireT5;
95
+ private collectIterationData;
96
+ private pushIfNew;
97
+ private quadKey;
98
+ }