@comake/skl-js-engine 1.5.3 → 1.5.5
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/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.d.ts +3 -0
- package/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.d.ts.map +1 -1
- package/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.js +92 -0
- package/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.js.map +1 -1
- package/dist/util/TripleUtil.d.ts.map +1 -1
- package/dist/util/TripleUtil.js +14 -2
- package/dist/util/TripleUtil.js.map +1 -1
- package/package.json +1 -1
- package/src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts +106 -1
- package/src/util/TripleUtil.ts +22 -2
|
@@ -24,6 +24,9 @@ export declare class SparqlUpdateBuilder {
|
|
|
24
24
|
buildDeleteAll(): Update;
|
|
25
25
|
private idsAndAttributesToGraphDeletionsAndInsertions;
|
|
26
26
|
private partitionAttributes;
|
|
27
|
+
private createBlankNodeCleanupUpdates;
|
|
28
|
+
private shouldCleanupBlankNodeSubgraphForValue;
|
|
29
|
+
private createBlankNodeCleanupUpdate;
|
|
27
30
|
private entitiesToGraphDeletionsAndInsertions;
|
|
28
31
|
private idsToGraphDropUpdates;
|
|
29
32
|
private entitiesToGraphDropUpdates;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SparqlUpdateBuilder.d.ts","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,MAAM,EAGN,kBAAkB,
|
|
1
|
+
{"version":3,"file":"SparqlUpdateBuilder.d.ts","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,MAAM,EAGN,kBAAkB,EAGnB,MAAM,UAAU,CAAC;AAsBlB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,mBAAmB,EAAE,UAAU,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,UAAU,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;gBAErB,IAAI,CAAC,EAAE,uBAAuB;IAK1C,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IAMnF,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAmBxD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAMnD,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAMxD,cAAc,IAAI,MAAM;IAI/B,OAAO,CAAC,6CAA6C;IAsFrD,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,6BAA6B;IAYrC,OAAO,CAAC,sCAAsC;IAgB9C,OAAO,CAAC,4BAA4B;IAyEpC,OAAO,CAAC,qCAAqC;IAgB7C,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,8BAA8B;IAwBtC,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,wCAAwC;IAchD,OAAO,CAAC,2CAA2C;IAenD,OAAO,CAAC,gDAAgD;IAYxD,OAAO,CAAC,wCAAwC;IAiChD,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,wBAAwB;CAKjC"}
|
|
@@ -60,6 +60,7 @@ class SparqlUpdateBuilder {
|
|
|
60
60
|
const { triples: insertionTriples, insertions: insertionInsertions } = this.partialEntityToTriples(subject, attributesToUpdate);
|
|
61
61
|
const { triples: deleteOnlyTriples } = this.partialEntityToDeletionTriples(attributesToDelete, subject);
|
|
62
62
|
const updates = [];
|
|
63
|
+
updates.push(...this.createBlankNodeCleanupUpdates(subject, attributesToUpdate));
|
|
63
64
|
if (deletionTriples.length > 0) {
|
|
64
65
|
updates.push({
|
|
65
66
|
updateType: 'insertdelete',
|
|
@@ -135,6 +136,97 @@ class SparqlUpdateBuilder {
|
|
|
135
136
|
});
|
|
136
137
|
return { attributesToUpdate, attributesToDelete };
|
|
137
138
|
}
|
|
139
|
+
createBlankNodeCleanupUpdates(subject, attributesToUpdate) {
|
|
140
|
+
const updateKeysToCleanup = Object.entries(attributesToUpdate)
|
|
141
|
+
.filter(([, value]) => this.shouldCleanupBlankNodeSubgraphForValue(value))
|
|
142
|
+
.map(([key]) => key);
|
|
143
|
+
return updateKeysToCleanup.map((predicate) => this.createBlankNodeCleanupUpdate(subject, predicate));
|
|
144
|
+
}
|
|
145
|
+
shouldCleanupBlankNodeSubgraphForValue(value) {
|
|
146
|
+
return (0, Util_1.ensureArray)(value).some((valueItem) => {
|
|
147
|
+
if (!valueItem || typeof valueItem !== 'object') {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
const nodeObject = valueItem;
|
|
151
|
+
if ('@value' in nodeObject) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
if ('@id' in nodeObject && typeof nodeObject['@id'] === 'string') {
|
|
155
|
+
return nodeObject['@id'].startsWith('_:');
|
|
156
|
+
}
|
|
157
|
+
return true;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
createBlankNodeCleanupUpdate(subject, predicate) {
|
|
161
|
+
const existingObjectVariable = data_model_1.default.variable(this.variableGenerator.getNext());
|
|
162
|
+
const existingBlankNodeVariable = data_model_1.default.variable(this.variableGenerator.getNext());
|
|
163
|
+
const existingBlankPredicateVariable = data_model_1.default.variable(this.variableGenerator.getNext());
|
|
164
|
+
const existingBlankObjectVariable = data_model_1.default.variable(this.variableGenerator.getNext());
|
|
165
|
+
const existingIncomingSubjectVariable = data_model_1.default.variable(this.variableGenerator.getNext());
|
|
166
|
+
const existingIncomingPredicateVariable = data_model_1.default.variable(this.variableGenerator.getNext());
|
|
167
|
+
const predicateTerm = predicate === '@type' ? SparqlUtil_1.rdfTypeNamedNode : data_model_1.default.namedNode(predicate);
|
|
168
|
+
// Traverse any outgoing predicate path from the old predicate value to clean nested blank-node trees.
|
|
169
|
+
const anyPredicatePath = {
|
|
170
|
+
type: 'path',
|
|
171
|
+
pathType: '!',
|
|
172
|
+
items: [data_model_1.default.namedNode('urn:skl-js-engine:blank-node-cleanup')]
|
|
173
|
+
};
|
|
174
|
+
const anyPredicatePathZeroOrMore = (0, SparqlUtil_1.createSparqlZeroOrMorePredicate)([anyPredicatePath]);
|
|
175
|
+
const oldRootTriple = { subject, predicate: predicateTerm, object: existingObjectVariable };
|
|
176
|
+
const blankOutgoingTriple = {
|
|
177
|
+
subject: existingBlankNodeVariable,
|
|
178
|
+
predicate: existingBlankPredicateVariable,
|
|
179
|
+
object: existingBlankObjectVariable
|
|
180
|
+
};
|
|
181
|
+
const incomingToBlankTriple = {
|
|
182
|
+
subject: existingIncomingSubjectVariable,
|
|
183
|
+
predicate: existingIncomingPredicateVariable,
|
|
184
|
+
object: existingBlankNodeVariable
|
|
185
|
+
};
|
|
186
|
+
const existingBlankPathTriple = {
|
|
187
|
+
subject: existingObjectVariable,
|
|
188
|
+
predicate: anyPredicatePathZeroOrMore,
|
|
189
|
+
object: existingBlankNodeVariable
|
|
190
|
+
};
|
|
191
|
+
const blankNodeFilters = [
|
|
192
|
+
(0, SparqlUtil_1.createSparqlFilterWithExpression)({
|
|
193
|
+
type: 'operation',
|
|
194
|
+
operator: 'isblank',
|
|
195
|
+
args: [existingObjectVariable]
|
|
196
|
+
}),
|
|
197
|
+
(0, SparqlUtil_1.createSparqlFilterWithExpression)({
|
|
198
|
+
type: 'operation',
|
|
199
|
+
operator: 'isblank',
|
|
200
|
+
args: [existingBlankNodeVariable]
|
|
201
|
+
})
|
|
202
|
+
];
|
|
203
|
+
return {
|
|
204
|
+
updateType: 'insertdelete',
|
|
205
|
+
delete: [(0, SparqlUtil_1.createSparqlGraphQuads)(subject, [blankOutgoingTriple, incomingToBlankTriple])],
|
|
206
|
+
insert: [],
|
|
207
|
+
where: [
|
|
208
|
+
(0, SparqlUtil_1.createSparqlOptional)([
|
|
209
|
+
(0, SparqlUtil_1.createSparqlBasicGraphPattern)([
|
|
210
|
+
oldRootTriple,
|
|
211
|
+
existingBlankPathTriple,
|
|
212
|
+
blankOutgoingTriple
|
|
213
|
+
]),
|
|
214
|
+
...blankNodeFilters
|
|
215
|
+
]),
|
|
216
|
+
(0, SparqlUtil_1.createSparqlOptional)([
|
|
217
|
+
(0, SparqlUtil_1.createSparqlBasicGraphPattern)([
|
|
218
|
+
oldRootTriple,
|
|
219
|
+
existingBlankPathTriple,
|
|
220
|
+
incomingToBlankTriple
|
|
221
|
+
]),
|
|
222
|
+
...blankNodeFilters
|
|
223
|
+
])
|
|
224
|
+
],
|
|
225
|
+
using: {
|
|
226
|
+
default: [subject]
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
}
|
|
138
230
|
entitiesToGraphDeletionsAndInsertions(entities) {
|
|
139
231
|
return entities.reduce((obj, entity) => {
|
|
140
232
|
const entityGraphName = data_model_1.default.namedNode(entity['@id']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SparqlUpdateBuilder.js","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts"],"names":[],"mappings":";;;;;;AAAA,uDAA2C;AAC3C,mEAA4C;AAY5C,kDAAqD;AACrD,yDAgBkC;AAClC,yDAA0D;AAE1D,6CAAiD;AACjD,2DAAwD;AAkBxD,MAAa,mBAAmB;IAI9B,YAAmB,IAA8B;QAC/C,IAAI,CAAC,iBAAiB,GAAG,IAAI,qCAAiB,EAAE,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,KAAK,CAAC;IACpD,CAAC;IAEM,kBAAkB,CAAC,OAA0B,EAAE,UAA2B;QAC/E,MAAM,GAAG,GAAG,IAAA,kBAAW,EAAC,OAAO,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,6CAA6C,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACpF,OAAO,IAAA,+BAAkB,EAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAEM,WAAW,CAAC,gBAAmC;QACpD,MAAM,QAAQ,GAAG,IAAA,kBAAW,EAAC,gBAAgB,CAAC,CAAC;QAC/C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC,qCAAqC,CAAC,QAAQ,CAAC,CAAC;QACxG,MAAM,YAAY,GAA0B;YAC1C,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,UAAU;SACnB,CAAC;QACF,MAAM,OAAO,GAAG,CAAE,GAAG,KAAK,EAAE,YAAY,CAAE,CAAC;QAC3C,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;YAClC,OAAO,CAAC,IAAI,CAAC;gBACX,UAAU,EAAE,cAAc;gBAC1B,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,mBAAmB;gBAC3B,KAAK,EAAE,CAAE,oBAAO,CAAE;aACnB,CAAC,CAAC;SACJ;QACD,OAAO,IAAA,+BAAkB,EAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAEM,eAAe,CAAC,OAA0B;QAC/C,MAAM,GAAG,GAAG,IAAA,kBAAW,EAAC,OAAO,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,IAAA,+BAAkB,EAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAEM,WAAW,CAAC,gBAAmC;QACpD,MAAM,QAAQ,GAAG,IAAA,kBAAW,EAAC,gBAAgB,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACxD,OAAO,IAAA,+BAAkB,EAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAEM,cAAc;QACnB,OAAO,IAAA,+BAAkB,EAAC,CAAE,oBAAO,CAAE,CAAC,CAAC;IACzC,CAAC;IAEO,6CAA6C,CACnD,GAAa,EACb,UAA2B;QAE3B,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAA2B,EAAE;YACjD,MAAM,OAAO,GAAG,oBAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;YACxF,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,8BAA8B,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YACpI,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YAChI,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,8BAA8B,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YAExG,MAAM,OAAO,GAA4B,EAAE,CAAC;YAE5C,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,OAAO,CAAC,IAAI,CAAC;oBACX,UAAU,EAAE,cAAc;oBAC1B,MAAM,EAAE,CAAE,IAAA,mCAAsB,EAAC,OAAO,EAAE,eAAe,CAAC,CAAE;oBAC5D,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,eAAe,CAAC,GAAG,CACxB,CAAC,MAAM,EAAW,EAAE,CAAC,IAAA,iCAAoB,EAAC,CAAE,IAAA,0CAA6B,EAAC,CAAE,MAAM,CAAE,CAAC,CAAE,CAAC,CACzF;oBACD,KAAK,EAAE;wBACL,OAAO,EAAE,CAAE,OAAO,CAAE;qBACrB;iBACuB,CAAC,CAAC;aAC7B;YAED,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE;gBACxC,OAAO,CAAC,IAAI,CAAC;oBACX,UAAU,EAAE,cAAc;oBAC1B,MAAM,EAAE,CAAE,QAAQ,CAAE;oBACpB,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE;wBACL,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CACrB,CAAC,MAAM,EAAW,EAAE,CAAC,IAAA,iCAAoB,EAAC,CAAE,IAAA,0CAA6B,EAAC,CAAE,MAAM,CAAE,CAAC,CAAE,CAAC,CACzF;qBACF;oBACD,KAAK,EAAE;wBACL,OAAO,EAAE,CAAE,QAAQ,CAAC,IAAI,CAAE;qBAC3B;iBACuB,CAAC,CAAC;aAC7B;YAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,OAAO,CAAC,IAAI,CAAC;oBACX,UAAU,EAAE,QAAQ;oBACpB,MAAM,EAAE,CAAE,IAAA,mCAAsB,EAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,GAAG,mBAAmB,CAAE;iBAC7D,CAAC,CAAC;aAC7B;YAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,OAAO,CAAC,IAAI,CAAC;oBACX,UAAU,EAAE,cAAc;oBAC1B,MAAM,EAAE,CAAE,IAAA,mCAAsB,EAAC,OAAO,EAAE,iBAAiB,CAAC,CAAE;oBAC9D,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAC1B,CAAC,MAAM,EAAW,EAAE,CAAC,IAAA,iCAAoB,EAAC,CAAE,IAAA,0CAA6B,EAAC,CAAE,MAAM,CAAE,CAAC,CAAE,CAAC,CACzF;oBACD,KAAK,EAAE;wBACL,OAAO,EAAE,CAAE,OAAO,CAAE;qBACrB;iBACuB,CAAC,CAAC;aAC7B;YAED,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;YAEhH,IAAI,IAAI,CAAC,aAAa,IAAI,aAAa,EAAE;gBACvC,MAAM,gBAAgB,GAAG,oBAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChF,MAAM,sBAAsB,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;gBAC1F,MAAM,uBAAuB,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAQ,EAAE,MAAM,EAAE,gBAAG,EAAE,CAAC;gBAC9E,OAAO,CAAC,IAAI,CAAC;oBACX,UAAU,EAAE,cAAc;oBAC1B,MAAM,EAAE,CAAE,IAAA,mCAAsB,EAAC,OAAO,EAAE,CAAE,sBAAsB,CAAE,CAAC,CAAE;oBACvE,MAAM,EAAE,CAAE,IAAA,mCAAsB,EAAC,OAAO,EAAE,CAAE,uBAAuB,CAAE,CAAC,CAAE;oBACxE,KAAK,EAAE,CAAE,IAAA,iCAAoB,EAAC,CAAE,IAAA,0CAA6B,EAAC,CAAE,sBAAsB,CAAE,CAAC,CAAE,CAAC,EAAE,oBAAO,CAAE;oBACvG,KAAK,EAAE;wBACL,OAAO,EAAE,CAAE,OAAO,CAAE;qBACrB;iBACuB,CAAC,CAAC;aAC7B;YAED,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB,CACzB,UAA2B;QAE3B,MAAM,kBAAkB,GAAoB,EAAE,CAAC;QAC/C,MAAM,kBAAkB,GAAoB,EAAE,CAAC;QAE/C,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,GAAG,EAAE,KAAK,CAAE,EAAE,EAAE;YACpD,IAAI,GAAG,KAAK,KAAK,EAAE;gBACjB,OAAO;aACR;YACD,IAAI,KAAK,KAAK,IAAI,EAAE;gBAClB,kBAAkB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACjC;iBAAM,IAAI,KAAK,KAAK,SAAS,EAAE;gBAC9B,kBAAkB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACjC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;IACpD,CAAC;IAEO,qCAAqC,CAAC,QAAkB;QAC9D,OAAO,QAAQ,CAAC,MAAM,CACpB,CAAC,GAAwB,EAAE,MAAM,EAAuB,EAAE;YACxD,MAAM,eAAe,GAAG,oBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACtG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAA,oCAAuB,EAAC,eAAe,CAAC,CAAC,CAAC;YACzD,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAA,mCAAsB,EAAC,eAAe,EAAE,aAAa,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;YAC3F,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAA,mCAAsB,EAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;aACzF;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAC,CACtD,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAAC,GAAa;QACzC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAmB,EAAE;YACrC,MAAM,eAAe,GAAG,oBAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAClD,OAAO,IAAA,mCAAsB,EAAC,eAAe,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,0BAA0B,CAAC,QAAkB;QACnD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAmB,EAAE;YAC9C,MAAM,eAAe,GAAG,oBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,OAAO,IAAA,mCAAsB,EAAC,eAAe,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,8BAA8B,CAAC,MAAkB,EAAE,OAAkB;QAC3E,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAmD,EAAE,CAAE,GAAG,EAAE,KAAK,CAAE,EAAkD,EAAE;YAC3J,IAAI,GAAG,KAAK,KAAK,EAAE;gBACjB,IAAI,SAAS,GAAiB,EAAE,CAAC;gBACjC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,EAAE;oBAChH,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,8BAA8B,CAAC,KAAmB,EAAE,oBAAW,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC7J,SAAS,GAAG,CAAE,GAAG,SAAS,EAAE,IAAA,mCAAsB,EAAC,oBAAW,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,GAAG,eAAe,CAAE,CAAC;iBAC9H;gBACD,OAAO;oBACL,OAAO,EAAE;wBACP,GAAG,GAAG,CAAC,OAAO;wBACd,IAAI,CAAC,gDAAgD,CACnD,OAAO,EACP,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,6BAAgB,CAAC,CAAC,CAAC,oBAAW,CAAC,SAAS,CAAC,GAAG,CAAC,EAC/D,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CACjC;qBACF;oBACD,SAAS,EAAE,CAAE,GAAG,GAAG,CAAC,SAAS,EAAE,GAAG,SAAS,CAAE;iBAC9C,CAAC;aACH;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAEO,sBAAsB,CAAC,OAAkB,EAAE,MAAkB;QACnE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAoD,EAAE,CAAE,GAAG,EAAE,KAAK,CAAE,EAAmD,EAAE;YAC7J,MAAM,MAAM,GAAG,IAAA,kBAAW,EAAC,KAAK,CAAC,CAAC;YAClC,IAAI,GAAG,KAAK,KAAK,EAAE;gBACjB,IAAI,gBAAiE,CAAC;gBACtE,IAAI,GAAG,KAAK,OAAO,EAAE;oBACnB,gBAAgB,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,2CAA2C,CAC5E,OAAO,EACP,6BAAgB,EAChB,MAAkB,CACnB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;iBACrB;qBAAM;oBACL,gBAAgB,GAAG,IAAI,CAAC,wCAAwC,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;iBACxF;gBACD,OAAO,EAAE,OAAO,EAAE,CAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAE,EAAE,UAAU,EAAE,CAAE,GAAG,GAAG,CAAC,UAAU,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAE,EAAE,CAAC;aACxI;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAEO,eAAe,CAAC,MAAkB,EAAE,OAA8B;QACxE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAoD,EAAE,CAAE,GAAG,EAAE,KAAK,CAAE,EAAmD,EAAE;YAC5K,MAAM,MAAM,GAAG,IAAA,kBAAW,EAAC,KAAK,CAAC,CAAC;YAClC,IAAI,GAAG,KAAK,KAAK,EAAE;gBACjB,IAAI,GAAG,KAAK,OAAO,EAAE;oBACnB,MAAM,gBAAgB,GAAG,IAAI,CAAC,2CAA2C,CACvE,OAAO,EACP,6BAAgB,EAChB,MAAkB,CACnB,CAAC;oBACF,OAAO,EAAE,OAAO,EAAE,CAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,gBAAgB,CAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;iBACzF;gBACD,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,GAAG,KAAK,2BAAe,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;oBACtE,MAAM,gBAAgB,GAAG,IAAI,CAAC,wCAAwC,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;oBAC7F,OAAO,EAAE,OAAO,EAAE,CAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAE,EAAE,UAAU,EAAE,CAAE,GAAG,GAAG,CAAC,UAAU,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAE,EAAE,CAAC;iBACxI;aACF;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAEpC,MAAM,gBAAgB,GAAG,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW,EAAE;YAC1D,IAAI,CAAC,CAAC,2BAAe,CAAC,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,EAAE;gBACjD,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,oBAAO,EAAE,MAAM,EAAE,gBAAG,EAAE,CAAC,CAAC;aACrE;YACD,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAQ,EAAE,MAAM,EAAE,gBAAG,EAAE,CAAC,CAAC;SACtE;QACD,OAAO;YACL,aAAa,EAAE,aAAa,CAAC,OAAO;YACpC,UAAU,EAAE,aAAa,CAAC,UAAU;YACpC,gBAAgB;SACjB,CAAC;IACJ,CAAC;IAEO,wCAAwC,CAC9C,OAA8B,EAC9B,SAAiB,EACjB,MAAa;QAEb,MAAM,aAAa,GAAG,oBAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACvD,yFAAyF;QACzF,mFAAmF;QACnF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAoD,EAAE,KAAU,EAAE,EAAE;YACxF,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,wCAAwC,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;YAC7G,OAAO,EAAE,OAAO,EAAE,CAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAE,EAAE,UAAU,EAAE,CAAE,GAAG,GAAG,CAAC,UAAU,EAAE,GAAG,UAAU,CAAE,EAAE,CAAC;QACvG,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAEO,2CAA2C,CACjD,OAA8B,EAC9B,SAAoB,EACpB,MAAgB;QAEhB,OAAO,MAAM,CAAC,GAAG,CACf,CAAC,SAAS,EAAU,EAAE,CACpB,CAAC;YACC,OAAO;YACP,SAAS;YACT,MAAM,EAAE,oBAAW,CAAC,SAAS,CAAC,SAAS,CAAC;SAC9B,CAAA,CACf,CAAC;IACJ,CAAC;IAEO,gDAAgD,CACtD,OAAkB,EAClB,SAAoB,EACpB,KAAa;QAEb,OAAO;YACL,OAAO;YACP,SAAS;YACT,MAAM,EAAE,oBAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;SACpC,CAAC;IACJ,CAAC;IAEO,wCAAwC,CAC9C,OAA8B,EAC9B,SAAoB,EACpB,KAAU;QAEV,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC;QAC3C,IAAI,QAAQ,EAAE;YACZ,IAAI,OAAO,IAAI,KAAK,EAAE;gBACpB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;aAClG;YACD,IAAI,QAAQ,IAAI,KAAK,EAAE;gBACrB,OAAO,EAAE,OAAO,EAAE,CAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,EAAY,CAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;aAC1H;YAED,MAAM,iBAAiB,GAAG,KAAK,IAAI,KAAK,CAAC;YACzC,MAAM,0BAA0B,GAAG,CAAC,iBAAiB,IAAK,KAAK,CAAC,KAAK,CAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACnG,IAAI,0BAA0B,EAAE;gBAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAmB,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;aAC5G;YACD,IAAI,iBAAiB,EAAE;gBACrB,MAAM,OAAO,GAAG;oBACd,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAW,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAY;iBAC9E,CAAC;gBACF,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE;oBAClB,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAmB,EAAE,oBAAW,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAE,GAAG,UAAU,EAAE,IAAA,mCAAsB,EAAC,oBAAW,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAE,EAAE,CAAC;iBAC/H;gBACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;aACpC;SACF;QACD,OAAO,EAAE,OAAO,EAAE,CAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAA,2BAAc,EAAC,KAAK,CAAC,EAAY,CAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC1G,CAAC;IAEO,0BAA0B,CAAC,KAAkB;QACnD,IAAI,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;YACvC,OAAO,oBAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,kBAAG,CAAC,IAAI,CAAC,CAAC;SACvE;QACD,IAAK,KAAa,CAAC,WAAW,CAAC,EAAE;YAC/B,OAAO,oBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAW,EAAG,KAAa,CAAC,WAAW,CAAC,CAAC,CAAC;SACpF;QACD,IAAK,KAAa,CAAC,OAAO,CAAC,EAAE;YAC3B,OAAO,oBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAG,KAAa,CAAC,OAAO,CAAC,CAAC,CAAC;SACjF;QACD,OAAO,IAAA,2BAAc,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;IAEO,mBAAmB,CAAC,OAA8B,EAAE,SAAoB,EAAE,KAAmB;QACnG,MAAM,SAAS,GAAG,oBAAW,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,GAAG,CAAC;YACd,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,0BAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,0BAAa,EAAE,MAAM,EAAE,yBAAY,EAAE,CAAC,CAAC;QAC/E,OAAO;YACL,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;YACzC,GAAG,IAAI,CAAC,wCAAwC,CAAC,SAAS,EAAE,2BAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;YAC7F,GAAG,IAAI;SACR,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAAC,OAA8B,EAAE,SAAoB,EAAE,KAAiB;QACtG,MAAM,SAAS,GAAG,oBAAW,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACjE,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,aAAa,CAAE,CAAC;IACxE,CAAC;CACF;AAhXD,kDAgXC","sourcesContent":["import { RDF } from '@comake/rmlmapper-js';\nimport DataFactory from '@rdfjs/data-model';\nimport type { BlankNode, NamedNode, Term } from '@rdfjs/types';\nimport type { NodeObject, ValueObject } from 'jsonld/jsonld';\nimport type {\n Update,\n GraphQuads,\n Triple,\n InsertDeleteOperation,\n UpdateOperation,\n ClearDropOperation,\n Pattern\n} from 'sparqljs';\nimport { EngineConstants } from '../../../constants';\nimport {\n bindNow,\n created,\n createSparqlBasicGraphPattern,\n createSparqlClearUpdate,\n createSparqlDropUpdate,\n createSparqlGraphQuads,\n createSparqlOptional,\n createSparqlUpdate,\n dropAll,\n firstPredicate,\n modified,\n nilPredicate,\n now,\n rdfTypeNamedNode,\n restPredicate\n} from '../../../util/SparqlUtil';\nimport { valueToLiteral } from '../../../util/TripleUtil';\nimport type { Entity } from '../../../util/Types';\nimport { ensureArray } from '../../../util/Util';\nimport { VariableGenerator } from './VariableGenerator';\n\nexport interface EntityUpdateQueries {\n clear: ClearDropOperation[];\n insertions: GraphQuads[];\n timestampInsertions: GraphQuads[];\n}\n\nexport interface EntityUpdateTriples {\n entityTriples: Triple[];\n timestampTriples: Triple[];\n insertions: GraphQuads[];\n}\n\nexport interface SparqlUpdateBuilderArgs {\n setTimestamps?: boolean;\n}\n\nexport class SparqlUpdateBuilder {\n private readonly variableGenerator: VariableGenerator;\n private readonly setTimestamps: boolean;\n\n public constructor(args?: SparqlUpdateBuilderArgs) {\n this.variableGenerator = new VariableGenerator();\n this.setTimestamps = args?.setTimestamps ?? false;\n }\n\n public buildPartialUpdate(idOrIds: string | string[], attributes: Partial<Entity>): Update {\n const ids = ensureArray(idOrIds);\n const updates = this.idsAndAttributesToGraphDeletionsAndInsertions(ids, attributes);\n return createSparqlUpdate(updates);\n }\n\n public buildUpdate(entityOrEntities: Entity | Entity[]): Update {\n const entities = ensureArray(entityOrEntities);\n const { clear, insertions, timestampInsertions } = this.entitiesToGraphDeletionsAndInsertions(entities);\n const insertUpdate: InsertDeleteOperation = {\n updateType: 'insert',\n insert: insertions\n };\n const updates = [ ...clear, insertUpdate ];\n if (timestampInsertions.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [],\n insert: timestampInsertions,\n where: [ bindNow ]\n });\n }\n return createSparqlUpdate(updates);\n }\n\n public buildDeleteById(idOrIds: string | string[]): Update {\n const ids = ensureArray(idOrIds);\n const drops = this.idsToGraphDropUpdates(ids);\n return createSparqlUpdate(drops);\n }\n\n public buildDelete(entityOrEntities: Entity | Entity[]): Update {\n const entities = ensureArray(entityOrEntities);\n const drops = this.entitiesToGraphDropUpdates(entities);\n return createSparqlUpdate(drops);\n }\n\n public buildDeleteAll(): Update {\n return createSparqlUpdate([ dropAll ]);\n }\n\n private idsAndAttributesToGraphDeletionsAndInsertions(\n ids: string[],\n attributes: Partial<Entity>\n ): InsertDeleteOperation[] {\n return ids.flatMap((id): InsertDeleteOperation[] => {\n const subject = DataFactory.namedNode(id);\n const { attributesToUpdate, attributesToDelete } = this.partitionAttributes(attributes);\n const { triples: deletionTriples, deletions: deletionDeletions } = this.partialEntityToDeletionTriples(attributesToUpdate, subject);\n const { triples: insertionTriples, insertions: insertionInsertions } = this.partialEntityToTriples(subject, attributesToUpdate);\n const { triples: deleteOnlyTriples } = this.partialEntityToDeletionTriples(attributesToDelete, subject);\n\n const updates: InsertDeleteOperation[] = [];\n\n if (deletionTriples.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, deletionTriples) ],\n insert: [],\n where: deletionTriples.map(\n (triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])\n ),\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n for (const deletion of deletionDeletions) {\n updates.push({\n updateType: 'insertdelete',\n delete: [ deletion ],\n insert: [],\n where: [\n ...deletion.triples.map(\n (triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])\n )\n ],\n using: {\n default: [ deletion.name ]\n }\n } as InsertDeleteOperation);\n }\n\n if (insertionTriples.length > 0) {\n updates.push({\n updateType: 'insert',\n insert: [ createSparqlGraphQuads(subject, insertionTriples), ...insertionInsertions ]\n } as InsertDeleteOperation);\n }\n\n if (deleteOnlyTriples.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, deleteOnlyTriples) ],\n insert: [],\n where: deleteOnlyTriples.map(\n (triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])\n ),\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n const hasAnyChanges = deletionTriples.length > 0 || insertionTriples.length > 0 || deleteOnlyTriples.length > 0;\n\n if (this.setTimestamps && hasAnyChanges) {\n const modifiedVariable = DataFactory.variable(this.variableGenerator.getNext());\n const modifiedDeletionTriple = { subject, predicate: modified, object: modifiedVariable };\n const modifiedInsertionTriple = { subject, predicate: modified, object: now };\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, [ modifiedDeletionTriple ]) ],\n insert: [ createSparqlGraphQuads(subject, [ modifiedInsertionTriple ]) ],\n where: [ createSparqlOptional([ createSparqlBasicGraphPattern([ modifiedDeletionTriple ]) ]), bindNow ],\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n return updates;\n });\n }\n\n private partitionAttributes(\n attributes: Partial<Entity>\n ): { attributesToUpdate: Partial<Entity>; attributesToDelete: Partial<Entity> } {\n const attributesToUpdate: Partial<Entity> = {};\n const attributesToDelete: Partial<Entity> = {};\n\n Object.entries(attributes).forEach(([ key, value ]) => {\n if (key === '@id') {\n return;\n }\n if (value === null) {\n attributesToDelete[key] = value;\n } else if (value !== undefined) {\n attributesToUpdate[key] = value;\n }\n });\n\n return { attributesToUpdate, attributesToDelete };\n }\n\n private entitiesToGraphDeletionsAndInsertions(entities: Entity[]): EntityUpdateQueries {\n return entities.reduce(\n (obj: EntityUpdateQueries, entity): EntityUpdateQueries => {\n const entityGraphName = DataFactory.namedNode(entity['@id']);\n const { entityTriples, timestampTriples, insertions } = this.entityToTriples(entity, entityGraphName);\n obj.clear.push(createSparqlClearUpdate(entityGraphName));\n obj.insertions.push(createSparqlGraphQuads(entityGraphName, entityTriples), ...insertions);\n if (timestampTriples.length > 0) {\n obj.timestampInsertions.push(createSparqlGraphQuads(entityGraphName, timestampTriples));\n }\n return obj;\n },\n { clear: [], insertions: [], timestampInsertions: []}\n );\n }\n\n private idsToGraphDropUpdates(ids: string[]): UpdateOperation[] {\n return ids.map((id): UpdateOperation => {\n const entityGraphName = DataFactory.namedNode(id);\n return createSparqlDropUpdate(entityGraphName);\n });\n }\n\n private entitiesToGraphDropUpdates(entities: Entity[]): UpdateOperation[] {\n return entities.map((entity): UpdateOperation => {\n const entityGraphName = DataFactory.namedNode(entity['@id']);\n return createSparqlDropUpdate(entityGraphName);\n });\n }\n\n private partialEntityToDeletionTriples(entity: NodeObject, subject: NamedNode): { triples: Triple[]; deletions: GraphQuads[] } {\n return Object.entries(entity).reduce((acc: { triples: Triple[]; deletions: GraphQuads[] }, [ key, value ]): { triples: Triple[]; deletions: GraphQuads[] } => {\n if (key !== '@id') {\n let deletions: GraphQuads[] = [];\n if (value && typeof value === 'object' && '@id' in value && typeof value['@id'] === 'string' && '@type' in value) {\n const { triples: nestedTriples, deletions: nestedDeletions } = this.partialEntityToDeletionTriples(value as NodeObject, DataFactory.namedNode(value['@id']));\n deletions = [ ...deletions, createSparqlGraphQuads(DataFactory.namedNode(value['@id']), nestedTriples), ...nestedDeletions ];\n }\n return {\n triples: [\n ...acc.triples,\n this.buildTriplesWithSubjectPredicateAndVariableValue(\n subject,\n key === '@type' ? rdfTypeNamedNode : DataFactory.namedNode(key),\n this.variableGenerator.getNext()\n )\n ],\n deletions: [ ...acc.deletions, ...deletions ]\n };\n }\n return acc;\n }, { triples: [], deletions: [] });\n }\n\n private partialEntityToTriples(subject: NamedNode, entity: NodeObject): { triples: Triple[]; insertions: GraphQuads[] } {\n return Object.entries(entity).reduce((acc: { triples: Triple[]; insertions: GraphQuads[] }, [ key, value ]): { triples: Triple[]; insertions: GraphQuads[] } => {\n const values = ensureArray(value);\n if (key !== '@id') {\n let predicateTriples: { triples: Triple[]; insertions: GraphQuads[] };\n if (key === '@type') {\n predicateTriples = { triples: this.buildTriplesWithSubjectPredicateAndIriValue(\n subject,\n rdfTypeNamedNode,\n values as string[]\n ), insertions: [] };\n } else {\n predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n }\n return { triples: [ ...acc.triples, ...predicateTriples.triples ], insertions: [ ...acc.insertions, ...predicateTriples.insertions ] };\n }\n return acc;\n }, { triples: [], insertions: [] });\n }\n\n private entityToTriples(entity: NodeObject, subject: BlankNode | NamedNode): EntityUpdateTriples {\n const entityTriples = Object.entries(entity).reduce((acc: { triples: Triple[]; insertions: GraphQuads[] }, [ key, value ]): { triples: Triple[]; insertions: GraphQuads[] } => {\n const values = ensureArray(value);\n if (key !== '@id') {\n if (key === '@type') {\n const predicateTriples = this.buildTriplesWithSubjectPredicateAndIriValue(\n subject,\n rdfTypeNamedNode,\n values as string[]\n );\n return { triples: [ ...acc.triples, ...predicateTriples ], insertions: acc.insertions };\n }\n if (!(this.setTimestamps && key === EngineConstants.prop.dateModified)) {\n const predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n return { triples: [ ...acc.triples, ...predicateTriples.triples ], insertions: [ ...acc.insertions, ...predicateTriples.insertions ] };\n }\n }\n return acc;\n }, { triples: [], insertions: [] });\n\n const timestampTriples = [];\n if (this.setTimestamps && subject.termType === 'NamedNode') {\n if (!(EngineConstants.prop.dateCreated in entity)) {\n timestampTriples.push({ subject, predicate: created, object: now });\n }\n timestampTriples.push({ subject, predicate: modified, object: now });\n }\n return {\n entityTriples: entityTriples.triples,\n insertions: entityTriples.insertions,\n timestampTriples\n };\n }\n\n private buildTriplesForSubjectPredicateAndValues(\n subject: BlankNode | NamedNode,\n predicate: string,\n values: any[]\n ): { triples: Triple[]; insertions: GraphQuads[] } {\n const predicateTerm = DataFactory.namedNode(predicate);\n // Return values.flatMap((value: any): { triples: Triple[]; insertions: GraphQuads[] } =>\n // this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value));\n return values.reduce((acc: { triples: Triple[]; insertions: GraphQuads[] }, value: any) => {\n const { triples, insertions } = this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value);\n return { triples: [ ...acc.triples, ...triples ], insertions: [ ...acc.insertions, ...insertions ] };\n }, { triples: [], insertions: [] });\n }\n\n private buildTriplesWithSubjectPredicateAndIriValue(\n subject: BlankNode | NamedNode,\n predicate: NamedNode,\n values: string[]\n ): Triple[] {\n return values.map(\n (valueItem): Triple =>\n ({\n subject,\n predicate,\n object: DataFactory.namedNode(valueItem)\n } as Triple)\n );\n }\n\n private buildTriplesWithSubjectPredicateAndVariableValue(\n subject: NamedNode,\n predicate: NamedNode,\n value: string\n ): Triple {\n return {\n subject,\n predicate,\n object: DataFactory.variable(value)\n };\n }\n\n private buildTriplesWithSubjectPredicateAndValue(\n subject: BlankNode | NamedNode,\n predicate: NamedNode,\n value: any\n ): { triples: Triple[]; insertions: GraphQuads[] } {\n const isObject = typeof value === 'object';\n if (isObject) {\n if ('@list' in value) {\n return { triples: this.buildTriplesForList(subject, predicate, value['@list']), insertions: [] };\n }\n if ('@value' in value) {\n return { triples: [ { subject, predicate, object: this.jsonLdValueObjectToLiteral(value) } as Triple ], insertions: [] };\n }\n\n const isReferenceObject = '@id' in value;\n const isBlankNodeReferenceObject = !isReferenceObject || (value['@id'] as string).startsWith('_:');\n if (isBlankNodeReferenceObject) {\n return { triples: this.buildTriplesForBlankNode(subject, predicate, value as NodeObject), insertions: [] };\n }\n if (isReferenceObject) {\n const triples = [ \n { subject, predicate, object: DataFactory.namedNode(value['@id']) } as Triple\n ];\n if (value['@type']) {\n const { entityTriples, insertions } = this.entityToTriples(value as NodeObject, DataFactory.namedNode(value['@id']));\n return { triples, insertions: [ ...insertions, createSparqlGraphQuads(DataFactory.namedNode(value['@id']), entityTriples) ] };\n }\n return { triples, insertions: [] };\n }\n }\n return { triples: [ { subject, predicate, object: valueToLiteral(value) } as Triple ], insertions: [] };\n }\n\n private jsonLdValueObjectToLiteral(value: ValueObject): Term {\n if (typeof value['@value'] === 'object') {\n return DataFactory.literal(JSON.stringify(value['@value']), RDF.JSON);\n }\n if ((value as any)['@language']) {\n return DataFactory.literal(value['@value'] as string, (value as any)['@language']);\n }\n if ((value as any)['@type']) {\n return DataFactory.literal(value['@value'].toString(), (value as any)['@type']);\n }\n return valueToLiteral(value['@value']);\n }\n\n private buildTriplesForList(subject: BlankNode | NamedNode, predicate: NamedNode, value: NodeObject[]): Triple[] {\n const blankNode = DataFactory.blankNode(this.variableGenerator.getNext());\n const rest =\n value.length > 1\n ? this.buildTriplesForList(blankNode, restPredicate, value.slice(1))\n : [{ subject: blankNode, predicate: restPredicate, object: nilPredicate }];\n return [\n { subject, predicate, object: blankNode },\n ...this.buildTriplesWithSubjectPredicateAndValue(blankNode, firstPredicate, value[0]).triples,\n ...rest\n ];\n }\n\n private buildTriplesForBlankNode(subject: BlankNode | NamedNode, predicate: NamedNode, value: NodeObject): Triple[] {\n const blankNode = DataFactory.blankNode(this.variableGenerator.getNext());\n const { entityTriples } = this.entityToTriples(value, blankNode);\n return [{ subject, predicate, object: blankNode }, ...entityTriples ];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SparqlUpdateBuilder.js","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { RDF } from '@comake/rmlmapper-js';\nimport DataFactory from '@rdfjs/data-model';\nimport type { BlankNode, NamedNode, Term } from '@rdfjs/types';\nimport type { NodeObject, ValueObject } from 'jsonld/jsonld';\nimport type {\n Update,\n GraphQuads,\n Triple,\n InsertDeleteOperation,\n UpdateOperation,\n ClearDropOperation,\n Pattern,\n PropertyPath\n} from 'sparqljs';\nimport { EngineConstants } from '../../../constants';\nimport {\n bindNow,\n created,\n createSparqlBasicGraphPattern,\n createSparqlClearUpdate,\n createSparqlFilterWithExpression,\n createSparqlDropUpdate,\n createSparqlGraphQuads,\n createSparqlOptional,\n createSparqlUpdate,\n createSparqlZeroOrMorePredicate,\n dropAll,\n firstPredicate,\n modified,\n nilPredicate,\n now,\n rdfTypeNamedNode,\n restPredicate\n} from '../../../util/SparqlUtil';\nimport { valueToLiteral } from '../../../util/TripleUtil';\nimport type { Entity } from '../../../util/Types';\nimport { ensureArray } from '../../../util/Util';\nimport { VariableGenerator } from './VariableGenerator';\n\nexport interface EntityUpdateQueries {\n clear: ClearDropOperation[];\n insertions: GraphQuads[];\n timestampInsertions: GraphQuads[];\n}\n\nexport interface EntityUpdateTriples {\n entityTriples: Triple[];\n timestampTriples: Triple[];\n insertions: GraphQuads[];\n}\n\nexport interface SparqlUpdateBuilderArgs {\n setTimestamps?: boolean;\n}\n\nexport class SparqlUpdateBuilder {\n private readonly variableGenerator: VariableGenerator;\n private readonly setTimestamps: boolean;\n\n public constructor(args?: SparqlUpdateBuilderArgs) {\n this.variableGenerator = new VariableGenerator();\n this.setTimestamps = args?.setTimestamps ?? false;\n }\n\n public buildPartialUpdate(idOrIds: string | string[], attributes: Partial<Entity>): Update {\n const ids = ensureArray(idOrIds);\n const updates = this.idsAndAttributesToGraphDeletionsAndInsertions(ids, attributes);\n return createSparqlUpdate(updates);\n }\n\n public buildUpdate(entityOrEntities: Entity | Entity[]): Update {\n const entities = ensureArray(entityOrEntities);\n const { clear, insertions, timestampInsertions } = this.entitiesToGraphDeletionsAndInsertions(entities);\n const insertUpdate: InsertDeleteOperation = {\n updateType: 'insert',\n insert: insertions\n };\n const updates = [ ...clear, insertUpdate ];\n if (timestampInsertions.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [],\n insert: timestampInsertions,\n where: [ bindNow ]\n });\n }\n return createSparqlUpdate(updates);\n }\n\n public buildDeleteById(idOrIds: string | string[]): Update {\n const ids = ensureArray(idOrIds);\n const drops = this.idsToGraphDropUpdates(ids);\n return createSparqlUpdate(drops);\n }\n\n public buildDelete(entityOrEntities: Entity | Entity[]): Update {\n const entities = ensureArray(entityOrEntities);\n const drops = this.entitiesToGraphDropUpdates(entities);\n return createSparqlUpdate(drops);\n }\n\n public buildDeleteAll(): Update {\n return createSparqlUpdate([ dropAll ]);\n }\n\n private idsAndAttributesToGraphDeletionsAndInsertions(\n ids: string[],\n attributes: Partial<Entity>\n ): InsertDeleteOperation[] {\n return ids.flatMap((id): InsertDeleteOperation[] => {\n const subject = DataFactory.namedNode(id);\n const { attributesToUpdate, attributesToDelete } = this.partitionAttributes(attributes);\n const { triples: deletionTriples, deletions: deletionDeletions } = this.partialEntityToDeletionTriples(attributesToUpdate, subject);\n const { triples: insertionTriples, insertions: insertionInsertions } = this.partialEntityToTriples(subject, attributesToUpdate);\n const { triples: deleteOnlyTriples } = this.partialEntityToDeletionTriples(attributesToDelete, subject);\n\n const updates: InsertDeleteOperation[] = [];\n updates.push(...this.createBlankNodeCleanupUpdates(subject, attributesToUpdate));\n\n if (deletionTriples.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, deletionTriples) ],\n insert: [],\n where: deletionTriples.map(\n (triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])\n ),\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n for (const deletion of deletionDeletions) {\n updates.push({\n updateType: 'insertdelete',\n delete: [ deletion ],\n insert: [],\n where: [\n ...deletion.triples.map(\n (triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])\n )\n ],\n using: {\n default: [ deletion.name ]\n }\n } as InsertDeleteOperation);\n }\n\n if (insertionTriples.length > 0) {\n updates.push({\n updateType: 'insert',\n insert: [ createSparqlGraphQuads(subject, insertionTriples), ...insertionInsertions ]\n } as InsertDeleteOperation);\n }\n\n if (deleteOnlyTriples.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, deleteOnlyTriples) ],\n insert: [],\n where: deleteOnlyTriples.map(\n (triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])\n ),\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n const hasAnyChanges = deletionTriples.length > 0 || insertionTriples.length > 0 || deleteOnlyTriples.length > 0;\n\n if (this.setTimestamps && hasAnyChanges) {\n const modifiedVariable = DataFactory.variable(this.variableGenerator.getNext());\n const modifiedDeletionTriple = { subject, predicate: modified, object: modifiedVariable };\n const modifiedInsertionTriple = { subject, predicate: modified, object: now };\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, [ modifiedDeletionTriple ]) ],\n insert: [ createSparqlGraphQuads(subject, [ modifiedInsertionTriple ]) ],\n where: [ createSparqlOptional([ createSparqlBasicGraphPattern([ modifiedDeletionTriple ]) ]), bindNow ],\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n return updates;\n });\n }\n\n private partitionAttributes(\n attributes: Partial<Entity>\n ): { attributesToUpdate: Partial<Entity>; attributesToDelete: Partial<Entity> } {\n const attributesToUpdate: Partial<Entity> = {};\n const attributesToDelete: Partial<Entity> = {};\n\n Object.entries(attributes).forEach(([ key, value ]) => {\n if (key === '@id') {\n return;\n }\n if (value === null) {\n attributesToDelete[key] = value;\n } else if (value !== undefined) {\n attributesToUpdate[key] = value;\n }\n });\n\n return { attributesToUpdate, attributesToDelete };\n }\n\n private createBlankNodeCleanupUpdates(\n subject: NamedNode,\n attributesToUpdate: Partial<Entity>\n ): InsertDeleteOperation[] {\n const updateKeysToCleanup = Object.entries(attributesToUpdate)\n .filter(([, value ]): boolean => this.shouldCleanupBlankNodeSubgraphForValue(value))\n .map(([ key ]): string => key);\n return updateKeysToCleanup.map(\n (predicate): InsertDeleteOperation => this.createBlankNodeCleanupUpdate(subject, predicate)\n );\n }\n\n private shouldCleanupBlankNodeSubgraphForValue(value: unknown): boolean {\n return ensureArray(value).some((valueItem: unknown): boolean => {\n if (!valueItem || typeof valueItem !== 'object') {\n return false;\n }\n const nodeObject = valueItem as Record<string, unknown>;\n if ('@value' in nodeObject) {\n return false;\n }\n if ('@id' in nodeObject && typeof nodeObject['@id'] === 'string') {\n return nodeObject['@id'].startsWith('_:');\n }\n return true;\n });\n }\n\n private createBlankNodeCleanupUpdate(subject: NamedNode, predicate: string): InsertDeleteOperation {\n const existingObjectVariable = DataFactory.variable(this.variableGenerator.getNext());\n const existingBlankNodeVariable = DataFactory.variable(this.variableGenerator.getNext());\n const existingBlankPredicateVariable = DataFactory.variable(this.variableGenerator.getNext());\n const existingBlankObjectVariable = DataFactory.variable(this.variableGenerator.getNext());\n const existingIncomingSubjectVariable = DataFactory.variable(this.variableGenerator.getNext());\n const existingIncomingPredicateVariable = DataFactory.variable(this.variableGenerator.getNext());\n const predicateTerm = predicate === '@type' ? rdfTypeNamedNode : DataFactory.namedNode(predicate);\n\n // Traverse any outgoing predicate path from the old predicate value to clean nested blank-node trees.\n const anyPredicatePath = {\n type: 'path',\n pathType: '!',\n items: [ DataFactory.namedNode('urn:skl-js-engine:blank-node-cleanup') ]\n } as PropertyPath;\n const anyPredicatePathZeroOrMore = createSparqlZeroOrMorePredicate([ anyPredicatePath ]);\n const oldRootTriple = { subject, predicate: predicateTerm, object: existingObjectVariable } as Triple;\n const blankOutgoingTriple = {\n subject: existingBlankNodeVariable,\n predicate: existingBlankPredicateVariable,\n object: existingBlankObjectVariable\n } as Triple;\n const incomingToBlankTriple = {\n subject: existingIncomingSubjectVariable,\n predicate: existingIncomingPredicateVariable,\n object: existingBlankNodeVariable\n } as Triple;\n const existingBlankPathTriple = {\n subject: existingObjectVariable,\n predicate: anyPredicatePathZeroOrMore,\n object: existingBlankNodeVariable\n } as Triple;\n const blankNodeFilters = [\n createSparqlFilterWithExpression({\n type: 'operation',\n operator: 'isblank',\n args: [ existingObjectVariable ]\n }),\n createSparqlFilterWithExpression({\n type: 'operation',\n operator: 'isblank',\n args: [ existingBlankNodeVariable ]\n })\n ];\n\n return {\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, [ blankOutgoingTriple, incomingToBlankTriple ]) ],\n insert: [],\n where: [\n createSparqlOptional([\n createSparqlBasicGraphPattern([\n oldRootTriple,\n existingBlankPathTriple,\n blankOutgoingTriple\n ]),\n ...blankNodeFilters\n ]),\n createSparqlOptional([\n createSparqlBasicGraphPattern([\n oldRootTriple,\n existingBlankPathTriple,\n incomingToBlankTriple\n ]),\n ...blankNodeFilters\n ])\n ],\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation;\n }\n\n private entitiesToGraphDeletionsAndInsertions(entities: Entity[]): EntityUpdateQueries {\n return entities.reduce(\n (obj: EntityUpdateQueries, entity): EntityUpdateQueries => {\n const entityGraphName = DataFactory.namedNode(entity['@id']);\n const { entityTriples, timestampTriples, insertions } = this.entityToTriples(entity, entityGraphName);\n obj.clear.push(createSparqlClearUpdate(entityGraphName));\n obj.insertions.push(createSparqlGraphQuads(entityGraphName, entityTriples), ...insertions);\n if (timestampTriples.length > 0) {\n obj.timestampInsertions.push(createSparqlGraphQuads(entityGraphName, timestampTriples));\n }\n return obj;\n },\n { clear: [], insertions: [], timestampInsertions: []}\n );\n }\n\n private idsToGraphDropUpdates(ids: string[]): UpdateOperation[] {\n return ids.map((id): UpdateOperation => {\n const entityGraphName = DataFactory.namedNode(id);\n return createSparqlDropUpdate(entityGraphName);\n });\n }\n\n private entitiesToGraphDropUpdates(entities: Entity[]): UpdateOperation[] {\n return entities.map((entity): UpdateOperation => {\n const entityGraphName = DataFactory.namedNode(entity['@id']);\n return createSparqlDropUpdate(entityGraphName);\n });\n }\n\n private partialEntityToDeletionTriples(entity: NodeObject, subject: NamedNode): { triples: Triple[]; deletions: GraphQuads[] } {\n return Object.entries(entity).reduce((acc: { triples: Triple[]; deletions: GraphQuads[] }, [ key, value ]): { triples: Triple[]; deletions: GraphQuads[] } => {\n if (key !== '@id') {\n let deletions: GraphQuads[] = [];\n if (value && typeof value === 'object' && '@id' in value && typeof value['@id'] === 'string' && '@type' in value) {\n const { triples: nestedTriples, deletions: nestedDeletions } = this.partialEntityToDeletionTriples(value as NodeObject, DataFactory.namedNode(value['@id']));\n deletions = [ ...deletions, createSparqlGraphQuads(DataFactory.namedNode(value['@id']), nestedTriples), ...nestedDeletions ];\n }\n return {\n triples: [\n ...acc.triples,\n this.buildTriplesWithSubjectPredicateAndVariableValue(\n subject,\n key === '@type' ? rdfTypeNamedNode : DataFactory.namedNode(key),\n this.variableGenerator.getNext()\n )\n ],\n deletions: [ ...acc.deletions, ...deletions ]\n };\n }\n return acc;\n }, { triples: [], deletions: [] });\n }\n\n private partialEntityToTriples(subject: NamedNode, entity: NodeObject): { triples: Triple[]; insertions: GraphQuads[] } {\n return Object.entries(entity).reduce((acc: { triples: Triple[]; insertions: GraphQuads[] }, [ key, value ]): { triples: Triple[]; insertions: GraphQuads[] } => {\n const values = ensureArray(value);\n if (key !== '@id') {\n let predicateTriples: { triples: Triple[]; insertions: GraphQuads[] };\n if (key === '@type') {\n predicateTriples = { triples: this.buildTriplesWithSubjectPredicateAndIriValue(\n subject,\n rdfTypeNamedNode,\n values as string[]\n ), insertions: [] };\n } else {\n predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n }\n return { triples: [ ...acc.triples, ...predicateTriples.triples ], insertions: [ ...acc.insertions, ...predicateTriples.insertions ] };\n }\n return acc;\n }, { triples: [], insertions: [] });\n }\n\n private entityToTriples(entity: NodeObject, subject: BlankNode | NamedNode): EntityUpdateTriples {\n const entityTriples = Object.entries(entity).reduce((acc: { triples: Triple[]; insertions: GraphQuads[] }, [ key, value ]): { triples: Triple[]; insertions: GraphQuads[] } => {\n const values = ensureArray(value);\n if (key !== '@id') {\n if (key === '@type') {\n const predicateTriples = this.buildTriplesWithSubjectPredicateAndIriValue(\n subject,\n rdfTypeNamedNode,\n values as string[]\n );\n return { triples: [ ...acc.triples, ...predicateTriples ], insertions: acc.insertions };\n }\n if (!(this.setTimestamps && key === EngineConstants.prop.dateModified)) {\n const predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n return { triples: [ ...acc.triples, ...predicateTriples.triples ], insertions: [ ...acc.insertions, ...predicateTriples.insertions ] };\n }\n }\n return acc;\n }, { triples: [], insertions: [] });\n\n const timestampTriples = [];\n if (this.setTimestamps && subject.termType === 'NamedNode') {\n if (!(EngineConstants.prop.dateCreated in entity)) {\n timestampTriples.push({ subject, predicate: created, object: now });\n }\n timestampTriples.push({ subject, predicate: modified, object: now });\n }\n return {\n entityTriples: entityTriples.triples,\n insertions: entityTriples.insertions,\n timestampTriples\n };\n }\n\n private buildTriplesForSubjectPredicateAndValues(\n subject: BlankNode | NamedNode,\n predicate: string,\n values: any[]\n ): { triples: Triple[]; insertions: GraphQuads[] } {\n const predicateTerm = DataFactory.namedNode(predicate);\n // Return values.flatMap((value: any): { triples: Triple[]; insertions: GraphQuads[] } =>\n // this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value));\n return values.reduce((acc: { triples: Triple[]; insertions: GraphQuads[] }, value: any) => {\n const { triples, insertions } = this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value);\n return { triples: [ ...acc.triples, ...triples ], insertions: [ ...acc.insertions, ...insertions ] };\n }, { triples: [], insertions: [] });\n }\n\n private buildTriplesWithSubjectPredicateAndIriValue(\n subject: BlankNode | NamedNode,\n predicate: NamedNode,\n values: string[]\n ): Triple[] {\n return values.map(\n (valueItem): Triple =>\n ({\n subject,\n predicate,\n object: DataFactory.namedNode(valueItem)\n } as Triple)\n );\n }\n\n private buildTriplesWithSubjectPredicateAndVariableValue(\n subject: NamedNode,\n predicate: NamedNode,\n value: string\n ): Triple {\n return {\n subject,\n predicate,\n object: DataFactory.variable(value)\n };\n }\n\n private buildTriplesWithSubjectPredicateAndValue(\n subject: BlankNode | NamedNode,\n predicate: NamedNode,\n value: any\n ): { triples: Triple[]; insertions: GraphQuads[] } {\n const isObject = typeof value === 'object';\n if (isObject) {\n if ('@list' in value) {\n return { triples: this.buildTriplesForList(subject, predicate, value['@list']), insertions: [] };\n }\n if ('@value' in value) {\n return { triples: [ { subject, predicate, object: this.jsonLdValueObjectToLiteral(value) } as Triple ], insertions: [] };\n }\n\n const isReferenceObject = '@id' in value;\n const isBlankNodeReferenceObject = !isReferenceObject || (value['@id'] as string).startsWith('_:');\n if (isBlankNodeReferenceObject) {\n return { triples: this.buildTriplesForBlankNode(subject, predicate, value as NodeObject), insertions: [] };\n }\n if (isReferenceObject) {\n const triples = [ \n { subject, predicate, object: DataFactory.namedNode(value['@id']) } as Triple\n ];\n if (value['@type']) {\n const { entityTriples, insertions } = this.entityToTriples(value as NodeObject, DataFactory.namedNode(value['@id']));\n return { triples, insertions: [ ...insertions, createSparqlGraphQuads(DataFactory.namedNode(value['@id']), entityTriples) ] };\n }\n return { triples, insertions: [] };\n }\n }\n return { triples: [ { subject, predicate, object: valueToLiteral(value) } as Triple ], insertions: [] };\n }\n\n private jsonLdValueObjectToLiteral(value: ValueObject): Term {\n if (typeof value['@value'] === 'object') {\n return DataFactory.literal(JSON.stringify(value['@value']), RDF.JSON);\n }\n if ((value as any)['@language']) {\n return DataFactory.literal(value['@value'] as string, (value as any)['@language']);\n }\n if ((value as any)['@type']) {\n return DataFactory.literal(value['@value'].toString(), (value as any)['@type']);\n }\n return valueToLiteral(value['@value']);\n }\n\n private buildTriplesForList(subject: BlankNode | NamedNode, predicate: NamedNode, value: NodeObject[]): Triple[] {\n const blankNode = DataFactory.blankNode(this.variableGenerator.getNext());\n const rest =\n value.length > 1\n ? this.buildTriplesForList(blankNode, restPredicate, value.slice(1))\n : [{ subject: blankNode, predicate: restPredicate, object: nilPredicate }];\n return [\n { subject, predicate, object: blankNode },\n ...this.buildTriplesWithSubjectPredicateAndValue(blankNode, firstPredicate, value[0]).triples,\n ...rest\n ];\n }\n\n private buildTriplesForBlankNode(subject: BlankNode | NamedNode, predicate: NamedNode, value: NodeObject): Triple[] {\n const blankNode = DataFactory.blankNode(this.variableGenerator.getNext());\n const { entityTriples } = this.entityToTriples(value, blankNode);\n return [{ subject, predicate, object: blankNode }, ...entityTriples ];\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TripleUtil.d.ts","sourceRoot":"","sources":["../../src/util/TripleUtil.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAA6B,QAAQ,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,KAAK,EAAqB,WAAW,EAAE,UAAU,EAAe,MAAM,QAAQ,CAAC;AAEtF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE1F,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAM9D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CA4BhG;
|
|
1
|
+
{"version":3,"file":"TripleUtil.d.ts","sourceRoot":"","sources":["../../src/util/TripleUtil.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAA6B,QAAQ,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,KAAK,EAAqB,WAAW,EAAE,UAAU,EAAe,MAAM,QAAQ,CAAC;AAEtF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE1F,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAM9D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CA4BhG;AA0TD,wBAAsB,eAAe,CACnC,OAAO,EAAE,IAAI,EAAE,EACf,WAAW,CAAC,EAAE,OAAO,EACrB,SAAS,CAAC,EAAE,oBAAoB,EAChC,KAAK,CAAC,EAAE,gBAAgB,EACxB,cAAc,CAAC,EAAE,MAAM,EAAE,EACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAuB9B;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAcnG;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,EAChE,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,GAAG,QAAQ,CAwBpB"}
|
package/dist/util/TripleUtil.js
CHANGED
|
@@ -289,7 +289,11 @@ async function frameWithRelationsOrNonBlankNodes(nodesById, frame, relations, wh
|
|
|
289
289
|
if (orderedNodeIds && orderedNodeIds.length > 0) {
|
|
290
290
|
const nonBlankNodeIds = orderedNodeIds.filter((id) => !id.startsWith('_:'));
|
|
291
291
|
if (nonBlankNodeIds.length > 0) {
|
|
292
|
-
|
|
292
|
+
const nonBlankNodeSet = new Set(Object.keys(nodesById).filter((nodeId) => !nodeId.startsWith(BLANK_NODE_PREFIX)));
|
|
293
|
+
const matchingNodeIds = nonBlankNodeIds.filter((nodeId) => nonBlankNodeSet.has(nodeId));
|
|
294
|
+
if (matchingNodeIds.length > 0) {
|
|
295
|
+
frame['@id'] = matchingNodeIds;
|
|
296
|
+
}
|
|
293
297
|
}
|
|
294
298
|
}
|
|
295
299
|
}
|
|
@@ -304,7 +308,11 @@ async function frameWithRelationsOrNonBlankNodes(nodesById, frame, relations, wh
|
|
|
304
308
|
if (Object.keys(frame).length > 0) {
|
|
305
309
|
const results = await jsonld.frame({ '@graph': nodesValue }, frame);
|
|
306
310
|
if (Array.isArray(results['@graph'])) {
|
|
307
|
-
results['@graph'] = results['@graph'].filter((node) => !node['@id']?.startsWith(BLANK_NODE_PREFIX)
|
|
311
|
+
results['@graph'] = results['@graph'].filter((node) => (!node['@id']?.startsWith(BLANK_NODE_PREFIX) &&
|
|
312
|
+
(Object.keys(node).length > 0 &&
|
|
313
|
+
(!!node['@id'] ||
|
|
314
|
+
!!node['@type'] ||
|
|
315
|
+
Object.entries(node).some(([key, value]) => key !== '@context' && value !== null)))));
|
|
308
316
|
}
|
|
309
317
|
if (typeof frame === 'object' && '@context' in frame && Object.keys(frame['@context']).length > 0) {
|
|
310
318
|
let resultsList;
|
|
@@ -354,6 +362,10 @@ async function triplesToJsonld(triples, skipFraming, relations, where, orderedNo
|
|
|
354
362
|
if ('@graph' in framed) {
|
|
355
363
|
return sortNodesByOrder(framed['@graph'], orderedNodeIds ?? nodeIdOrder);
|
|
356
364
|
}
|
|
365
|
+
const { '@context': _unusedContext, ...framedWithoutContext } = framed;
|
|
366
|
+
if (Object.keys(framedWithoutContext).length === 0) {
|
|
367
|
+
return [];
|
|
368
|
+
}
|
|
357
369
|
return framed;
|
|
358
370
|
}
|
|
359
371
|
exports.triplesToJsonld = triplesToJsonld;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TripleUtil.js","sourceRoot":"","sources":["../../src/util/TripleUtil.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA4C;AAC5C,yCAAyC;AACzC,2BAA2B;AAC3B,yDAAyD;AACzD,mEAA4C;AAG5C,+CAAiC;AAEjC,0DAAuD;AAIvD,iCAAqC;AACrC,iDAA0C;AAE1C,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,SAAgB,qBAAqB,CAAC,KAAa,EAAE,QAAgB;IACnE,QAAQ,QAAQ,EAAE;QAChB,KAAK,kBAAG,CAAC,GAAG,CAAC;QACb,KAAK,kBAAG,CAAC,eAAe,CAAC;QACzB,KAAK,kBAAG,CAAC,eAAe,CAAC;QACzB,KAAK,kBAAG,CAAC,OAAO,CAAC,CAAC;YAChB,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;SACnC;QACD,KAAK,kBAAG,CAAC,OAAO,CAAC,CAAC;YAChB,IAAI,KAAK,KAAK,MAAM,EAAE;gBACpB,OAAO,IAAI,CAAC;aACb;YACD,IAAI,KAAK,KAAK,OAAO,EAAE;gBACrB,OAAO,KAAK,CAAC;aACd;YACD,OAAO,KAAK,CAAC;SACd;QACD,KAAK,kBAAG,CAAC,MAAM,CAAC;QAChB,KAAK,kBAAG,CAAC,OAAO,CAAC;QACjB,KAAK,kBAAG,CAAC,KAAK,CAAC,CAAC;YACd,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACjC;QACD,KAAK,kBAAG,CAAC,IAAI;YACX,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,CAAC,CAAC;YACP,OAAO,KAAK,CAAC;SACd;KACF;AACH,CAAC;AA5BD,sDA4BC;AAED,SAAS,cAAc,CAAC,MAAmB;IACzC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;QACjC,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,KAAK;gBACtB,WAAW,EAAE,MAAM,CAAC,QAAQ;aAC7B,CAAC;SACH;QACD,OAAO;YACL,QAAQ,EAAE,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,kBAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;SAC9E,CAAC;KACH;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,EAAE;QACnC,OAAO,EAAE,KAAK,EAAE,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;KACvC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,MAAoB;IAC3C,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,EAAE;QACnC,OAAO,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;KAC5B;IACD,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAED,SAAS,gBAAgB,CAAC,SAA+B;IACvD,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAe,EAAE,CAAE,KAAK,EAAE,KAAK,CAAE,EAAc,EAAE;QACxF,MAAM,UAAU,GAAU;YACxB,WAAW,EAAE,KAAK;SACnB,CAAC;QACF,IAAI,eAA8C,CAAC;QACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;YAC1D,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,KAAqC,CAAC;YAC9F,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAC,CAAC;YAC3D,IAAI,YAAY,EAAE;gBAChB,UAAU,CAAC,YAAY,CAAC,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;aAC3D;iBAAM;gBACL,UAAU,CAAC,YAAY,CAAC,GAAG;oBACzB,QAAQ,EAAE,SAAS;iBACpB,CAAC;aACH;SACF;aAAM,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YACrC,UAAU,CAAC,KAAK,CAAC,GAAG;gBAClB,QAAQ,EAAE,SAAS;aACpB,CAAC;SACH;aAAM;YACL,UAAU,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,KAA6B,CAAC,CAAC;SACrE;QACD,IAAI,eAAe,EAAE;YACnB,OAAO;gBACL,GAAG,GAAG;gBACN,UAAU,EAAE;oBACV,GAAI,GAAG,CAAC,UAAU,CAAuB;oBACzC,GAAG,eAAe;iBACnB;gBACD,GAAG,UAAU;aACd,CAAC;SACH;QACD,OAAO;YACL,GAAG,GAAG;YACN,GAAG,UAAU;SACd,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAED,SAAS,YAAY,CAAC,KAAuB;IAC3C,IAAI,KAAK,CAAC,EAAE,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE;QAC5C,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;KAC5B;IACD,IAAI,KAAK,CAAC,EAAE,IAAI,2BAAY,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,EAA4B,CAAC;QACpD,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAAE;YAC9B,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;SAClC;QACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE;YACjC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;SAClC;KACF;IACD,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;QAChD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;KAChC;IACD,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;QACjH,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KACtC;IAED,wCAAwC;IACxC;;;;;;;;;;;;UAYM;IAEN,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IAIrC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAA+B,EAAE,MAAM,EAA8B,EAAE;QACvG,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,KAAK,kBAAG,CAAC,IAAI,CAAC;QAC5D,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QACrE,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrF,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE;YAChB,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE;gBAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;oBACzC,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAClD;qBAAM;oBACL,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CAAE,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAE,EAAE,MAAM,CAAS,CAAC;iBACvE;aACF;iBAAM;gBACL,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;aAClC;SACF;aAAM;YACL,GAAG,CAAC,OAAO,CAAC,GAAG;gBACb,KAAK,EAAE,OAAO;gBACd,CAAC,SAAS,CAAC,EAAE,MAAM;aACpB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;gBAC1C,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC3B;SACF;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,iCAAiC,CAC9C,SAAqC,EACrC,KAAa,EACb,SAAgC,EAChC,KAAwB,EACxB,WAAoB,EACpB,cAAyB,EACzB,QAAmB;IAEnB,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,KAAK,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,UAAU,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5C;;;;;kFAK0E;QAC1E,kDAAkD;QAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,oBAAoB,GAAG,KAAK,EAAE,EAAE,CAAC;QAEvC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACnC,qEAAqE;YACrE,UAAU,CAAC,OAAO,CAAC,CAAC,IAAgB,EAAQ,EAAE;gBAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;gBAC/D,IAAI,WAAW,EAAE;oBACf,OAAO;iBACR;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;oBACvD,IAAA,kBAAW,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAQ,EAAE;wBACxD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpB,CAAC,CAAC,CAAC;iBACJ;YACH,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,OAAO,MAAb,KAAK,CAAC,OAAO,IAAM,EAAE,EAAC;YACtB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAE,GAAG,OAAO,CAAE,CAAC;SACjC;aAAM,IAAI,iBAAiB,EAAE;YAC5B,4GAA4G;YAC5G,MAAM,cAAc,GAAG,iBAA2B,CAAC;YAEnD,6CAA6C;YAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACvC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAe,EAAQ,EAAE;oBACzC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;aACJ;YAED,oGAAoG;YACpG,wFAAwF;YACxF,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;gBACjD,UAAU,CAAC,OAAO,CAAC,CAAC,IAAgB,EAAQ,EAAE;oBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC3B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,EAAE;wBACzD,OAAO;qBACR;oBACD,qFAAqF;oBACrF,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;wBACvF,MAAM,SAAS,GAAG,IAAA,kBAAW,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;wBAC7C,SAAS,CAAC,OAAO,CAAC,CAAC,IAAwB,EAAQ,EAAE;4BACnD,IAAI,IAAI,EAAE;gCACR,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;6BACnB;wBACH,CAAC,CAAC,CAAC;qBACJ;gBACH,CAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,wFAAwF;gBACxF,UAAU,CAAC,OAAO,CAAC,CAAC,IAAgB,EAAQ,EAAE;oBAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;oBAC/D,IAAI,WAAW,EAAE;wBACf,OAAO;qBACR;oBACD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;wBACvD,MAAM,SAAS,GAAG,IAAA,kBAAW,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;wBAC7C,IAAI,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;4BACtC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAY,EAAQ,EAAE;gCACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BACpB,CAAC,CAAC,CAAC;yBACJ;qBACF;gBACH,CAAC,CAAC,CAAC;aACJ;YAED,KAAK,CAAC,OAAO,MAAb,KAAK,CAAC,OAAO,IAAM,EAAE,EAAC;YACtB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAE,GAAG,OAAO,CAAE,CAAC;YAEhC,6EAA6E;YAC7E,qFAAqF;YACrF,8EAA8E;YAC9E,8DAA8D;YAC9D,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,EAAU,EAAW,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7F,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,KAAK,CAAC,KAAK,CAAC,GAAG,eAAsB,CAAC;iBACvC;aACF;SACF;aACI,IAAI,oBAAoB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAC9C,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,MAAc,EAAsB,EAAE;gBAC/E,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;oBACzC,OAAO,MAAM,CAAC;iBACf;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAQ,CAAC;SAC3B;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;YACpE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE;gBACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAC1C,CAAC,IAAgB,EAAW,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAC3E,CAAC;aACH;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClG,IAAI,WAAW,CAAC;gBAChB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAC1B,WAAW,GAAG,OAAO,CAAC;iBACvB;qBAAM,IAAI,QAAQ,IAAI,OAAO,EAAE;oBAC9B,WAAW,GAAG,IAAA,kBAAW,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;iBAC9C;qBAAM;oBACL,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC;oBAC/D,WAAW,GAAG,CAAE,YAAY,CAAE,CAAC;iBAChC;gBACD;;;qBAGK;gBACL,OAAO,WAAyB,CAAC;aAClC;YACD,OAAO,OAAO,CAAC;SAChB;QACD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CACjD,CAAC,MAAc,EAAW,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CACnE,CAAC;QACF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,aAAoB,EAAE,CAAC,CAAC;KACpG;IACD,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAmB,EAAE,WAAqB;IAClE,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,KAAiB,EAAE,KAAiB,EAAU,EAAE,CAC/C,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,CAC1E,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAwB,EAAE,WAAqB;IAC5E,OAAO;QACL,GAAG,WAAW;QACd,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAiB,EAAE,WAAW,CAAC;KAC/E,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,WAAqB,EACrB,SAAgC,EAChC,KAAwB,EACxB,cAAyB,EACzB,QAAmB;IAEnB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,OAAO,EAAE,CAAC;KACX;IACD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,WAAW,EAAE;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;KACjC;IAED,mEAAmE;IACnE,MAAM,WAAW,GAAG,KAAK,EAAE,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3F,MAAM,MAAM,GAAG,MAAM,iCAAiC,CACpD,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,CAC9E,CAAC;IACF,IAAI,QAAQ,IAAI,MAAM,EAAE;QACtB,OAAO,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAiB,EAAE,cAAc,IAAI,WAAW,CAAC,CAAC;KAC1F;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AA1BD,0CA0BC;AAEM,KAAK,UAAU,wBAAwB,CAAC,OAAe,EAAE,KAAa;IAC3E,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,iCAAiC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACzE,IAAI,QAAQ,IAAI,MAAM,EAAE;QACtB,OAAO,qBAAqB,CAAC,MAAqB,EAAE,WAAW,CAAC,CAAC;KAClE;IACD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,GAAG,MAAM,CAAC;IAChE,MAAM,WAAW,GAAgB;QAC/B,QAAQ,EAAE,CAAE,oBAAkC,CAAE;KACjD,CAAC;IACF,IAAI,OAAO,EAAE;QACX,WAAW,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;KACnC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAdD,4DAcC;AAED,SAAgB,cAAc,CAC5B,KAAgE,EAChE,QAAiB;IAEjB,IAAI,QAAQ,EAAE;QACZ,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,kBAAG,CAAC,IAAI,EAAE;YACjD,OAAO,oBAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,kBAAG,CAAC,IAAI,CAAC,CAAC;SAC7D;QACD,OAAO,oBAAW,CAAC,OAAO,CAAE,KAAmC,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;KACvF;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,oBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,kBAAG,CAAC,OAAO,CAAC,CAAC;SAC3D;QACD,OAAO,oBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,kBAAG,CAAC,OAAO,CAAC,CAAC;KAC3D;IACD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;QAC9B,OAAO,oBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,kBAAG,CAAC,OAAO,CAAC,CAAC;KAC3D;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1E,OAAO,oBAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7C;IACD,IAAI,KAAK,YAAY,IAAI,EAAE;QACzB,OAAO,oBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,kBAAG,CAAC,QAAQ,CAAC,CAAC;KAC/D;IACD,gEAAgE;IAChE,OAAO,oBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/C,CAAC;AA3BD,wCA2BC","sourcesContent":["/* eslint-disable multiline-comment-style */\n/* eslint-disable capitalized-comments */\n/* eslint-disable indent */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport DataFactory from '@rdfjs/data-model';\nimport type { Literal, Quad, Quad_Object, Quad_Subject, Variable } from '@rdfjs/types';\nimport type { ContextDefinition, GraphObject, NodeObject, ValueObject } from 'jsonld';\nimport * as jsonld from 'jsonld';\nimport type { Frame } from 'jsonld/jsonld-spec';\nimport { FindOperator } from '../storage/FindOperator';\nimport type { FindOptionsRelations, FindOptionsWhere } from '../storage/FindOptionsTypes';\nimport type { InverseRelationOperatorValue } from '../storage/operator/InverseRelation';\nimport type { JSONArray, JSONObject, OrArray } from './Types';\nimport { ensureArray } from './Util';\nimport { RDF, XSD } from './Vocabularies';\n\nconst BLANK_NODE_PREFIX = '_:';\n\nexport function toJSValueFromDataType(value: string, dataType: string): number | boolean | string {\n switch (dataType) {\n case XSD.int:\n case XSD.positiveInteger:\n case XSD.negativeInteger:\n case XSD.integer: {\n return Number.parseInt(value, 10);\n }\n case XSD.boolean: {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n return value;\n }\n case XSD.double:\n case XSD.decimal:\n case XSD.float: {\n return Number.parseFloat(value);\n }\n case RDF.JSON:\n return JSON.parse(value);\n default: {\n return value;\n }\n }\n}\n\nfunction toJsonLdObject(object: Quad_Object): NodeObject | ValueObject {\n if (object.termType === 'Literal') {\n if (object.language && object.language.length > 0) {\n return {\n '@value': object.value,\n '@language': object.language\n };\n }\n return {\n '@value': toJSValueFromDataType(object.value, object.datatype.value),\n '@type': object.datatype.value === RDF.JSON ? '@json' : object.datatype.value\n };\n }\n if (object.termType === 'BlankNode') {\n return { '@id': `_:${object.value}` };\n }\n return { '@id': object.value };\n}\n\nfunction toJsonLdSubject(object: Quad_Subject): string {\n if (object.termType === 'BlankNode') {\n return `_:${object.value}`;\n }\n return object.value;\n}\n\nfunction relationsToFrame(relations: FindOptionsRelations): NodeObject {\n return Object.entries(relations).reduce((obj: NodeObject, [ field, value ]): NodeObject => {\n const fieldFrame: Frame = {\n '@explicit': false\n };\n let contextAddition: ContextDefinition | undefined;\n if (typeof value === 'object' && value.type === 'operator') {\n const { resolvedName, relations: subRelations } = value.value as InverseRelationOperatorValue;\n contextAddition = { [resolvedName]: { '@reverse': field }};\n if (subRelations) {\n fieldFrame[resolvedName] = relationsToFrame(subRelations);\n } else {\n fieldFrame[resolvedName] = {\n \"@embed\": \"@always\"\n };\n }\n } else if (typeof value === 'boolean') {\n fieldFrame[field] = {\n \"@embed\": \"@always\"\n };\n } else {\n fieldFrame[field] = relationsToFrame(value as FindOptionsRelations);\n }\n if (contextAddition) {\n return {\n ...obj,\n '@context': {\n ...(obj['@context'] as ContextDefinition),\n ...contextAddition\n },\n ...fieldFrame\n };\n }\n return {\n ...obj,\n ...fieldFrame\n };\n }, {});\n}\n\nfunction whereToFrame(where: FindOptionsWhere): NodeObject {\n if (where.id && typeof where.id === 'string') {\n return { '@id': where.id };\n }\n if (where.id && FindOperator.isFindOperator(where.id)) {\n const operator = where.id as FindOperator<any, any>;\n if (operator.operator === 'in') {\n return { '@id': operator.value };\n }\n if (operator.operator === 'equal') {\n return { '@id': operator.value };\n }\n }\n if (where.type && typeof where.type === 'string') {\n return { '@type': where.type };\n }\n if (where.type && typeof where.type === 'object' && 'value' in where.type && typeof where.type.value === 'string') {\n return { '@type': where.type.value };\n }\n\n // Handle arbitrary property constraints\n /* const frame: NodeObject = {};\n Object.entries(where).forEach(([ key, value ]) => {\n if (key !== 'id' && key !== 'type') {\n if (typeof value === 'string') {\n frame[key] = { '@id': value };\n } else if (FindOperator.isFindOperator(value)) {\n const operator = value as FindOperator<any, any>;\n if (operator.operator === 'in') {\n frame[key] = { '@id': operator.value };\n }\n }\n }\n }); */\n\n return {};\n}\n\nfunction triplesToNodes(triples: Quad[]): {\n nodesById: Record<string, NodeObject>;\n nodeIdOrder: string[];\n} {\n const nodeIdOrder: string[] = [];\n const nodesById = triples.reduce((obj: Record<string, NodeObject>, triple): Record<string, NodeObject> => {\n const subject = toJsonLdSubject(triple.subject);\n const isTypePredicate = triple.predicate.value === RDF.type;\n const predicate = isTypePredicate ? '@type' : triple.predicate.value;\n const object = isTypePredicate ? triple.object.value : toJsonLdObject(triple.object);\n if (obj[subject]) {\n if (obj[subject][predicate]) {\n if (Array.isArray(obj[subject][predicate])) {\n (obj[subject][predicate]! as any[]).push(object);\n } else {\n obj[subject][predicate] = [ obj[subject][predicate]!, object ] as any;\n }\n } else {\n obj[subject][predicate] = object;\n }\n } else {\n obj[subject] = {\n '@id': subject,\n [predicate]: object\n };\n if (!subject.startsWith(BLANK_NODE_PREFIX)) {\n nodeIdOrder.push(subject);\n }\n }\n return obj;\n }, {});\n return { nodesById, nodeIdOrder };\n}\n\nasync function frameWithRelationsOrNonBlankNodes(\n nodesById: Record<string, NodeObject>,\n frame?: Frame,\n relations?: FindOptionsRelations,\n where?: FindOptionsWhere,\n queriedType?: string,\n orderedNodeIds?: string[],\n rdfTypes?: string[]\n): Promise<NodeObject> {\n if (!frame) {\n const relationsFrame = relations ? relationsToFrame(relations) : {};\n const whereFrame = where ? whereToFrame(where) : {};\n frame = { ...relationsFrame, ...whereFrame };\n const nodesValue = Object.values(nodesById);\n /* // eslint-disable-next-line no-console\n console.log('nodesValue', JSON.stringify(nodesValue, null, 2));\n // eslint-disable-next-line no-console\n console.log('whereFrame', JSON.stringify(whereFrame, null, 2));\n // eslint-disable-next-line no-console\n console.log('relationsFrame', JSON.stringify(relationsFrame, null, 2)); */\n /* Add all the @types in the nodes to the frame */\n const typeSet = new Set<string>();\n const hasTypeConstraint = whereFrame['@type'];\n const hasIriTypeConstraint = where?.id;\n\n if (Object.keys(frame).length === 0) {\n // Only add all types when there's no where constraint (no filtering)\n nodesValue.forEach((node: NodeObject): void => {\n const isBlankNode = node['@id']?.startsWith(BLANK_NODE_PREFIX);\n if (isBlankNode) {\n return;\n }\n if (node['@type'] && frame && typeof frame === 'object') {\n ensureArray(node['@type']).forEach((type: string): void => {\n typeSet.add(type);\n });\n }\n });\n frame['@type'] ??= [];\n frame['@type'] = [ ...typeSet ];\n } else if (hasTypeConstraint) {\n // For type-based queries, include the constraint type and types from entities that matched the WHERE clause\n const constraintType = hasTypeConstraint as string;\n\n // Always include the queried/constraint type\n typeSet.add(constraintType);\n if (rdfTypes && Array.isArray(rdfTypes)) {\n rdfTypes.forEach((rdfType: string): void => {\n typeSet.add(rdfType);\n });\n }\n\n // If we have orderedNodeIds (entities that matched the WHERE clause), only include types from those\n // This prevents over-matching related entities while still supporting subclass matching\n if (orderedNodeIds && orderedNodeIds.length > 0) {\n const orderedNodeIdSet = new Set(orderedNodeIds);\n nodesValue.forEach((node: NodeObject): void => {\n const nodeId = node['@id'];\n if (!nodeId || node['@id']?.startsWith(BLANK_NODE_PREFIX)) {\n return;\n }\n // Only include types from entities that matched the WHERE clause (in orderedNodeIds)\n if (orderedNodeIdSet.has(nodeId) && node['@type'] && frame && typeof frame === 'object') {\n const nodeTypes = ensureArray(node['@type']);\n nodeTypes.forEach((type: string | undefined): void => {\n if (type) {\n typeSet.add(type);\n }\n });\n }\n });\n } else {\n // Fallback: if no orderedNodeIds, only add types from entities with the constraint type\n nodesValue.forEach((node: NodeObject): void => {\n const isBlankNode = node['@id']?.startsWith(BLANK_NODE_PREFIX);\n if (isBlankNode) {\n return;\n }\n if (node['@type'] && frame && typeof frame === 'object') {\n const nodeTypes = ensureArray(node['@type']);\n if (nodeTypes.includes(constraintType)) {\n nodeTypes.forEach((type: string): void => {\n typeSet.add(type);\n });\n }\n }\n });\n }\n\n frame['@type'] ??= [];\n frame['@type'] = [ ...typeSet ];\n \n // When we have orderedNodeIds, restrict root-level results to only those IDs\n // This prevents related entities with the same type from appearing at the root level\n // Only apply this constraint if we have non-blank node IDs, since blank nodes\n // will be filtered out anyway and we need them during framing\n if (orderedNodeIds && orderedNodeIds.length > 0) {\n const nonBlankNodeIds = orderedNodeIds.filter((id: string): boolean => !id.startsWith('_:'));\n if (nonBlankNodeIds.length > 0) {\n frame['@id'] = nonBlankNodeIds as any;\n }\n }\n }\n else if (hasIriTypeConstraint && !frame['@id']) {\n frame['@id'] = Object.keys(nodesById).map((nodeId: string): string | undefined => {\n if (!nodeId.startsWith(BLANK_NODE_PREFIX)) {\n return nodeId;\n }\n return undefined;\n }).filter(Boolean) as any;\n }\n if (Object.keys(frame).length > 0) {\n const results = await jsonld.frame({ '@graph': nodesValue }, frame);\n if (Array.isArray(results['@graph'])) {\n results['@graph'] = results['@graph'].filter(\n (node: NodeObject): boolean => !node['@id']?.startsWith(BLANK_NODE_PREFIX)\n );\n }\n if (typeof frame === 'object' && '@context' in frame && Object.keys(frame['@context']!).length > 0) {\n let resultsList;\n if (Array.isArray(results)) {\n resultsList = results;\n } else if ('@graph' in results) {\n resultsList = ensureArray(results['@graph']);\n } else {\n const { '@context': unusedContext, ...entityResult } = results;\n resultsList = [ entityResult ];\n }\n /* return {\n '@graph': resultsList.filter((result): boolean =>\n Object.keys((frame as NodeObject)['@context']!).some((relationField): boolean => relationField in result))\n }; */\n return resultsList as NodeObject;\n }\n return results;\n }\n const nonBlankNodes = Object.keys(nodesById).filter(\n (nodeId: string): boolean => !nodeId.startsWith(BLANK_NODE_PREFIX)\n );\n return await jsonld.frame({ '@graph': Object.values(nodesById) }, { '@id': nonBlankNodes as any });\n }\n return await jsonld.frame({ '@graph': Object.values(nodesById) }, frame);\n}\n\nfunction sortNodesByOrder(nodes: NodeObject[], nodeIdOrder: string[]): NodeObject[] {\n return nodes.sort(\n (aNode: NodeObject, bNode: NodeObject): number =>\n nodeIdOrder.indexOf(aNode['@id']!) - nodeIdOrder.indexOf(bNode['@id']!)\n );\n}\n\nfunction sortGraphOfNodeObject(graphObject: GraphObject, nodeIdOrder: string[]): GraphObject {\n return {\n ...graphObject,\n '@graph': sortNodesByOrder(graphObject['@graph'] as NodeObject[], nodeIdOrder)\n };\n}\n\nexport async function triplesToJsonld(\n triples: Quad[],\n skipFraming?: boolean,\n relations?: FindOptionsRelations,\n where?: FindOptionsWhere,\n orderedNodeIds?: string[],\n rdfTypes?: string[]\n): Promise<OrArray<NodeObject>> {\n if (triples.length === 0) {\n return [];\n }\n const { nodeIdOrder, nodesById } = triplesToNodes(triples);\n if (skipFraming) {\n return Object.values(nodesById);\n }\n\n // Extract the queried type from where clause for subclass handling\n const queriedType = where?.type && typeof where.type === 'string' ? where.type : undefined;\n\n const framed = await frameWithRelationsOrNonBlankNodes(\n nodesById, undefined, relations, where, queriedType, orderedNodeIds, rdfTypes\n );\n if ('@graph' in framed) {\n return sortNodesByOrder(framed['@graph'] as NodeObject[], orderedNodeIds ?? nodeIdOrder);\n }\n return framed;\n}\n\nexport async function triplesToJsonldWithFrame(triples: Quad[], frame?: Frame): Promise<GraphObject> {\n const { nodeIdOrder, nodesById } = triplesToNodes(triples);\n const framed = await frameWithRelationsOrNonBlankNodes(nodesById, frame);\n if ('@graph' in framed) {\n return sortGraphOfNodeObject(framed as GraphObject, nodeIdOrder);\n }\n const { '@context': context, ...framedWithoutContext } = framed;\n const graphObject: GraphObject = {\n '@graph': [ framedWithoutContext as NodeObject ]\n };\n if (context) {\n graphObject['@context'] = context;\n }\n return graphObject;\n}\n\nexport function valueToLiteral(\n value: string | boolean | number | Date | JSONObject | JSONArray,\n datatype?: string\n): Literal | Variable {\n if (datatype) {\n if (datatype === '@json' || datatype === RDF.JSON) {\n return DataFactory.literal(JSON.stringify(value), RDF.JSON);\n }\n return DataFactory.literal((value as string | boolean | number).toString(), datatype);\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n return DataFactory.literal(value.toString(), XSD.integer);\n }\n return DataFactory.literal(value.toString(), XSD.decimal);\n }\n if (typeof value === 'boolean') {\n return DataFactory.literal(value.toString(), XSD.boolean);\n }\n if (typeof value === 'string' && value.startsWith('?') && value.length > 1) {\n return DataFactory.variable(value.slice(1));\n }\n if (value instanceof Date) {\n return DataFactory.literal(value.toISOString(), XSD.dateTime);\n }\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return DataFactory.literal(value.toString());\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TripleUtil.js","sourceRoot":"","sources":["../../src/util/TripleUtil.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable multiline-comment-style */\n/* eslint-disable capitalized-comments */\n/* eslint-disable indent */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport DataFactory from '@rdfjs/data-model';\nimport type { Literal, Quad, Quad_Object, Quad_Subject, Variable } from '@rdfjs/types';\nimport type { ContextDefinition, GraphObject, NodeObject, ValueObject } from 'jsonld';\nimport * as jsonld from 'jsonld';\nimport type { Frame } from 'jsonld/jsonld-spec';\nimport { FindOperator } from '../storage/FindOperator';\nimport type { FindOptionsRelations, FindOptionsWhere } from '../storage/FindOptionsTypes';\nimport type { InverseRelationOperatorValue } from '../storage/operator/InverseRelation';\nimport type { JSONArray, JSONObject, OrArray } from './Types';\nimport { ensureArray } from './Util';\nimport { RDF, XSD } from './Vocabularies';\n\nconst BLANK_NODE_PREFIX = '_:';\n\nexport function toJSValueFromDataType(value: string, dataType: string): number | boolean | string {\n switch (dataType) {\n case XSD.int:\n case XSD.positiveInteger:\n case XSD.negativeInteger:\n case XSD.integer: {\n return Number.parseInt(value, 10);\n }\n case XSD.boolean: {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n return value;\n }\n case XSD.double:\n case XSD.decimal:\n case XSD.float: {\n return Number.parseFloat(value);\n }\n case RDF.JSON:\n return JSON.parse(value);\n default: {\n return value;\n }\n }\n}\n\nfunction toJsonLdObject(object: Quad_Object): NodeObject | ValueObject {\n if (object.termType === 'Literal') {\n if (object.language && object.language.length > 0) {\n return {\n '@value': object.value,\n '@language': object.language\n };\n }\n return {\n '@value': toJSValueFromDataType(object.value, object.datatype.value),\n '@type': object.datatype.value === RDF.JSON ? '@json' : object.datatype.value\n };\n }\n if (object.termType === 'BlankNode') {\n return { '@id': `_:${object.value}` };\n }\n return { '@id': object.value };\n}\n\nfunction toJsonLdSubject(object: Quad_Subject): string {\n if (object.termType === 'BlankNode') {\n return `_:${object.value}`;\n }\n return object.value;\n}\n\nfunction relationsToFrame(relations: FindOptionsRelations): NodeObject {\n return Object.entries(relations).reduce((obj: NodeObject, [ field, value ]): NodeObject => {\n const fieldFrame: Frame = {\n '@explicit': false\n };\n let contextAddition: ContextDefinition | undefined;\n if (typeof value === 'object' && value.type === 'operator') {\n const { resolvedName, relations: subRelations } = value.value as InverseRelationOperatorValue;\n contextAddition = { [resolvedName]: { '@reverse': field }};\n if (subRelations) {\n fieldFrame[resolvedName] = relationsToFrame(subRelations);\n } else {\n fieldFrame[resolvedName] = {\n \"@embed\": \"@always\"\n };\n }\n } else if (typeof value === 'boolean') {\n fieldFrame[field] = {\n \"@embed\": \"@always\"\n };\n } else {\n fieldFrame[field] = relationsToFrame(value as FindOptionsRelations);\n }\n if (contextAddition) {\n return {\n ...obj,\n '@context': {\n ...(obj['@context'] as ContextDefinition),\n ...contextAddition\n },\n ...fieldFrame\n };\n }\n return {\n ...obj,\n ...fieldFrame\n };\n }, {});\n}\n\nfunction whereToFrame(where: FindOptionsWhere): NodeObject {\n if (where.id && typeof where.id === 'string') {\n return { '@id': where.id };\n }\n if (where.id && FindOperator.isFindOperator(where.id)) {\n const operator = where.id as FindOperator<any, any>;\n if (operator.operator === 'in') {\n return { '@id': operator.value };\n }\n if (operator.operator === 'equal') {\n return { '@id': operator.value };\n }\n }\n if (where.type && typeof where.type === 'string') {\n return { '@type': where.type };\n }\n if (where.type && typeof where.type === 'object' && 'value' in where.type && typeof where.type.value === 'string') {\n return { '@type': where.type.value };\n }\n\n // Handle arbitrary property constraints\n /* const frame: NodeObject = {};\n Object.entries(where).forEach(([ key, value ]) => {\n if (key !== 'id' && key !== 'type') {\n if (typeof value === 'string') {\n frame[key] = { '@id': value };\n } else if (FindOperator.isFindOperator(value)) {\n const operator = value as FindOperator<any, any>;\n if (operator.operator === 'in') {\n frame[key] = { '@id': operator.value };\n }\n }\n }\n }); */\n\n return {};\n}\n\nfunction triplesToNodes(triples: Quad[]): {\n nodesById: Record<string, NodeObject>;\n nodeIdOrder: string[];\n} {\n const nodeIdOrder: string[] = [];\n const nodesById = triples.reduce((obj: Record<string, NodeObject>, triple): Record<string, NodeObject> => {\n const subject = toJsonLdSubject(triple.subject);\n const isTypePredicate = triple.predicate.value === RDF.type;\n const predicate = isTypePredicate ? '@type' : triple.predicate.value;\n const object = isTypePredicate ? triple.object.value : toJsonLdObject(triple.object);\n if (obj[subject]) {\n if (obj[subject][predicate]) {\n if (Array.isArray(obj[subject][predicate])) {\n (obj[subject][predicate]! as any[]).push(object);\n } else {\n obj[subject][predicate] = [ obj[subject][predicate]!, object ] as any;\n }\n } else {\n obj[subject][predicate] = object;\n }\n } else {\n obj[subject] = {\n '@id': subject,\n [predicate]: object\n };\n if (!subject.startsWith(BLANK_NODE_PREFIX)) {\n nodeIdOrder.push(subject);\n }\n }\n return obj;\n }, {});\n return { nodesById, nodeIdOrder };\n}\n\nasync function frameWithRelationsOrNonBlankNodes(\n nodesById: Record<string, NodeObject>,\n frame?: Frame,\n relations?: FindOptionsRelations,\n where?: FindOptionsWhere,\n queriedType?: string,\n orderedNodeIds?: string[],\n rdfTypes?: string[]\n): Promise<NodeObject> {\n if (!frame) {\n const relationsFrame = relations ? relationsToFrame(relations) : {};\n const whereFrame = where ? whereToFrame(where) : {};\n frame = { ...relationsFrame, ...whereFrame };\n const nodesValue = Object.values(nodesById);\n /* // eslint-disable-next-line no-console\n console.log('nodesValue', JSON.stringify(nodesValue, null, 2));\n // eslint-disable-next-line no-console\n console.log('whereFrame', JSON.stringify(whereFrame, null, 2));\n // eslint-disable-next-line no-console\n console.log('relationsFrame', JSON.stringify(relationsFrame, null, 2)); */\n /* Add all the @types in the nodes to the frame */\n const typeSet = new Set<string>();\n const hasTypeConstraint = whereFrame['@type'];\n const hasIriTypeConstraint = where?.id;\n\n if (Object.keys(frame).length === 0) {\n // Only add all types when there's no where constraint (no filtering)\n nodesValue.forEach((node: NodeObject): void => {\n const isBlankNode = node['@id']?.startsWith(BLANK_NODE_PREFIX);\n if (isBlankNode) {\n return;\n }\n if (node['@type'] && frame && typeof frame === 'object') {\n ensureArray(node['@type']).forEach((type: string): void => {\n typeSet.add(type);\n });\n }\n });\n frame['@type'] ??= [];\n frame['@type'] = [ ...typeSet ];\n } else if (hasTypeConstraint) {\n // For type-based queries, include the constraint type and types from entities that matched the WHERE clause\n const constraintType = hasTypeConstraint as string;\n\n // Always include the queried/constraint type\n typeSet.add(constraintType);\n if (rdfTypes && Array.isArray(rdfTypes)) {\n rdfTypes.forEach((rdfType: string): void => {\n typeSet.add(rdfType);\n });\n }\n\n // If we have orderedNodeIds (entities that matched the WHERE clause), only include types from those\n // This prevents over-matching related entities while still supporting subclass matching\n if (orderedNodeIds && orderedNodeIds.length > 0) {\n const orderedNodeIdSet = new Set(orderedNodeIds);\n nodesValue.forEach((node: NodeObject): void => {\n const nodeId = node['@id'];\n if (!nodeId || node['@id']?.startsWith(BLANK_NODE_PREFIX)) {\n return;\n }\n // Only include types from entities that matched the WHERE clause (in orderedNodeIds)\n if (orderedNodeIdSet.has(nodeId) && node['@type'] && frame && typeof frame === 'object') {\n const nodeTypes = ensureArray(node['@type']);\n nodeTypes.forEach((type: string | undefined): void => {\n if (type) {\n typeSet.add(type);\n }\n });\n }\n });\n } else {\n // Fallback: if no orderedNodeIds, only add types from entities with the constraint type\n nodesValue.forEach((node: NodeObject): void => {\n const isBlankNode = node['@id']?.startsWith(BLANK_NODE_PREFIX);\n if (isBlankNode) {\n return;\n }\n if (node['@type'] && frame && typeof frame === 'object') {\n const nodeTypes = ensureArray(node['@type']);\n if (nodeTypes.includes(constraintType)) {\n nodeTypes.forEach((type: string): void => {\n typeSet.add(type);\n });\n }\n }\n });\n }\n\n frame['@type'] ??= [];\n frame['@type'] = [ ...typeSet ];\n \n // When we have orderedNodeIds, restrict root-level results to only those IDs\n // This prevents related entities with the same type from appearing at the root level\n // Only apply this constraint if we have non-blank node IDs, since blank nodes\n // will be filtered out anyway and we need them during framing\n if (orderedNodeIds && orderedNodeIds.length > 0) {\n const nonBlankNodeIds = orderedNodeIds.filter((id: string): boolean => !id.startsWith('_:'));\n if (nonBlankNodeIds.length > 0) {\n const nonBlankNodeSet = new Set(\n Object.keys(nodesById).filter((nodeId: string): boolean => !nodeId.startsWith(BLANK_NODE_PREFIX))\n );\n const matchingNodeIds = nonBlankNodeIds.filter((nodeId: string): boolean => nonBlankNodeSet.has(nodeId));\n if (matchingNodeIds.length > 0) {\n frame['@id'] = matchingNodeIds as any;\n }\n }\n }\n }\n else if (hasIriTypeConstraint && !frame['@id']) {\n frame['@id'] = Object.keys(nodesById).map((nodeId: string): string | undefined => {\n if (!nodeId.startsWith(BLANK_NODE_PREFIX)) {\n return nodeId;\n }\n return undefined;\n }).filter(Boolean) as any;\n }\n if (Object.keys(frame).length > 0) {\n const results = await jsonld.frame({ '@graph': nodesValue }, frame);\n if (Array.isArray(results['@graph'])) {\n results['@graph'] = results['@graph'].filter(\n (node: NodeObject): boolean => (\n !node['@id']?.startsWith(BLANK_NODE_PREFIX) &&\n (\n Object.keys(node).length > 0 &&\n (\n !!node['@id'] ||\n !!node['@type'] ||\n Object.entries(node).some(([ key, value ]): boolean => key !== '@context' && value !== null)\n )\n )\n )\n );\n }\n if (typeof frame === 'object' && '@context' in frame && Object.keys(frame['@context']!).length > 0) {\n let resultsList;\n if (Array.isArray(results)) {\n resultsList = results;\n } else if ('@graph' in results) {\n resultsList = ensureArray(results['@graph']);\n } else {\n const { '@context': unusedContext, ...entityResult } = results;\n resultsList = [ entityResult ];\n }\n /* return {\n '@graph': resultsList.filter((result): boolean =>\n Object.keys((frame as NodeObject)['@context']!).some((relationField): boolean => relationField in result))\n }; */\n return resultsList as NodeObject;\n }\n return results;\n }\n const nonBlankNodes = Object.keys(nodesById).filter(\n (nodeId: string): boolean => !nodeId.startsWith(BLANK_NODE_PREFIX)\n );\n return await jsonld.frame({ '@graph': Object.values(nodesById) }, { '@id': nonBlankNodes as any });\n }\n return await jsonld.frame({ '@graph': Object.values(nodesById) }, frame);\n}\n\nfunction sortNodesByOrder(nodes: NodeObject[], nodeIdOrder: string[]): NodeObject[] {\n return nodes.sort(\n (aNode: NodeObject, bNode: NodeObject): number =>\n nodeIdOrder.indexOf(aNode['@id']!) - nodeIdOrder.indexOf(bNode['@id']!)\n );\n}\n\nfunction sortGraphOfNodeObject(graphObject: GraphObject, nodeIdOrder: string[]): GraphObject {\n return {\n ...graphObject,\n '@graph': sortNodesByOrder(graphObject['@graph'] as NodeObject[], nodeIdOrder)\n };\n}\n\nexport async function triplesToJsonld(\n triples: Quad[],\n skipFraming?: boolean,\n relations?: FindOptionsRelations,\n where?: FindOptionsWhere,\n orderedNodeIds?: string[],\n rdfTypes?: string[]\n): Promise<OrArray<NodeObject>> {\n if (triples.length === 0) {\n return [];\n }\n const { nodeIdOrder, nodesById } = triplesToNodes(triples);\n if (skipFraming) {\n return Object.values(nodesById);\n }\n\n // Extract the queried type from where clause for subclass handling\n const queriedType = where?.type && typeof where.type === 'string' ? where.type : undefined;\n\n const framed = await frameWithRelationsOrNonBlankNodes(\n nodesById, undefined, relations, where, queriedType, orderedNodeIds, rdfTypes\n );\n if ('@graph' in framed) {\n return sortNodesByOrder(framed['@graph'] as NodeObject[], orderedNodeIds ?? nodeIdOrder);\n }\n const { '@context': _unusedContext, ...framedWithoutContext } = framed;\n if (Object.keys(framedWithoutContext).length === 0) {\n return [];\n }\n return framed;\n}\n\nexport async function triplesToJsonldWithFrame(triples: Quad[], frame?: Frame): Promise<GraphObject> {\n const { nodeIdOrder, nodesById } = triplesToNodes(triples);\n const framed = await frameWithRelationsOrNonBlankNodes(nodesById, frame);\n if ('@graph' in framed) {\n return sortGraphOfNodeObject(framed as GraphObject, nodeIdOrder);\n }\n const { '@context': context, ...framedWithoutContext } = framed;\n const graphObject: GraphObject = {\n '@graph': [ framedWithoutContext as NodeObject ]\n };\n if (context) {\n graphObject['@context'] = context;\n }\n return graphObject;\n}\n\nexport function valueToLiteral(\n value: string | boolean | number | Date | JSONObject | JSONArray,\n datatype?: string\n): Literal | Variable {\n if (datatype) {\n if (datatype === '@json' || datatype === RDF.JSON) {\n return DataFactory.literal(JSON.stringify(value), RDF.JSON);\n }\n return DataFactory.literal((value as string | boolean | number).toString(), datatype);\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n return DataFactory.literal(value.toString(), XSD.integer);\n }\n return DataFactory.literal(value.toString(), XSD.decimal);\n }\n if (typeof value === 'boolean') {\n return DataFactory.literal(value.toString(), XSD.boolean);\n }\n if (typeof value === 'string' && value.startsWith('?') && value.length > 1) {\n return DataFactory.variable(value.slice(1));\n }\n if (value instanceof Date) {\n return DataFactory.literal(value.toISOString(), XSD.dateTime);\n }\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return DataFactory.literal(value.toString());\n}\n"]}
|
package/package.json
CHANGED
|
@@ -9,7 +9,8 @@ import type {
|
|
|
9
9
|
InsertDeleteOperation,
|
|
10
10
|
UpdateOperation,
|
|
11
11
|
ClearDropOperation,
|
|
12
|
-
Pattern
|
|
12
|
+
Pattern,
|
|
13
|
+
PropertyPath
|
|
13
14
|
} from 'sparqljs';
|
|
14
15
|
import { EngineConstants } from '../../../constants';
|
|
15
16
|
import {
|
|
@@ -17,10 +18,12 @@ import {
|
|
|
17
18
|
created,
|
|
18
19
|
createSparqlBasicGraphPattern,
|
|
19
20
|
createSparqlClearUpdate,
|
|
21
|
+
createSparqlFilterWithExpression,
|
|
20
22
|
createSparqlDropUpdate,
|
|
21
23
|
createSparqlGraphQuads,
|
|
22
24
|
createSparqlOptional,
|
|
23
25
|
createSparqlUpdate,
|
|
26
|
+
createSparqlZeroOrMorePredicate,
|
|
24
27
|
dropAll,
|
|
25
28
|
firstPredicate,
|
|
26
29
|
modified,
|
|
@@ -112,6 +115,7 @@ export class SparqlUpdateBuilder {
|
|
|
112
115
|
const { triples: deleteOnlyTriples } = this.partialEntityToDeletionTriples(attributesToDelete, subject);
|
|
113
116
|
|
|
114
117
|
const updates: InsertDeleteOperation[] = [];
|
|
118
|
+
updates.push(...this.createBlankNodeCleanupUpdates(subject, attributesToUpdate));
|
|
115
119
|
|
|
116
120
|
if (deletionTriples.length > 0) {
|
|
117
121
|
updates.push({
|
|
@@ -205,6 +209,107 @@ export class SparqlUpdateBuilder {
|
|
|
205
209
|
return { attributesToUpdate, attributesToDelete };
|
|
206
210
|
}
|
|
207
211
|
|
|
212
|
+
private createBlankNodeCleanupUpdates(
|
|
213
|
+
subject: NamedNode,
|
|
214
|
+
attributesToUpdate: Partial<Entity>
|
|
215
|
+
): InsertDeleteOperation[] {
|
|
216
|
+
const updateKeysToCleanup = Object.entries(attributesToUpdate)
|
|
217
|
+
.filter(([, value ]): boolean => this.shouldCleanupBlankNodeSubgraphForValue(value))
|
|
218
|
+
.map(([ key ]): string => key);
|
|
219
|
+
return updateKeysToCleanup.map(
|
|
220
|
+
(predicate): InsertDeleteOperation => this.createBlankNodeCleanupUpdate(subject, predicate)
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
private shouldCleanupBlankNodeSubgraphForValue(value: unknown): boolean {
|
|
225
|
+
return ensureArray(value).some((valueItem: unknown): boolean => {
|
|
226
|
+
if (!valueItem || typeof valueItem !== 'object') {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
const nodeObject = valueItem as Record<string, unknown>;
|
|
230
|
+
if ('@value' in nodeObject) {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
if ('@id' in nodeObject && typeof nodeObject['@id'] === 'string') {
|
|
234
|
+
return nodeObject['@id'].startsWith('_:');
|
|
235
|
+
}
|
|
236
|
+
return true;
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
private createBlankNodeCleanupUpdate(subject: NamedNode, predicate: string): InsertDeleteOperation {
|
|
241
|
+
const existingObjectVariable = DataFactory.variable(this.variableGenerator.getNext());
|
|
242
|
+
const existingBlankNodeVariable = DataFactory.variable(this.variableGenerator.getNext());
|
|
243
|
+
const existingBlankPredicateVariable = DataFactory.variable(this.variableGenerator.getNext());
|
|
244
|
+
const existingBlankObjectVariable = DataFactory.variable(this.variableGenerator.getNext());
|
|
245
|
+
const existingIncomingSubjectVariable = DataFactory.variable(this.variableGenerator.getNext());
|
|
246
|
+
const existingIncomingPredicateVariable = DataFactory.variable(this.variableGenerator.getNext());
|
|
247
|
+
const predicateTerm = predicate === '@type' ? rdfTypeNamedNode : DataFactory.namedNode(predicate);
|
|
248
|
+
|
|
249
|
+
// Traverse any outgoing predicate path from the old predicate value to clean nested blank-node trees.
|
|
250
|
+
const anyPredicatePath = {
|
|
251
|
+
type: 'path',
|
|
252
|
+
pathType: '!',
|
|
253
|
+
items: [ DataFactory.namedNode('urn:skl-js-engine:blank-node-cleanup') ]
|
|
254
|
+
} as PropertyPath;
|
|
255
|
+
const anyPredicatePathZeroOrMore = createSparqlZeroOrMorePredicate([ anyPredicatePath ]);
|
|
256
|
+
const oldRootTriple = { subject, predicate: predicateTerm, object: existingObjectVariable } as Triple;
|
|
257
|
+
const blankOutgoingTriple = {
|
|
258
|
+
subject: existingBlankNodeVariable,
|
|
259
|
+
predicate: existingBlankPredicateVariable,
|
|
260
|
+
object: existingBlankObjectVariable
|
|
261
|
+
} as Triple;
|
|
262
|
+
const incomingToBlankTriple = {
|
|
263
|
+
subject: existingIncomingSubjectVariable,
|
|
264
|
+
predicate: existingIncomingPredicateVariable,
|
|
265
|
+
object: existingBlankNodeVariable
|
|
266
|
+
} as Triple;
|
|
267
|
+
const existingBlankPathTriple = {
|
|
268
|
+
subject: existingObjectVariable,
|
|
269
|
+
predicate: anyPredicatePathZeroOrMore,
|
|
270
|
+
object: existingBlankNodeVariable
|
|
271
|
+
} as Triple;
|
|
272
|
+
const blankNodeFilters = [
|
|
273
|
+
createSparqlFilterWithExpression({
|
|
274
|
+
type: 'operation',
|
|
275
|
+
operator: 'isblank',
|
|
276
|
+
args: [ existingObjectVariable ]
|
|
277
|
+
}),
|
|
278
|
+
createSparqlFilterWithExpression({
|
|
279
|
+
type: 'operation',
|
|
280
|
+
operator: 'isblank',
|
|
281
|
+
args: [ existingBlankNodeVariable ]
|
|
282
|
+
})
|
|
283
|
+
];
|
|
284
|
+
|
|
285
|
+
return {
|
|
286
|
+
updateType: 'insertdelete',
|
|
287
|
+
delete: [ createSparqlGraphQuads(subject, [ blankOutgoingTriple, incomingToBlankTriple ]) ],
|
|
288
|
+
insert: [],
|
|
289
|
+
where: [
|
|
290
|
+
createSparqlOptional([
|
|
291
|
+
createSparqlBasicGraphPattern([
|
|
292
|
+
oldRootTriple,
|
|
293
|
+
existingBlankPathTriple,
|
|
294
|
+
blankOutgoingTriple
|
|
295
|
+
]),
|
|
296
|
+
...blankNodeFilters
|
|
297
|
+
]),
|
|
298
|
+
createSparqlOptional([
|
|
299
|
+
createSparqlBasicGraphPattern([
|
|
300
|
+
oldRootTriple,
|
|
301
|
+
existingBlankPathTriple,
|
|
302
|
+
incomingToBlankTriple
|
|
303
|
+
]),
|
|
304
|
+
...blankNodeFilters
|
|
305
|
+
])
|
|
306
|
+
],
|
|
307
|
+
using: {
|
|
308
|
+
default: [ subject ]
|
|
309
|
+
}
|
|
310
|
+
} as InsertDeleteOperation;
|
|
311
|
+
}
|
|
312
|
+
|
|
208
313
|
private entitiesToGraphDeletionsAndInsertions(entities: Entity[]): EntityUpdateQueries {
|
|
209
314
|
return entities.reduce(
|
|
210
315
|
(obj: EntityUpdateQueries, entity): EntityUpdateQueries => {
|
package/src/util/TripleUtil.ts
CHANGED
|
@@ -283,7 +283,13 @@ async function frameWithRelationsOrNonBlankNodes(
|
|
|
283
283
|
if (orderedNodeIds && orderedNodeIds.length > 0) {
|
|
284
284
|
const nonBlankNodeIds = orderedNodeIds.filter((id: string): boolean => !id.startsWith('_:'));
|
|
285
285
|
if (nonBlankNodeIds.length > 0) {
|
|
286
|
-
|
|
286
|
+
const nonBlankNodeSet = new Set(
|
|
287
|
+
Object.keys(nodesById).filter((nodeId: string): boolean => !nodeId.startsWith(BLANK_NODE_PREFIX))
|
|
288
|
+
);
|
|
289
|
+
const matchingNodeIds = nonBlankNodeIds.filter((nodeId: string): boolean => nonBlankNodeSet.has(nodeId));
|
|
290
|
+
if (matchingNodeIds.length > 0) {
|
|
291
|
+
frame['@id'] = matchingNodeIds as any;
|
|
292
|
+
}
|
|
287
293
|
}
|
|
288
294
|
}
|
|
289
295
|
}
|
|
@@ -299,7 +305,17 @@ async function frameWithRelationsOrNonBlankNodes(
|
|
|
299
305
|
const results = await jsonld.frame({ '@graph': nodesValue }, frame);
|
|
300
306
|
if (Array.isArray(results['@graph'])) {
|
|
301
307
|
results['@graph'] = results['@graph'].filter(
|
|
302
|
-
(node: NodeObject): boolean =>
|
|
308
|
+
(node: NodeObject): boolean => (
|
|
309
|
+
!node['@id']?.startsWith(BLANK_NODE_PREFIX) &&
|
|
310
|
+
(
|
|
311
|
+
Object.keys(node).length > 0 &&
|
|
312
|
+
(
|
|
313
|
+
!!node['@id'] ||
|
|
314
|
+
!!node['@type'] ||
|
|
315
|
+
Object.entries(node).some(([ key, value ]): boolean => key !== '@context' && value !== null)
|
|
316
|
+
)
|
|
317
|
+
)
|
|
318
|
+
)
|
|
303
319
|
);
|
|
304
320
|
}
|
|
305
321
|
if (typeof frame === 'object' && '@context' in frame && Object.keys(frame['@context']!).length > 0) {
|
|
@@ -367,6 +383,10 @@ export async function triplesToJsonld(
|
|
|
367
383
|
if ('@graph' in framed) {
|
|
368
384
|
return sortNodesByOrder(framed['@graph'] as NodeObject[], orderedNodeIds ?? nodeIdOrder);
|
|
369
385
|
}
|
|
386
|
+
const { '@context': _unusedContext, ...framedWithoutContext } = framed;
|
|
387
|
+
if (Object.keys(framedWithoutContext).length === 0) {
|
|
388
|
+
return [];
|
|
389
|
+
}
|
|
370
390
|
return framed;
|
|
371
391
|
}
|
|
372
392
|
|