From 9fe294063d3a4927625a2ab1b0a1b98c47a83534 Mon Sep 17 00:00:00 2001 From: "@s.roertgen" Date: Mon, 22 Apr 2024 10:12:30 +0200 Subject: [PATCH] Allow some more properties for describing the concept scheme #14 --- skohub.shacl.ttl | 64 ++++++++++++++----- .../02_valid_skohub_file_cs_prefLabel.ttl | 56 ++++++++++++++++ .../03_valid_skohub_file_cs_dctitle.ttl | 57 +++++++++++++++++ .../04_valid_skohub_file_dc_description.ttl | 57 +++++++++++++++++ 4 files changed, 217 insertions(+), 17 deletions(-) create mode 100644 tests/valid/skohub.shacl.ttl/02_valid_skohub_file_cs_prefLabel.ttl create mode 100644 tests/valid/skohub.shacl.ttl/03_valid_skohub_file_cs_dctitle.ttl create mode 100644 tests/valid/skohub.shacl.ttl/04_valid_skohub_file_dc_description.ttl diff --git a/skohub.shacl.ttl b/skohub.shacl.ttl index ce45c6d..84ca58d 100644 --- a/skohub.shacl.ttl +++ b/skohub.shacl.ttl @@ -9,6 +9,7 @@ @prefix dct: . @prefix sdo: . @prefix vann: . +@prefix dc: . # rdfs:comment holds info with what file under ./tests/invalid/skohub.shacl.ttl # the constraint is tested @@ -17,14 +18,32 @@ :ConceptSchemeShape a sh:NodeShape ; sh:targetClass skos:ConceptScheme ; - sh:property [ - sh:path dct:title ; - sh:minCount 1; - sh:datatype rdf:langString ; - sh:message "Concept Scheme has no dct:title with a language tag!" ; - sh:severity sh:Violation ; - rdfs:comment "Tested with 01_cs_no_title.ttl" ; - ] ; + sh:or ( + [ + sh:path dct:title ; + sh:minCount 1; + sh:datatype rdf:langString ; + sh:message "Concept Scheme has no dct:title with a language tag!" ; + sh:severity sh:Violation ; + rdfs:comment "Tested with 01_cs_no_title.ttl" ; + ] + [ + sh:path skos:prefLabel ; + sh:minCount 1; + sh:datatype rdf:langString ; + sh:message "Concept Scheme has no skos:prefLabel with a language tag!" ; + sh:severity sh:Violation ; + rdfs:comment "Tested with 01_cs_no_title.ttl" ; + ] + [ + sh:path dc:title ; + sh:minCount 1; + sh:datatype rdf:langString ; + sh:message "Concept Scheme has no dc:title with a language tag!" ; + sh:severity sh:Violation ; + rdfs:comment "Tested with 01_cs_no_title.ttl" ; + ] + ); sh:property [ sh:path skos:hasTopConcept ; sh:minCount 1 ; @@ -40,15 +59,26 @@ sh:message "The target class for hasTopConcept should be skos:Concept" ; rdfs:comment "Tested with 03_cs_target_class_hasTopConcept.ttl" ; ] ; - sh:property [ - sh:path dct:description ; - sh:datatype rdf:langString ; - sh:severity sh:Warning ; - sh:minCount 1 ; - sh:message: "A description of the Concept Scheme should be provided." ; - rdfs:comment "Tested with 04_cs_no_description.ttl" ; - rdfs:comment "Tested with 05_cs_description_no_langstring.ttl" ; - ] ; + sh:or ( + [ + sh:path dct:description ; + sh:datatype rdf:langString ; + sh:severity sh:Warning ; + sh:minCount 1 ; + sh:message: "A description of the Concept Scheme should be provided." ; + rdfs:comment "Tested with 04_cs_no_description.ttl" ; + rdfs:comment "Tested with 05_cs_description_no_langstring.ttl" ; + ] + [ + sh:path dc:description ; + sh:datatype rdf:langString ; + sh:severity sh:Warning ; + sh:minCount 1 ; + sh:message: "A description of the Concept Scheme should be provided." ; + rdfs:comment "Tested with 04_cs_no_description.ttl" ; + rdfs:comment "Tested with 05_cs_description_no_langstring.ttl" ; + ] + ) ; sh:property [ sh:path dct:license ; sh:minCount 1 ; diff --git a/tests/valid/skohub.shacl.ttl/02_valid_skohub_file_cs_prefLabel.ttl b/tests/valid/skohub.shacl.ttl/02_valid_skohub_file_cs_prefLabel.ttl new file mode 100644 index 0000000..ff7e0b2 --- /dev/null +++ b/tests/valid/skohub.shacl.ttl/02_valid_skohub_file_cs_prefLabel.ttl @@ -0,0 +1,56 @@ +@base . +@prefix dct: . +@prefix skos: . +@prefix schema: . +@prefix vann: . + +# This Concept Scheme has a skos:prefLabel + +<> a skos:ConceptScheme ; + skos:prefLabel "Test Vokabular"@de, "Test Vocabulary"@en ; + dct:description "Test Beschreibung"@de, "Test Description"@en ; + dct:issued "2019-12-11" ; + dct:publisher ; + dct:license ; + vann:preferredNamespaceUri "https://w3id.org/test" ; + skos:hasTopConcept . + + a skos:Concept ; + skos:prefLabel "Konzept 1"@de, "Concept 1"@en ; + skos:altLabel "Alternativbezeichnung 1"@de, "Alternativbezeichnung 2"@de, "Alt Label 1"@en ; + skos:hiddenLabel "Verstecktes Label 1"@de, "Verstecktes Label 2"@de ; + skos:definition "Meine Definition"@de ; + skos:scopeNote "Meine Scope Note"@de ; + skos:note "Meine Anmerkung"@de ; + skos:notation "1", "notation" ; + skos:example "Ein Beispiel"@de ; + skos:narrower ; + skos:narrowerTransitive ; + skos:narrowMatch ; + skos:related ; + skos:relatedMatch ; + skos:closeMatch ; + skos:exactMatch ; + skos:topConceptOf <> . + + a skos:Concept ; + skos:prefLabel "Konzept 2"@de, "Concept 2"@en ; + skos:narrower ; + skos:broader ; + skos:broaderTransitive ; + skos:broadMatch ; + skos:inScheme <> . + + a skos:Concept ; + skos:prefLabel "Konzept 3"@de ; + skos:broader ; + skos:inScheme <> . + + a skos:Concept ; + skos:prefLabel "Konzept 4"@de ; + skos:broader ; + skos:inScheme <> . + + a skos:Collection ; + skos:prefLabel "Meine Collection"@de, "My Collection"@en ; + skos:member , . diff --git a/tests/valid/skohub.shacl.ttl/03_valid_skohub_file_cs_dctitle.ttl b/tests/valid/skohub.shacl.ttl/03_valid_skohub_file_cs_dctitle.ttl new file mode 100644 index 0000000..7a52b89 --- /dev/null +++ b/tests/valid/skohub.shacl.ttl/03_valid_skohub_file_cs_dctitle.ttl @@ -0,0 +1,57 @@ +@base . +@prefix dct: . +@prefix skos: . +@prefix schema: . +@prefix vann: . +@prefix dc: . + +# This Concept Scheme has a dc:title field + +<> a skos:ConceptScheme ; + dc:title "Test Vokabular"@de, "Test Vocabulary"@en ; + dct:description "Test Beschreibung"@de, "Test Description"@en ; + dct:issued "2019-12-11" ; + dct:publisher ; + dct:license ; + vann:preferredNamespaceUri "https://w3id.org/test" ; + skos:hasTopConcept . + + a skos:Concept ; + skos:prefLabel "Konzept 1"@de, "Concept 1"@en ; + skos:altLabel "Alternativbezeichnung 1"@de, "Alternativbezeichnung 2"@de, "Alt Label 1"@en ; + skos:hiddenLabel "Verstecktes Label 1"@de, "Verstecktes Label 2"@de ; + skos:definition "Meine Definition"@de ; + skos:scopeNote "Meine Scope Note"@de ; + skos:note "Meine Anmerkung"@de ; + skos:notation "1", "notation" ; + skos:example "Ein Beispiel"@de ; + skos:narrower ; + skos:narrowerTransitive ; + skos:narrowMatch ; + skos:related ; + skos:relatedMatch ; + skos:closeMatch ; + skos:exactMatch ; + skos:topConceptOf <> . + + a skos:Concept ; + skos:prefLabel "Konzept 2"@de, "Concept 2"@en ; + skos:narrower ; + skos:broader ; + skos:broaderTransitive ; + skos:broadMatch ; + skos:inScheme <> . + + a skos:Concept ; + skos:prefLabel "Konzept 3"@de ; + skos:broader ; + skos:inScheme <> . + + a skos:Concept ; + skos:prefLabel "Konzept 4"@de ; + skos:broader ; + skos:inScheme <> . + + a skos:Collection ; + skos:prefLabel "Meine Collection"@de, "My Collection"@en ; + skos:member , . diff --git a/tests/valid/skohub.shacl.ttl/04_valid_skohub_file_dc_description.ttl b/tests/valid/skohub.shacl.ttl/04_valid_skohub_file_dc_description.ttl new file mode 100644 index 0000000..2db25cb --- /dev/null +++ b/tests/valid/skohub.shacl.ttl/04_valid_skohub_file_dc_description.ttl @@ -0,0 +1,57 @@ +@base . +@prefix dct: . +@prefix skos: . +@prefix schema: . +@prefix vann: . +@prefix dc: . + +# Concept Scheme has a dc:description + +<> a skos:ConceptScheme ; + dct:title "Test Vokabular"@de, "Test Vocabulary"@en ; + dc:description "Test Beschreibung"@de, "Test Description"@en ; + dct:issued "2019-12-11" ; + dct:publisher ; + dct:license ; + vann:preferredNamespaceUri "https://w3id.org/test" ; + skos:hasTopConcept . + + a skos:Concept ; + skos:prefLabel "Konzept 1"@de, "Concept 1"@en ; + skos:altLabel "Alternativbezeichnung 1"@de, "Alternativbezeichnung 2"@de, "Alt Label 1"@en ; + skos:hiddenLabel "Verstecktes Label 1"@de, "Verstecktes Label 2"@de ; + skos:definition "Meine Definition"@de ; + skos:scopeNote "Meine Scope Note"@de ; + skos:note "Meine Anmerkung"@de ; + skos:notation "1", "notation" ; + skos:example "Ein Beispiel"@de ; + skos:narrower ; + skos:narrowerTransitive ; + skos:narrowMatch ; + skos:related ; + skos:relatedMatch ; + skos:closeMatch ; + skos:exactMatch ; + skos:topConceptOf <> . + + a skos:Concept ; + skos:prefLabel "Konzept 2"@de, "Concept 2"@en ; + skos:narrower ; + skos:broader ; + skos:broaderTransitive ; + skos:broadMatch ; + skos:inScheme <> . + + a skos:Concept ; + skos:prefLabel "Konzept 3"@de ; + skos:broader ; + skos:inScheme <> . + + a skos:Concept ; + skos:prefLabel "Konzept 4"@de ; + skos:broader ; + skos:inScheme <> . + + a skos:Collection ; + skos:prefLabel "Meine Collection"@de, "My Collection"@en ; + skos:member , .