@comake/skl-js-engine 1.3.11 → 1.3.13
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 +1 -0
- package/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.d.ts.map +1 -1
- package/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.js +33 -3
- 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 +6 -2
- package/dist/util/TripleUtil.js.map +1 -1
- package/package.json +1 -1
- package/src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts +41 -3
- package/src/util/TripleUtil.ts +6 -2
|
@@ -22,6 +22,7 @@ export declare class SparqlUpdateBuilder {
|
|
|
22
22
|
buildDelete(entityOrEntities: Entity | Entity[]): Update;
|
|
23
23
|
buildDeleteAll(): Update;
|
|
24
24
|
private idsAndAttributesToGraphDeletionsAndInsertions;
|
|
25
|
+
private partitionAttributes;
|
|
25
26
|
private entitiesToGraphDeletionsAndInsertions;
|
|
26
27
|
private idsToGraphDropUpdates;
|
|
27
28
|
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,EAEnB,MAAM,UAAU,CAAC;AAoBlB,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;CAC5B;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;
|
|
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,EAEnB,MAAM,UAAU,CAAC;AAoBlB,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;CAC5B;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;IAqErD,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,qCAAqC;IAgB7C,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,8BAA8B;IAgBtC,OAAO,CAAC,sBAAsB;IAqB9B,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,wCAAwC;IAUhD,OAAO,CAAC,2CAA2C;IAenD,OAAO,CAAC,gDAAgD;IAYxD,OAAO,CAAC,wCAAwC;IA0BhD,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,wBAAwB;CAKjC"}
|
|
@@ -55,8 +55,10 @@ class SparqlUpdateBuilder {
|
|
|
55
55
|
idsAndAttributesToGraphDeletionsAndInsertions(ids, attributes) {
|
|
56
56
|
return ids.flatMap((id) => {
|
|
57
57
|
const subject = data_model_1.default.namedNode(id);
|
|
58
|
-
const
|
|
59
|
-
const
|
|
58
|
+
const { attributesToUpdate, attributesToDelete } = this.partitionAttributes(attributes);
|
|
59
|
+
const deletionTriples = this.partialEntityToDeletionTriples(attributesToUpdate, subject);
|
|
60
|
+
const insertionTriples = this.partialEntityToTriples(subject, attributesToUpdate);
|
|
61
|
+
const deleteOnlyTriples = this.partialEntityToDeletionTriples(attributesToDelete, subject);
|
|
60
62
|
const updates = [];
|
|
61
63
|
if (deletionTriples.length > 0) {
|
|
62
64
|
updates.push({
|
|
@@ -75,7 +77,19 @@ class SparqlUpdateBuilder {
|
|
|
75
77
|
insert: [(0, SparqlUtil_1.createSparqlGraphQuads)(subject, insertionTriples)]
|
|
76
78
|
});
|
|
77
79
|
}
|
|
78
|
-
if (
|
|
80
|
+
if (deleteOnlyTriples.length > 0) {
|
|
81
|
+
updates.push({
|
|
82
|
+
updateType: 'insertdelete',
|
|
83
|
+
delete: [(0, SparqlUtil_1.createSparqlGraphQuads)(subject, deleteOnlyTriples)],
|
|
84
|
+
insert: [],
|
|
85
|
+
where: deleteOnlyTriples.map((triple) => (0, SparqlUtil_1.createSparqlOptional)([(0, SparqlUtil_1.createSparqlBasicGraphPattern)([triple])])),
|
|
86
|
+
using: {
|
|
87
|
+
default: [subject]
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
const hasAnyChanges = deletionTriples.length > 0 || insertionTriples.length > 0 || deleteOnlyTriples.length > 0;
|
|
92
|
+
if (this.setTimestamps && hasAnyChanges) {
|
|
79
93
|
const modifiedVariable = data_model_1.default.variable(this.variableGenerator.getNext());
|
|
80
94
|
const modifiedDeletionTriple = { subject, predicate: SparqlUtil_1.modified, object: modifiedVariable };
|
|
81
95
|
const modifiedInsertionTriple = { subject, predicate: SparqlUtil_1.modified, object: SparqlUtil_1.now };
|
|
@@ -92,6 +106,22 @@ class SparqlUpdateBuilder {
|
|
|
92
106
|
return updates;
|
|
93
107
|
});
|
|
94
108
|
}
|
|
109
|
+
partitionAttributes(attributes) {
|
|
110
|
+
const attributesToUpdate = {};
|
|
111
|
+
const attributesToDelete = {};
|
|
112
|
+
Object.entries(attributes).forEach(([key, value]) => {
|
|
113
|
+
if (key === '@id') {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (value === null) {
|
|
117
|
+
attributesToDelete[key] = value;
|
|
118
|
+
}
|
|
119
|
+
else if (value !== undefined) {
|
|
120
|
+
attributesToUpdate[key] = value;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return { attributesToUpdate, attributesToDelete };
|
|
124
|
+
}
|
|
95
125
|
entitiesToGraphDeletionsAndInsertions(entities) {
|
|
96
126
|
return entities.reduce((obj, entity) => {
|
|
97
127
|
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":"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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} 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}\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 deletionTriples = this.partialEntityToDeletionTriples(attributes, subject);\n const insertionTriples = this.partialEntityToTriples(subject, attributes);\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 if (insertionTriples.length > 0) {\n updates.push({\n updateType: 'insert',\n insert: [ createSparqlGraphQuads(subject, insertionTriples) ]\n } as InsertDeleteOperation);\n }\n\n if (this.setTimestamps) {\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 entitiesToGraphDeletionsAndInsertions(entities: Entity[]): EntityUpdateQueries {\n return entities.reduce(\n (obj: EntityUpdateQueries, entity): EntityUpdateQueries => {\n const entityGraphName = DataFactory.namedNode(entity['@id']);\n const { entityTriples, timestampTriples } = this.entityToTriples(entity, entityGraphName);\n obj.clear.push(createSparqlClearUpdate(entityGraphName));\n obj.insertions.push(createSparqlGraphQuads(entityGraphName, entityTriples));\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): Triple[] {\n return Object.keys(entity).reduce((triples: Triple[], key): Triple[] => {\n if (key !== '@id') {\n return [\n ...triples,\n this.buildTriplesWithSubjectPredicateAndVariableValue(\n subject,\n DataFactory.namedNode(key),\n this.variableGenerator.getNext()\n )\n ];\n }\n return triples;\n }, []);\n }\n\n private partialEntityToTriples(subject: NamedNode, entity: NodeObject): Triple[] {\n const entityTriples = Object.entries(entity).reduce((triples: Triple[], [ key, value ]): Triple[] => {\n const values = ensureArray(value);\n if (key !== '@id') {\n let predicateTriples: Triple[];\n if (key === '@type') {\n predicateTriples = this.buildTriplesWithSubjectPredicateAndIriValue(\n subject,\n rdfTypeNamedNode,\n values as string[]\n );\n } else {\n predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n }\n return [ ...triples, ...predicateTriples ];\n }\n return triples;\n }, []);\n return entityTriples;\n }\n\n private entityToTriples(entity: NodeObject, subject: BlankNode | NamedNode): EntityUpdateTriples {\n const entityTriples = Object.entries(entity).reduce((triples: Triple[], [ key, value ]): Triple[] => {\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, ...predicateTriples ];\n }\n if (!(this.setTimestamps && key === EngineConstants.prop.dateModified)) {\n const predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n return [ ...triples, ...predicateTriples ];\n }\n }\n return triples;\n }, []);\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,\n timestampTriples\n };\n }\n\n private buildTriplesForSubjectPredicateAndValues(\n subject: BlankNode | NamedNode,\n predicate: string,\n values: any[]\n ): Triple[] {\n const predicateTerm = DataFactory.namedNode(predicate);\n return values.flatMap((value: any): Triple[] =>\n this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value));\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 ): Triple[] {\n const isObject = typeof value === 'object';\n if (isObject) {\n if ('@list' in value) {\n return this.buildTriplesForList(subject, predicate, value['@list']);\n }\n if ('@value' in value) {\n return [ { subject, predicate, object: this.jsonLdValueObjectToLiteral(value) } as Triple ];\n }\n\n const isReferenceObject = '@id' in value;\n const isBlankNodeReferenceObject = !isReferenceObject || (value['@id'] as string).startsWith('_:');\n if (isBlankNodeReferenceObject) {\n return this.buildTriplesForBlankNode(subject, predicate, value as NodeObject);\n }\n if (isReferenceObject) {\n return [ { subject, predicate, object: DataFactory.namedNode(value['@id']) } as Triple ];\n }\n }\n return [ { subject, predicate, object: valueToLiteral(value) } as Triple ];\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]),\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} 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}\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 deletionTriples = this.partialEntityToDeletionTriples(attributesToUpdate, subject);\n const insertionTriples = this.partialEntityToTriples(subject, attributesToUpdate);\n const 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 if (insertionTriples.length > 0) {\n updates.push({\n updateType: 'insert',\n insert: [ createSparqlGraphQuads(subject, insertionTriples) ]\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 } = this.entityToTriples(entity, entityGraphName);\n obj.clear.push(createSparqlClearUpdate(entityGraphName));\n obj.insertions.push(createSparqlGraphQuads(entityGraphName, entityTriples));\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): Triple[] {\n return Object.keys(entity).reduce((triples: Triple[], key): Triple[] => {\n if (key !== '@id') {\n return [\n ...triples,\n this.buildTriplesWithSubjectPredicateAndVariableValue(\n subject,\n DataFactory.namedNode(key),\n this.variableGenerator.getNext()\n )\n ];\n }\n return triples;\n }, []);\n }\n\n private partialEntityToTriples(subject: NamedNode, entity: NodeObject): Triple[] {\n const entityTriples = Object.entries(entity).reduce((triples: Triple[], [ key, value ]): Triple[] => {\n const values = ensureArray(value);\n if (key !== '@id') {\n let predicateTriples: Triple[];\n if (key === '@type') {\n predicateTriples = this.buildTriplesWithSubjectPredicateAndIriValue(\n subject,\n rdfTypeNamedNode,\n values as string[]\n );\n } else {\n predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n }\n return [ ...triples, ...predicateTriples ];\n }\n return triples;\n }, []);\n return entityTriples;\n }\n\n private entityToTriples(entity: NodeObject, subject: BlankNode | NamedNode): EntityUpdateTriples {\n const entityTriples = Object.entries(entity).reduce((triples: Triple[], [ key, value ]): Triple[] => {\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, ...predicateTriples ];\n }\n if (!(this.setTimestamps && key === EngineConstants.prop.dateModified)) {\n const predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n return [ ...triples, ...predicateTriples ];\n }\n }\n return triples;\n }, []);\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,\n timestampTriples\n };\n }\n\n private buildTriplesForSubjectPredicateAndValues(\n subject: BlankNode | NamedNode,\n predicate: string,\n values: any[]\n ): Triple[] {\n const predicateTerm = DataFactory.namedNode(predicate);\n return values.flatMap((value: any): Triple[] =>\n this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value));\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 ): Triple[] {\n const isObject = typeof value === 'object';\n if (isObject) {\n if ('@list' in value) {\n return this.buildTriplesForList(subject, predicate, value['@list']);\n }\n if ('@value' in value) {\n return [ { subject, predicate, object: this.jsonLdValueObjectToLiteral(value) } as Triple ];\n }\n\n const isReferenceObject = '@id' in value;\n const isBlankNodeReferenceObject = !isReferenceObject || (value['@id'] as string).startsWith('_:');\n if (isBlankNodeReferenceObject) {\n return this.buildTriplesForBlankNode(subject, predicate, value as NodeObject);\n }\n if (isReferenceObject) {\n return [ { subject, predicate, object: DataFactory.namedNode(value['@id']) } as Triple ];\n }\n }\n return [ { subject, predicate, object: valueToLiteral(value) } as Triple ];\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]),\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;AA0SD,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,CAmB9B;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
|
@@ -104,11 +104,15 @@ function relationsToFrame(relations) {
|
|
|
104
104
|
fieldFrame[resolvedName] = relationsToFrame(subRelations);
|
|
105
105
|
}
|
|
106
106
|
else {
|
|
107
|
-
fieldFrame[resolvedName] = {
|
|
107
|
+
fieldFrame[resolvedName] = {
|
|
108
|
+
"@embed": "@always"
|
|
109
|
+
};
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
112
|
else if (typeof value === 'boolean') {
|
|
111
|
-
fieldFrame[field] = {
|
|
113
|
+
fieldFrame[field] = {
|
|
114
|
+
"@embed": "@always"
|
|
115
|
+
};
|
|
112
116
|
}
|
|
113
117
|
else {
|
|
114
118
|
fieldFrame[field] = relationsToFrame(value);
|
|
@@ -1 +1 @@
|
|
|
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 }\n } else if (typeof value === 'boolean') {\n fieldFrame[field] = {};\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 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"]}
|
package/package.json
CHANGED
|
@@ -105,8 +105,10 @@ export class SparqlUpdateBuilder {
|
|
|
105
105
|
): InsertDeleteOperation[] {
|
|
106
106
|
return ids.flatMap((id): InsertDeleteOperation[] => {
|
|
107
107
|
const subject = DataFactory.namedNode(id);
|
|
108
|
-
const
|
|
109
|
-
const
|
|
108
|
+
const { attributesToUpdate, attributesToDelete } = this.partitionAttributes(attributes);
|
|
109
|
+
const deletionTriples = this.partialEntityToDeletionTriples(attributesToUpdate, subject);
|
|
110
|
+
const insertionTriples = this.partialEntityToTriples(subject, attributesToUpdate);
|
|
111
|
+
const deleteOnlyTriples = this.partialEntityToDeletionTriples(attributesToDelete, subject);
|
|
110
112
|
|
|
111
113
|
const updates: InsertDeleteOperation[] = [];
|
|
112
114
|
|
|
@@ -131,7 +133,23 @@ export class SparqlUpdateBuilder {
|
|
|
131
133
|
} as InsertDeleteOperation);
|
|
132
134
|
}
|
|
133
135
|
|
|
134
|
-
if (
|
|
136
|
+
if (deleteOnlyTriples.length > 0) {
|
|
137
|
+
updates.push({
|
|
138
|
+
updateType: 'insertdelete',
|
|
139
|
+
delete: [ createSparqlGraphQuads(subject, deleteOnlyTriples) ],
|
|
140
|
+
insert: [],
|
|
141
|
+
where: deleteOnlyTriples.map(
|
|
142
|
+
(triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])
|
|
143
|
+
),
|
|
144
|
+
using: {
|
|
145
|
+
default: [ subject ]
|
|
146
|
+
}
|
|
147
|
+
} as InsertDeleteOperation);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const hasAnyChanges = deletionTriples.length > 0 || insertionTriples.length > 0 || deleteOnlyTriples.length > 0;
|
|
151
|
+
|
|
152
|
+
if (this.setTimestamps && hasAnyChanges) {
|
|
135
153
|
const modifiedVariable = DataFactory.variable(this.variableGenerator.getNext());
|
|
136
154
|
const modifiedDeletionTriple = { subject, predicate: modified, object: modifiedVariable };
|
|
137
155
|
const modifiedInsertionTriple = { subject, predicate: modified, object: now };
|
|
@@ -150,6 +168,26 @@ export class SparqlUpdateBuilder {
|
|
|
150
168
|
});
|
|
151
169
|
}
|
|
152
170
|
|
|
171
|
+
private partitionAttributes(
|
|
172
|
+
attributes: Partial<Entity>
|
|
173
|
+
): { attributesToUpdate: Partial<Entity>; attributesToDelete: Partial<Entity> } {
|
|
174
|
+
const attributesToUpdate: Partial<Entity> = {};
|
|
175
|
+
const attributesToDelete: Partial<Entity> = {};
|
|
176
|
+
|
|
177
|
+
Object.entries(attributes).forEach(([ key, value ]) => {
|
|
178
|
+
if (key === '@id') {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (value === null) {
|
|
182
|
+
attributesToDelete[key] = value;
|
|
183
|
+
} else if (value !== undefined) {
|
|
184
|
+
attributesToUpdate[key] = value;
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
return { attributesToUpdate, attributesToDelete };
|
|
189
|
+
}
|
|
190
|
+
|
|
153
191
|
private entitiesToGraphDeletionsAndInsertions(entities: Entity[]): EntityUpdateQueries {
|
|
154
192
|
return entities.reduce(
|
|
155
193
|
(obj: EntityUpdateQueries, entity): EntityUpdateQueries => {
|
package/src/util/TripleUtil.ts
CHANGED
|
@@ -84,10 +84,14 @@ function relationsToFrame(relations: FindOptionsRelations): NodeObject {
|
|
|
84
84
|
if (subRelations) {
|
|
85
85
|
fieldFrame[resolvedName] = relationsToFrame(subRelations);
|
|
86
86
|
} else {
|
|
87
|
-
fieldFrame[resolvedName] = {
|
|
87
|
+
fieldFrame[resolvedName] = {
|
|
88
|
+
"@embed": "@always"
|
|
89
|
+
};
|
|
88
90
|
}
|
|
89
91
|
} else if (typeof value === 'boolean') {
|
|
90
|
-
fieldFrame[field] = {
|
|
92
|
+
fieldFrame[field] = {
|
|
93
|
+
"@embed": "@always"
|
|
94
|
+
};
|
|
91
95
|
} else {
|
|
92
96
|
fieldFrame[field] = relationsToFrame(value as FindOptionsRelations);
|
|
93
97
|
}
|