- From: Simon Steyskal <simon.steyskal@wu.ac.at>
- Date: Thu, 01 Jun 2017 07:40:57 +0200
- To: Håvard Mikkelsen Ottestad <haavard.ottestad@acando.no>
- Cc: Florian Kleedorfer <florian.kleedorfer@austria.fm>, public-rdf-shapes@w3.org
Hi!
Each skos:Concept must have:
1) at least 1 skos:prefLabel
2) max 1 skos:prefLabel per language
3) max 1 skos:prefLabel without language tag
Each skos:prefLabel is either of type xsd:string or rdf:langString .
---->
:shape
a sh:NodeShape ;
sh:targetClass skos:Concept ;
sh:property [
sh:path skos:prefLabel ;
sh:minCount 1 ;
sh:uniqueLang true ;
sh:qualifiedMaxCount 1 ;
sh:qualifiedValueShape [ sh:datatype xsd:string ]
] .
:prefLabelShape
a sh:NodeShape ;
sh:targetObjectsOf skos:prefLabel ;
sh:or (
[ sh:datatype xsd:string ]
[ sh:datatype rdf:langString ]
) .
br, simon
---
DDipl.-Ing. Simon Steyskal
Institute for Information Business, WU Vienna
www: http://www.steyskal.info/ twitter: @simonsteys
Am 2017-06-01 00:53, schrieb Florian Kleedorfer:
> Hi,
>
> Thanks for this riddle - I'm new to SHACL and it got me curious. Two
> tricks: 1. without language, the value is sh:datatype xsd:string. 2.
> You are not restricting ALL values with a property shape, only SOME
> values with one shape and SOME with another, so you can't use sh:and
> (or sh:or or sh:xone), you have to use the sh:qualifiedValueShape
> feature.
>
> Took me some time to figure that out because I tried with
> sh:or/and/xone. I did not find the definition of sh:or/and/xone in the
> spec too helpful. It says 'sh:or specifies the condition that each
> value node conforms to at least one of the provided shapes.' But I
> would have been much faster solving this if it had sad 'sh:or
> specifies the condition that the set of all value nodes conforms to at
> least one of the provided shapes'
>
> Anyway, here's the shape graph:
>
> @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
> @prefix sh: <http://www.w3.org/ns/shacl#> .
> @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
> @prefix : <http://example.com/ex#> .
>
> :shape
> a sh:NodeShape ;
> sh:targetNode :target;
> sh:property [
> sh:path skos:prefLabel ;
> sh:qualifiedValueShapesDisjoint true ;
> sh:qualifiedMaxCount 1 ;
> sh:qualifiedValueShape [ sh:datatype xsd:string ]
> ];
> sh:property [
> sh:path skos:prefLabel ;
> sh:qualifiedValueShapesDisjoint true ;
> sh:uniqueLang true ;
> sh:qualifiedValueShape [ sh:datatype rdf:langString ]
> ].
>
> data graph:
>
> @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
> @prefix sh: <http://www.w3.org/ns/shacl#> .
> @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
> @prefix : <http://example.com/ex#> .
>
> :target
> skos:prefLabel "Tree" ;
> skos:prefLabel "Arbre"@fr ;
> skos:prefLabel "Tree"@en ;
> skos:prefLabel "Baum"@de.
>
> HTH,
> Florian
>
> Am 2017-05-31 21:32, schrieb Håvard Mikkelsen Ottestad:
>> Hi,
>>
>> I’m trying to make shapes for DCAT and one of things I have run into
>> is trying to force things to have skos:prefLabel such that:
>>
>> * There is max one per language
>> * And max one without language
>>
>> I can solve the first one with sh:uniqueLang, but how do I solve the
>> second?
>>
>> Regards,
>>
>> Håvard M. Ottestad
Received on Thursday, 1 June 2017 05:41:31 UTC