From d55091f81c469359bbfe01913bfd8b38c356c97f Mon Sep 17 00:00:00 2001 From: Heinrichs <Heinrichs@itc.rwth-aachen.de> Date: Thu, 23 May 2024 13:01:55 +0200 Subject: [PATCH] New: Ignore templating values (coscine/issues#2805) --- src/FormGenerator.spec.ts | 5 +++-- src/FormGenerator.vue | 9 +++++++++ src/base/LinkedDataHandler.ts | 31 +++++++++++++++++++++++++++++++ src/data/example/metadata.ts | 2 +- 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/FormGenerator.spec.ts b/src/FormGenerator.spec.ts index d1a1a97..d2a128c 100644 --- a/src/FormGenerator.spec.ts +++ b/src/FormGenerator.spec.ts @@ -225,6 +225,7 @@ describe('FormGenerator.vue', () => { propsData: { formData: dataCiteMetadata, formDataMimeType: 'text/turtle', + ignoreTemplateValues: true, selectedShape: 'https://purl.org/coscine/ap/Dataverse_Citation_Metadata/minimal/', shapes: dataCite, @@ -266,8 +267,8 @@ describe('FormGenerator.vue', () => { await wrapper.vm.$nextTick(); - // Wait for 1 second until everything is set up - await sleep(1000); + // Wait for 2 seconds until everything is set up + await sleep(2000); expect(wrapper.emitted('isValid')).toBeTruthy(); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion diff --git a/src/FormGenerator.vue b/src/FormGenerator.vue index 73baa06..f528e72 100644 --- a/src/FormGenerator.vue +++ b/src/FormGenerator.vue @@ -24,6 +24,7 @@ dataset, metadataSubject, validationContext, + ignoreTemplateValues, ) " /> @@ -85,6 +86,10 @@ export default defineComponent({ default: 'application/ld+json', type: String, }, + ignoreTemplateValues: { + default: false, + type: Boolean, + }, locale: { default: 'en', type: String, @@ -272,6 +277,7 @@ export default defineComponent({ this.dataset, this.metadataSubject, this.validationContext, + this.ignoreTemplateValues, ); }, locale() { @@ -363,6 +369,7 @@ export default defineComponent({ this.dataset, this.metadataSubject, this.validationContext, + this.ignoreTemplateValues, ); }, input(nodeName: string, values: Quad_Object[]) { @@ -400,6 +407,7 @@ export default defineComponent({ this.dataset, this.metadataSubject, this.validationContext, + this.ignoreTemplateValues, ); } } @@ -445,6 +453,7 @@ export default defineComponent({ this.dataset, this.metadataSubject, this.validationContext, + this.ignoreTemplateValues, ); } }, diff --git a/src/base/LinkedDataHandler.ts b/src/base/LinkedDataHandler.ts index 0d87afc..ffc4ba8 100644 --- a/src/base/LinkedDataHandler.ts +++ b/src/base/LinkedDataHandler.ts @@ -52,6 +52,7 @@ export default defineComponent({ dataset: Dataset, subjectNode: Quad_Subject, validationContext = '', + ignoreTemplateValues = false, ): void { if (this.timeOuts[validationContext]) { clearTimeout(this.timeOuts[validationContext]); @@ -116,6 +117,10 @@ export default defineComponent({ } } + if (ignoreTemplateValues) { + this.deactiveTemplateRules(clonedDataset, combinedMetadata); + } + const validator = new SHACLValidator(clonedDataset); const report = validator.validate(combinedMetadata); @@ -130,6 +135,32 @@ export default defineComponent({ return report; }, this.validationDebounce) as unknown as number; }, + deactiveTemplateRules(shape: Dataset, metadata: Dataset) { + for (const quad of metadata) { + if (!quad.object.value.match(/\{\{.*?\}\}/)) { + continue; + } + const pathRelations = Array.from( + shape.match( + null, + factory.namedNode(prefixes.sh + 'path'), + quad.predicate, + ), + ).map((x) => x.subject); + for (const pathRelation of pathRelations) { + shape.add( + factory.quad( + pathRelation, + factory.namedNode(prefixes.sh + 'deactivated'), + factory.literal( + 'true', + factory.namedNode(prefixes.xsd + 'boolean'), + ), + ), + ); + } + } + }, async getQuads( data: string, mimeType: string, diff --git a/src/data/example/metadata.ts b/src/data/example/metadata.ts index b55c11f..2cfa438 100644 --- a/src/data/example/metadata.ts +++ b/src/data/example/metadata.ts @@ -40,7 +40,7 @@ _:b1 a <https://purl.org/coscine/ap/Dataverse_Citation_Metadata/minimal/> ; rdf:type <https://purl.org/coscine/ap/Dataverse_Citation_Metadata/author/> ; dcterms:creator "Cool name" ; schema:affiliation "Somewhere" ; - <http://purl.org/spar/datacite/AgentIdentifierScheme> "GND" ; + <http://purl.org/spar/datacite/AgentIdentifierScheme> "{{http://purl.org/spar/datacite/AgentIdentifierScheme}}" ; <http://purl.org/spar/datacite/AgentIdentifier> "1234" ; ] ; schema:contactPoint [ -- GitLab