I was wondering if there's a way to specify that a given sh:property
is expected to have a value of a URI without any particular class.
In the example SHACL below, the property meta:value
would only allow URIs, although I don't know of a way to represent it in SHACL.
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix meta: <metadata#> .
@prefix meta_sh: <metadata/shacl#> .
meta_sh:Entry
a sh:NodeShape;
sh:targetClass meta:Entry;
sh:property [
sh:path meta:value;
# Value expected to be a URI
sh:minCount 1; # Required; 1 or more
];
sh:property [
sh:path meta:time;
sh:datatype xsd:dateTime;
sh:minCount 1; sh:maxCount 1; # Required; 1
];
.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix meta: <metadata#> .
@prefix data: <data#> .
data:Entry_001
a meta:Entry;
meta:value data:ProductListing_459; # URI
meta:value data:RentalListing_934; # URI
meta:time "2022-06-15T06:20:31Z"^^xsd:dateTime;
.
this should work:
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix meta: <metadata#> .
@prefix meta_sh: <metadata/shacl#> .
meta_sh:Entry
a sh:NodeShape;
sh:targetClass meta:Entry;
sh:nodeKind sh:IRI ;
sh:property [
sh:path meta:value;
# Value expected to be a URI
sh:minCount 1; # Required; 1 or more
];
sh:property [
sh:path meta:time;
sh:datatype xsd:dateTime;
sh:minCount 1; sh:maxCount 1; # Required; 1
];
.
Yes, you are right, the sh:nodeKind
has to be part of the property shape.
The reason why it still not worked: the way you defined the prefixes. They were no full URIs so the SHACL processor added some parts (maybe the disk location of the file, depends). The result: the meta
in the shapes never matched the meta
in the data.
This works:
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix meta: <https://example.org/#> .
@prefix meta_sh: <metadata/shacl#> .
meta_sh:Entry
a sh:NodeShape;
sh:targetClass meta:Entry;
sh:property [
sh:path meta:value;
sh:nodeKind sh:IRI ;
sh:minCount 1; # Required; 1 or more
];
.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix meta: <https://example.org/#> .
@prefix data: <data#> .
data:Entry_001
a meta:Entry;
meta:value data:RentalListing_934 ; # URI
meta:time "2022-06-15T06:20:31Z"^^xsd:dateTime;
.
data:Entry_002
a meta:Entry;
meta:value "this is not an uri" ; # No Uri
meta:time "2022-06-15T06:20:31Z"^^xsd:dateTime;
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.