@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.
- package/README.md +46 -0
- package/out/index.d.ts +10 -0
- package/out/index.js +12 -0
- package/out/index.js.map +1 -0
- package/out/owl/owl-abox.d.ts +79 -0
- package/out/owl/owl-abox.js +765 -0
- package/out/owl/owl-abox.js.map +1 -0
- package/out/owl/owl-imports.d.ts +9 -0
- package/out/owl/owl-imports.js +102 -0
- package/out/owl/owl-imports.js.map +1 -0
- package/out/owl/owl-interfaces.d.ts +121 -0
- package/out/owl/owl-interfaces.js +3 -0
- package/out/owl/owl-interfaces.js.map +1 -0
- package/out/owl/owl-mapper.d.ts +80 -0
- package/out/owl/owl-mapper.js +1217 -0
- package/out/owl/owl-mapper.js.map +1 -0
- package/out/owl/owl-service.d.ts +65 -0
- package/out/owl/owl-service.js +552 -0
- package/out/owl/owl-service.js.map +1 -0
- package/out/owl/owl-shacl.d.ts +28 -0
- package/out/owl/owl-shacl.js +337 -0
- package/out/owl/owl-shacl.js.map +1 -0
- package/out/owl/owl-sparql.d.ts +71 -0
- package/out/owl/owl-sparql.js +260 -0
- package/out/owl/owl-sparql.js.map +1 -0
- package/out/owl/owl-store.d.ts +32 -0
- package/out/owl/owl-store.js +142 -0
- package/out/owl/owl-store.js.map +1 -0
- package/out/owl/owl-tbox.d.ts +98 -0
- package/out/owl/owl-tbox.js +575 -0
- package/out/owl/owl-tbox.js.map +1 -0
- package/out/owl-module.d.ts +15 -0
- package/out/owl-module.js +22 -0
- package/out/owl-module.js.map +1 -0
- package/package.json +52 -0
- package/src/index.ts +12 -0
- package/src/owl/owl-abox.ts +930 -0
- package/src/owl/owl-imports.ts +108 -0
- package/src/owl/owl-interfaces.ts +145 -0
- package/src/owl/owl-mapper.ts +1510 -0
- package/src/owl/owl-service.ts +642 -0
- package/src/owl/owl-shacl.ts +400 -0
- package/src/owl/owl-sparql.ts +317 -0
- package/src/owl/owl-store.ts +173 -0
- package/src/owl/owl-tbox.ts +727 -0
- package/src/owl-module.ts +52 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
// Copyright (c) 2026 Modelware. All rights reserved.
|
|
2
|
+
import { Parser as N3Parser, Store as N3Store } from 'n3';
|
|
3
|
+
import SHACLValidator from 'rdf-validate-shacl';
|
|
4
|
+
export const ShaclValidateRequest = 'oml/table-editor/validate';
|
|
5
|
+
export class ShaclService {
|
|
6
|
+
constructor(sparqlService, prepareContext, resolveContextIri) {
|
|
7
|
+
this.sparqlService = sparqlService;
|
|
8
|
+
this.prepareContext = prepareContext;
|
|
9
|
+
this.resolveContextIri = resolveContextIri;
|
|
10
|
+
}
|
|
11
|
+
async validateShacl(modelUri, shaclSource) {
|
|
12
|
+
if (!modelUri) {
|
|
13
|
+
return {
|
|
14
|
+
conforms: false,
|
|
15
|
+
issues: [],
|
|
16
|
+
error: 'No contextUri model is available for this markdown document.',
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const trimmedSource = stripShaclFrontMatter(shaclSource).trim();
|
|
20
|
+
if (!trimmedSource) {
|
|
21
|
+
return {
|
|
22
|
+
conforms: false,
|
|
23
|
+
issues: [],
|
|
24
|
+
error: 'Enter a shape to validate.',
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
let shapeQuads;
|
|
28
|
+
try {
|
|
29
|
+
const parser = new N3Parser();
|
|
30
|
+
shapeQuads = parser.parse(trimmedSource);
|
|
31
|
+
if (shapeQuads.length === 0) {
|
|
32
|
+
return {
|
|
33
|
+
conforms: false,
|
|
34
|
+
issues: [],
|
|
35
|
+
error: 'No content found.',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
return {
|
|
41
|
+
conforms: false,
|
|
42
|
+
issues: [],
|
|
43
|
+
error: error instanceof Error ? error.message : 'Invalid SHACL shapes.',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
await this.prepareContext(modelUri);
|
|
47
|
+
const contextIri = this.resolveContextIri(modelUri);
|
|
48
|
+
const constructResult = await this.sparqlService.construct(modelUri, buildValidationConstructQuery(contextIri));
|
|
49
|
+
if (!constructResult.success) {
|
|
50
|
+
return {
|
|
51
|
+
conforms: false,
|
|
52
|
+
issues: [],
|
|
53
|
+
error: constructResult.error ?? 'SPARQL CONSTRUCT failed for validation.',
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const propertyNameByPath = collectShaclPropertyDisplayNames(shapeQuads);
|
|
58
|
+
const shapesDataset = new N3Store(shapeQuads);
|
|
59
|
+
const dataDataset = new N3Store(constructResult.quads);
|
|
60
|
+
const validator = new SHACLValidator(shapesDataset);
|
|
61
|
+
const report = await validator.validate(dataDataset);
|
|
62
|
+
const rawResults = Array.isArray(report?.results) ? report.results : [];
|
|
63
|
+
const issues = rawResults.map((result) => {
|
|
64
|
+
const path = formatValidationField(result?.path);
|
|
65
|
+
return {
|
|
66
|
+
message: formatValidationField(result?.message) || 'Validation issue.',
|
|
67
|
+
focusNode: formatValidationField(result?.focusNode),
|
|
68
|
+
path,
|
|
69
|
+
propertyName: path ? propertyNameByPath.get(path) : undefined,
|
|
70
|
+
severity: formatValidationField(result?.severity),
|
|
71
|
+
source: formatValidationField(result?.sourceConstraintComponent ?? result?.sourceShape),
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
conforms: Boolean(report?.conforms),
|
|
76
|
+
issues,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return {
|
|
81
|
+
conforms: false,
|
|
82
|
+
issues: [],
|
|
83
|
+
error: error instanceof Error ? error.message : 'Validation failed.',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function createDefaultShaclService(sparqlService, prepareContext, resolveContextIri) {
|
|
89
|
+
return new ShaclService(sparqlService, prepareContext, resolveContextIri);
|
|
90
|
+
}
|
|
91
|
+
export function registerShaclValidationRequests(connection, oml) {
|
|
92
|
+
connection.onRequest(ShaclValidateRequest, async (params) => {
|
|
93
|
+
const reasoningService = oml?.reasoning?.ReasoningService;
|
|
94
|
+
if (!reasoningService
|
|
95
|
+
|| typeof reasoningService.getSparqlService !== 'function'
|
|
96
|
+
|| typeof reasoningService.ensureQueryContext !== 'function'
|
|
97
|
+
|| typeof reasoningService.getContextIri !== 'function') {
|
|
98
|
+
return {
|
|
99
|
+
conforms: false,
|
|
100
|
+
issues: [],
|
|
101
|
+
error: 'Reasoning service validation is unavailable.',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const modelUri = typeof params?.modelUri === 'string' ? params.modelUri : undefined;
|
|
105
|
+
const shaclSource = typeof params?.shaclSource === 'string' ? params.shaclSource : '';
|
|
106
|
+
const shaclService = createDefaultShaclService(reasoningService.getSparqlService(), (uri) => reasoningService.ensureQueryContext(uri), (uri) => reasoningService.getContextIri(uri));
|
|
107
|
+
return shaclService.validateShacl(modelUri, shaclSource);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
export function deriveSelectQueryFromShacl(shaclSource, graphIri) {
|
|
111
|
+
let shapesStore;
|
|
112
|
+
try {
|
|
113
|
+
const parser = new N3Parser({ format: 'text/turtle' });
|
|
114
|
+
const quads = parser.parse(shaclSource);
|
|
115
|
+
shapesStore = new N3Store(quads);
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
const validator = new SHACLValidator(shapesStore);
|
|
121
|
+
const { sh } = validator.ns;
|
|
122
|
+
const shapesGraph = validator.shapesGraph;
|
|
123
|
+
const nodeShape = shapesGraph.shapesWithTarget.find((shape) => !shape.isPropertyShape && !shape.deactivated);
|
|
124
|
+
if (!nodeShape) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
const targetClassTerms = nodeShape.shapeNodePointer.out(sh.targetClass).terms;
|
|
128
|
+
const targetClasses = targetClassTerms.filter((term) => term.termType === 'NamedNode');
|
|
129
|
+
const targetNodes = nodeShape.shapeNodePointer.out(sh.targetNode).terms;
|
|
130
|
+
if (targetClasses.length === 0 && targetNodes.length === 0) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
const propertyShapeTerms = nodeShape.shapeNodePointer.out(sh.property).terms;
|
|
134
|
+
const columns = [];
|
|
135
|
+
for (const propertyShapeTerm of propertyShapeTerms) {
|
|
136
|
+
const propertyShape = shapesGraph.getShape(propertyShapeTerm);
|
|
137
|
+
if (propertyShape.deactivated) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const path = propertyShape.pathObject;
|
|
141
|
+
if (!isRdfTerm(path) || path.termType !== 'NamedNode') {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const nameTerm = propertyShape.shapeNodePointer.out(sh.name).term;
|
|
145
|
+
const name = nameTerm && nameTerm.termType === 'Literal' ? nameTerm.value : undefined;
|
|
146
|
+
columns.push({ path, name });
|
|
147
|
+
}
|
|
148
|
+
const usedNames = new Set(['focus']);
|
|
149
|
+
const variables = columns.map((column) => {
|
|
150
|
+
const base = normalizeSparqlVariableName(column.name || localName(column.path.value) || 'value');
|
|
151
|
+
const unique = uniqueVariableName(base, usedNames);
|
|
152
|
+
usedNames.add(unique);
|
|
153
|
+
const sourceVariable = uniqueVariableName(`__${unique}`, usedNames);
|
|
154
|
+
usedNames.add(sourceVariable);
|
|
155
|
+
return {
|
|
156
|
+
path: column.path,
|
|
157
|
+
variable: unique,
|
|
158
|
+
sourceVariable,
|
|
159
|
+
name: column.name
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
const selectVars = [
|
|
163
|
+
'?focus',
|
|
164
|
+
...variables.map((entry) => `(GROUP_CONCAT(DISTINCT STR(?${entry.sourceVariable}); SEPARATOR=", ") AS ?${entry.variable})`)
|
|
165
|
+
].join(' ');
|
|
166
|
+
const whereLines = [];
|
|
167
|
+
const graphLines = [];
|
|
168
|
+
if (targetClasses.length > 0) {
|
|
169
|
+
const values = targetClasses.map((term) => `<${term.value}>`).join(' ');
|
|
170
|
+
whereLines.push(` VALUES ?__targetClass { ${values} }`);
|
|
171
|
+
graphLines.push(' ?focus a ?__targetClass .');
|
|
172
|
+
}
|
|
173
|
+
if (targetNodes.length > 0) {
|
|
174
|
+
const values = targetNodes.map((term) => termToSparql(term)).join(' ');
|
|
175
|
+
whereLines.push(` VALUES ?focus { ${values} }`);
|
|
176
|
+
}
|
|
177
|
+
for (const entry of variables) {
|
|
178
|
+
graphLines.push(` OPTIONAL { ?focus <${entry.path.value}> ?${entry.sourceVariable} . }`);
|
|
179
|
+
}
|
|
180
|
+
whereLines.push(` GRAPH <${escapeIriForSparql(graphIri)}> {`);
|
|
181
|
+
whereLines.push(...graphLines);
|
|
182
|
+
whereLines.push(' }');
|
|
183
|
+
const columnVariables = ['focus', ...variables.map((entry) => entry.variable)];
|
|
184
|
+
const columnLabels = new Map([['focus', 'focus']]);
|
|
185
|
+
for (const variable of variables) {
|
|
186
|
+
columnLabels.set(variable.variable, variable.name || variable.variable);
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
sparql: [
|
|
190
|
+
`SELECT ${selectVars}`,
|
|
191
|
+
'WHERE {',
|
|
192
|
+
...whereLines,
|
|
193
|
+
'}',
|
|
194
|
+
'GROUP BY ?focus',
|
|
195
|
+
].join('\n'),
|
|
196
|
+
columnVariables,
|
|
197
|
+
columnLabels,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
function buildValidationConstructQuery(contextIri) {
|
|
201
|
+
return [
|
|
202
|
+
'CONSTRUCT {',
|
|
203
|
+
' ?s ?p ?o .',
|
|
204
|
+
' ?s a ?sType .',
|
|
205
|
+
' ?o a ?oType .',
|
|
206
|
+
'}',
|
|
207
|
+
'WHERE {',
|
|
208
|
+
` GRAPH <${contextIri}> { ?s ?p ?o }`,
|
|
209
|
+
` OPTIONAL { GRAPH ?g1 { ?s a ?sType } FILTER(?g1 != <${contextIri}>) }`,
|
|
210
|
+
' OPTIONAL {',
|
|
211
|
+
' FILTER(isIRI(?o) || isBlank(?o))',
|
|
212
|
+
` GRAPH ?g2 { ?o a ?oType } FILTER(?g2 != <${contextIri}>)`,
|
|
213
|
+
' }',
|
|
214
|
+
'}',
|
|
215
|
+
].join('\n');
|
|
216
|
+
}
|
|
217
|
+
function formatValidationField(value) {
|
|
218
|
+
if (value === undefined || value === null)
|
|
219
|
+
return undefined;
|
|
220
|
+
if (Array.isArray(value)) {
|
|
221
|
+
const parts = value
|
|
222
|
+
.map((entry) => formatValidationField(entry))
|
|
223
|
+
.filter((entry) => Boolean(entry));
|
|
224
|
+
return parts.join('; ');
|
|
225
|
+
}
|
|
226
|
+
if (typeof value === 'string')
|
|
227
|
+
return value;
|
|
228
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
229
|
+
return String(value);
|
|
230
|
+
if (typeof value === 'object' && 'value' in value) {
|
|
231
|
+
const raw = value.value;
|
|
232
|
+
return typeof raw === 'string' ? raw : String(raw);
|
|
233
|
+
}
|
|
234
|
+
return String(value);
|
|
235
|
+
}
|
|
236
|
+
function collectShaclPropertyDisplayNames(shapeQuads) {
|
|
237
|
+
const SH_PATH = 'http://www.w3.org/ns/shacl#path';
|
|
238
|
+
const SH_NAME = 'http://www.w3.org/ns/shacl#name';
|
|
239
|
+
const pathByPropertyShape = new Map();
|
|
240
|
+
const nameByPropertyShape = new Map();
|
|
241
|
+
const shapeKey = (term) => {
|
|
242
|
+
if (term.termType !== 'NamedNode' && term.termType !== 'BlankNode') {
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
return `${term.termType}:${term.value}`;
|
|
246
|
+
};
|
|
247
|
+
for (const quad of shapeQuads) {
|
|
248
|
+
const key = shapeKey(quad.subject);
|
|
249
|
+
if (!key) {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
if (quad.predicate.value === SH_PATH && quad.object.termType === 'NamedNode') {
|
|
253
|
+
pathByPropertyShape.set(key, quad.object.value);
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
if (quad.predicate.value === SH_NAME && quad.object.termType === 'Literal') {
|
|
257
|
+
const label = quad.object.value.trim();
|
|
258
|
+
if (label.length > 0) {
|
|
259
|
+
nameByPropertyShape.set(key, label);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
const result = new Map();
|
|
264
|
+
for (const [key, path] of pathByPropertyShape.entries()) {
|
|
265
|
+
const name = nameByPropertyShape.get(key);
|
|
266
|
+
if (name && !result.has(path)) {
|
|
267
|
+
result.set(path, name);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return result;
|
|
271
|
+
}
|
|
272
|
+
function stripShaclFrontMatter(raw) {
|
|
273
|
+
let content = raw;
|
|
274
|
+
const frontmatterRegex = /^---\s*[\r\n]+([\s\S]*?)[\r\n]+---\s*/;
|
|
275
|
+
const match = frontmatterRegex.exec(content);
|
|
276
|
+
if (match) {
|
|
277
|
+
content = content.substring(match[0].length);
|
|
278
|
+
}
|
|
279
|
+
return content;
|
|
280
|
+
}
|
|
281
|
+
function termToSparql(term) {
|
|
282
|
+
if (term.termType === 'NamedNode') {
|
|
283
|
+
return `<${term.value}>`;
|
|
284
|
+
}
|
|
285
|
+
if (term.termType === 'BlankNode') {
|
|
286
|
+
return `_:${term.value}`;
|
|
287
|
+
}
|
|
288
|
+
if (term.termType === 'Literal') {
|
|
289
|
+
const escaped = term.value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
290
|
+
if (term.language) {
|
|
291
|
+
return `"${escaped}"@${term.language}`;
|
|
292
|
+
}
|
|
293
|
+
if (term.datatype?.value) {
|
|
294
|
+
return `"${escaped}"^^<${term.datatype.value}>`;
|
|
295
|
+
}
|
|
296
|
+
return `"${escaped}"`;
|
|
297
|
+
}
|
|
298
|
+
return `"${term.value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
299
|
+
}
|
|
300
|
+
function normalizeSparqlVariableName(raw) {
|
|
301
|
+
const normalized = raw.replace(/[^A-Za-z0-9_]/g, '_');
|
|
302
|
+
if (!normalized) {
|
|
303
|
+
return 'value';
|
|
304
|
+
}
|
|
305
|
+
if (!/^[A-Za-z_]/.test(normalized)) {
|
|
306
|
+
return `v_${normalized}`;
|
|
307
|
+
}
|
|
308
|
+
return normalized;
|
|
309
|
+
}
|
|
310
|
+
function uniqueVariableName(base, used) {
|
|
311
|
+
if (!used.has(base)) {
|
|
312
|
+
return base;
|
|
313
|
+
}
|
|
314
|
+
let index = 2;
|
|
315
|
+
while (used.has(`${base}_${index}`)) {
|
|
316
|
+
index += 1;
|
|
317
|
+
}
|
|
318
|
+
return `${base}_${index}`;
|
|
319
|
+
}
|
|
320
|
+
function localName(iri) {
|
|
321
|
+
const hash = iri.lastIndexOf('#');
|
|
322
|
+
if (hash >= 0 && hash < iri.length - 1) {
|
|
323
|
+
return iri.slice(hash + 1);
|
|
324
|
+
}
|
|
325
|
+
const slash = iri.lastIndexOf('/');
|
|
326
|
+
if (slash >= 0 && slash < iri.length - 1) {
|
|
327
|
+
return iri.slice(slash + 1);
|
|
328
|
+
}
|
|
329
|
+
return iri;
|
|
330
|
+
}
|
|
331
|
+
function isRdfTerm(value) {
|
|
332
|
+
return typeof value === 'object' && value !== null && 'termType' in value;
|
|
333
|
+
}
|
|
334
|
+
function escapeIriForSparql(iri) {
|
|
335
|
+
return iri.replace(/>/g, '\\>');
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=owl-shacl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owl-shacl.js","sourceRoot":"","sources":["../../src/owl/owl-shacl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type * as RDF from '@rdfjs/types';
|
|
2
|
+
import type { NamedNode } from 'n3';
|
|
3
|
+
import type { OwlABoxEntailmentState, OwlImportGraph, OwlInferenceRunner, OwlStore } from './owl-interfaces.js';
|
|
4
|
+
import { deriveSelectQueryFromShacl, type DerivedShaclSelectQuery } from './owl-shacl.js';
|
|
5
|
+
export interface RDFTerm {
|
|
6
|
+
termType: 'NamedNode' | 'Literal' | 'BlankNode';
|
|
7
|
+
value: string;
|
|
8
|
+
datatype?: string;
|
|
9
|
+
language?: string;
|
|
10
|
+
}
|
|
11
|
+
export type QueryRow = Map<string, RDFTerm>;
|
|
12
|
+
export interface QueryResult {
|
|
13
|
+
success: boolean;
|
|
14
|
+
rows: QueryRow[];
|
|
15
|
+
warnings: string[];
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ConstructResult {
|
|
19
|
+
success: boolean;
|
|
20
|
+
quads: RDF.Quad[];
|
|
21
|
+
warnings: string[];
|
|
22
|
+
error?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface AskResult {
|
|
25
|
+
success: boolean;
|
|
26
|
+
result: boolean;
|
|
27
|
+
warnings: string[];
|
|
28
|
+
error?: string;
|
|
29
|
+
}
|
|
30
|
+
export type DerivedShapeSelectQuery = DerivedShaclSelectQuery;
|
|
31
|
+
export declare const deriveSelectQueryFromShape: typeof deriveSelectQueryFromShacl;
|
|
32
|
+
export declare class SparqlService {
|
|
33
|
+
private readonly reasoningStore;
|
|
34
|
+
private readonly importGraph;
|
|
35
|
+
private readonly aboxEntailmentCache;
|
|
36
|
+
private readonly reasoningService;
|
|
37
|
+
private readonly engine;
|
|
38
|
+
private readonly filteredStoreCache;
|
|
39
|
+
private readonly dirtyFilteredStores;
|
|
40
|
+
constructor(reasoningStore: OwlStore, importGraph: OwlImportGraph, aboxEntailmentCache: OwlABoxEntailmentState, reasoningService: OwlInferenceRunner);
|
|
41
|
+
/**
|
|
42
|
+
* Executes a SPARQL query over the model's reasoned context.
|
|
43
|
+
* Queries must use explicit GRAPH patterns to access data.
|
|
44
|
+
* Available named graphs for a model context are:
|
|
45
|
+
* <modelNamespace> - asserted quads
|
|
46
|
+
* <modelNamespace__entailments> - inferred quads
|
|
47
|
+
* The same pattern applies to all models in the import closure.
|
|
48
|
+
*/
|
|
49
|
+
query(modelUri: string, sparql: string): Promise<QueryResult>;
|
|
50
|
+
/**
|
|
51
|
+
* Executes a SPARQL SELECT query over currently available store state.
|
|
52
|
+
* This method does not trigger inference refresh.
|
|
53
|
+
* The same named-graph contract applies as query(): explicit GRAPH patterns are required.
|
|
54
|
+
*/
|
|
55
|
+
queryRaw(modelUri: string, sparql: string): Promise<QueryResult>;
|
|
56
|
+
construct(modelUri: string, sparql: string): Promise<ConstructResult>;
|
|
57
|
+
ask(modelUri: string, sparql: string): Promise<AskResult>;
|
|
58
|
+
getAvailableGraphs(modelUri: string): NamedNode[];
|
|
59
|
+
invalidateFilteredStore(modelUri: string): void;
|
|
60
|
+
removeFilteredStore(modelUri: string): void;
|
|
61
|
+
private querySelect;
|
|
62
|
+
private ensureFreshEntailments;
|
|
63
|
+
private resolveBaseIri;
|
|
64
|
+
private getQueryContext;
|
|
65
|
+
private toRdfTerm;
|
|
66
|
+
private isQueryValueTerm;
|
|
67
|
+
private toMissingModelsWarnings;
|
|
68
|
+
private composeWarnings;
|
|
69
|
+
private createFilteredStore;
|
|
70
|
+
private getOrCreateFilteredStore;
|
|
71
|
+
}
|