如何验证 SHACL 中没有数据类型定义的文字值?
How to validate literal values with no datatype definition in SHACL?
我假设没有任何数据类型与具有 xsd:string
作为数据类型隐式相同,但是 SHACL 给了我一个验证错误。我的假设是错误的还是 SHACL 未涵盖?在后一种情况下,如何验证数据类型是空的还是 xsd:string?
string.ttl
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
<message> <title> "Hello World"@en.
shacl.ttl
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
@prefix sh:<http://www.w3.org/ns/shacl#> .
:TitleShape rdf:type sh:NodeShape;
sh:targetObjectsOf <title>;
sh:datatype xsd:string;
sh:closed true.
错误
$ pyshacl string.ttl -s shacl.ttl
Validation Report
Conforms: False
Results (1):
Constraint Violation in DatatypeConstraintComponent (http://www.w3.org/ns/shacl#DatatypeConstraintComponent):
Severity: sh:Violation
Source Shape: :TitleShape
Focus Node: Literal("Hello World", lang=en)
Value Node: Literal("Hello World", lang=en)
Message: Value is not Literal with datatype xsd:string
在您的示例中,数据包含一个 rdf:langString 文字,它与 xsd:string 的数据类型不同 - 您会看到 @en 语言标记。您可能指的是以下内容是等效的:“Hello World”和“Hello World”^^xsd:string。所以上面的 pyshacl 结果对我来说是正确的。
我假设没有任何数据类型与具有 xsd:string
作为数据类型隐式相同,但是 SHACL 给了我一个验证错误。我的假设是错误的还是 SHACL 未涵盖?在后一种情况下,如何验证数据类型是空的还是 xsd:string?
string.ttl
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
<message> <title> "Hello World"@en.
shacl.ttl
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
@prefix sh:<http://www.w3.org/ns/shacl#> .
:TitleShape rdf:type sh:NodeShape;
sh:targetObjectsOf <title>;
sh:datatype xsd:string;
sh:closed true.
错误
$ pyshacl string.ttl -s shacl.ttl
Validation Report
Conforms: False
Results (1):
Constraint Violation in DatatypeConstraintComponent (http://www.w3.org/ns/shacl#DatatypeConstraintComponent):
Severity: sh:Violation
Source Shape: :TitleShape
Focus Node: Literal("Hello World", lang=en)
Value Node: Literal("Hello World", lang=en)
Message: Value is not Literal with datatype xsd:string
在您的示例中,数据包含一个 rdf:langString 文字,它与 xsd:string 的数据类型不同 - 您会看到 @en 语言标记。您可能指的是以下内容是等效的:“Hello World”和“Hello World”^^xsd:string。所以上面的 pyshacl 结果对我来说是正确的。