1

我一直在尝试使用 SHACL验证'''xsd:dateTime'''值。我正在使用 pychacl,我拥有的脚本应该按原样运行pip install pyshacl, rdflib
SHACL 形状图如下所示:

from pyshacl import validate
import rdflib

teardown_shape = """
@prefix c64: <http://car64.org/> .
@prefix sch: <http://schema.org/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

c64:TouchdownShape a sh:NodeShape ;
    sh:property [ sh:datatype "xsd:dateTime" ;
            sh:path c64:touchdownDateCommenced ];
    sh:targetClass c64:Touchdown .
"""

instance_data = """
@prefix c64: <http://car64.org/> .
@prefix sch: <http://schema.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://car64.org/9749a01c-ac01-11ea-a509-acde48001122> a c64:Touchdown ;
    c64:touchdownDateCommenced "2020-06-11T16:35:42"^^xsd:dateTime ;
    c64:touchdownEnvironment "Football field" .
"""


instance_data_graph = rdflib.Graph().parse(data=instance_data, format='turtle')
shacl_validation_graph = rdflib.Graph().parse(data=teardown_shape, format='turtle')

r = validate(instance_data_graph, shacl_graph=shacl_validation_graph, abort_on_error=False, meta_shacl=False, debug=True, advanced=True)

我收到以下验证错误:

Constraint Violation in DatatypeConstraintComponent (http://www.w3.org/ns/shacl#DatatypeConstraintComponent):
    Severity: sh:Violation
    Source Shape: [ sh:datatype Literal("sch:DateTime") ; sh:message Literal("No date ('touchdownDateCommenced') has been specified, or is malformed.") ; sh:path c64:touchdownDateCommenced ]
    Focus Node: <http://car64.org/9749a01c-ac01-11ea-a509-acde48001122>
    Value Node: Literal("2020-06-11T16:35:42" = 2020-06-11 16:35:42, datatype=xsd:dateTime)
    Result Path: c64:touchdownDateCommenced
    sh:resultMessage "Value does not have datatype xsd:dateTime" ;

根据xsd:dateTime ,日期似乎格式正确,但仍然失败。我在这里想念什么?

4

1 回答 1

0

形状图有语法错误。它需要是 sh:datatype xsd:dateTime 而不是字符串“xsd:dateTime”。

于 2020-06-12T23:44:27.903 回答