From 13a812bee62e3b047d63e8116e17db78274a405a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Schl=C3=B6gl?= Date: Tue, 28 Jan 2025 15:32:21 +0100 Subject: [PATCH] fix: allow for labels in timespans --- html/shacl/shacl.ttl | 82 ++++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 30 deletions(-) diff --git a/html/shacl/shacl.ttl b/html/shacl/shacl.ttl index 893b0ba..64d7e5f 100644 --- a/html/shacl/shacl.ttl +++ b/html/shacl/shacl.ttl @@ -300,6 +300,13 @@ pfpsh:crm_PC144_joined_with a sh:NodeShape ; pfpsh:crm_E52_Time-Span a sh:NodeShape ; sh:nodeKind sh:IRI ; sh:targetClass crm:E52_Time-Span ; + sh:property [ + sh:path rdfs:label ; + sh:nodeKind sh:Literal ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:message "When using a literal time description, exactly one rdfs:label is required." ; + ] ; sh:xone ( [ sh:property [ @@ -312,41 +319,56 @@ pfpsh:crm_E52_Time-Span a sh:NodeShape ; sh:minCount 1 ; sh:maxCount 1 ; sh:message "If using P82_at_some_time_within, exactly one date value (either year or full date) is required." ; - ] - ] - [ - sh:property [ - sh:path crm:P82a_begin_of_the_begin ; - sh:or ( - [ sh:datatype xsd:gYear ] - [ sh:datatype xsd:date ] - [ sh:datatype xsd:gYearMonth ] - ) ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:message "When using begin/end properties, P82a_begin_of_the_begin must have exactly one date value." ; ] ; - sh:property [ - sh:path crm:P82b_end_of_the_end ; + sh:not [ sh:or ( - [ sh:datatype xsd:gYear ] - [ sh:datatype xsd:date ] - [ sh:datatype xsd:gYearMonth ] - ) ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:message "When using begin/end properties, P82b_end_of_the_end must have exactly one date value." ; + [ + sh:path crm:P82a_begin_of_the_begin ; + sh:minCount 1 ; + ] + [ + sh:path crm:P82b_end_of_the_end ; + sh:minCount 1 ; + ] + ) ] ] - [ - sh:property [ - sh:path rdfs:label ; - sh:nodeKind sh:Literal ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:message "When using a literal time description, exactly one rdfs:label is required." ; + [ + sh:and ( + [ + sh:property [ + sh:path crm:P82a_begin_of_the_begin ; + sh:or ( + [ sh:datatype xsd:gYear ] + [ sh:datatype xsd:date ] + [ sh:datatype xsd:gYearMonth ] + ) ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:message "When using begin/end properties, P82a_begin_of_the_begin must have exactly one date value." ; + ] + ] + [ + sh:property [ + sh:path crm:P82b_end_of_the_end ; + sh:or ( + [ sh:datatype xsd:gYear ] + [ sh:datatype xsd:date ] + [ sh:datatype xsd:gYearMonth ] + ) ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:message "When using begin/end properties, P82b_end_of_the_end must have exactly one date value." ; + ] + ] + [ + sh:not [ + sh:path crm:P82_at_some_time_within ; + sh:minCount 1 ; + ] + ] + ) ] - ] ) . pfpsh:crm_E86_Leaving a sh:NodeShape ;