使用 dash:reifiableBy 的 SHACL 验证
SHACL validation using dash:reifiableBy
我正在 TopBraidComposer Maestro Edition (v 6.3.2) 中使用 SHACL 测试 RDF 数据的验证。
在分析 SHACL 的过程中,我看到了文档 DASH Reification Support for SHACL。该文件的第 2 章定义了 属性 dash:reifiableBy
,根据该文件 - “ 可以用于 link 一个 SHACL 属性 形状或多个节点形状。任何具体化的语句都必须符合这些节点形状。"
这似乎是说可以针对某些形状定义语句的 SHACL 验证。该文档有一个示例,我尝试在 TopBraidComposer 中 运行 - 稍微修改一下,以便实际获得验证结果(在这种情况下,该语句无效)。密码是:
# baseURI: http://example.org/shacl/shapes/dash/reifiableBy
# imports: http://datashapes.org/dash
# prefix: exshacl
@prefix ex: <http://example.org/shacl/data/dash/reifiableBy#> .
@prefix exschema: <http://example.org/shacl/schema/dash/reifiableBy/> .
@prefix exshacl: <http://example.org/shacl/shapes/dash/reifiableBy#> .
@prefix dash: <http://datashapes.org/dash#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<http://example.org/shacl/shapes/dash/reifiableBy>
a owl:Ontology ;
owl:imports <http://datashapes.org/dash> ;
.
###########################
# Shape(s)
###########################
exshacl:ProvenanceShape
a sh:NodeShape ;
sh:property [
a sh:PropertyShape ;
sh:path exschema:date ;
sh:datatype xsd:date ;
sh:minCount 1 ;
] ;
sh:property [
a sh:PropertyShape ;
sh:path exschema:author ;
sh:nodeKind sh:IRI ;
sh:minCount 1 ;
] ;
.
exshacl:PersonShape
a sh:NodeShape ;
sh:targetClass exschema:Person ;
sh:property [
a sh:PropertyShape ;
sh:path exschema:age ;
sh:datatype xsd:integer ;
sh:minCount 1 ;
dash:reifiableBy exshacl:ProvenanceShape ;
] ;
.
###########################
# Data
###########################
ex:Bob
a exschema:Person ;
exschema:age "23"^^xsd:integer ;
.
ex:BobAge23Reification
a rdf:Statement ;
rdf:subject ex:Bob ;
rdf:predicate exschema:age ;
rdf:object "23"^^xsd:integer ;
ex:author ex:Claire .
exshacl:PersonShape
有效,因为 属性 形状确保 exschema:age
存在于 exschema:Person
并且数据类型为 xsd:integer
。
但是,三元组 ex:Bob exschema:age "23"^^xsd:integer
上的 rdf 语句 ex:BobAge23Reification
未针对 exshacl:ProvenanceShape
进行验证。虽然 属性 exschema:author
出现在语句中,但 属性 exschema:date
不存在。
示例代码是否错误或缺少关键位,或者 dash:reifiableBy
没有定义实际验证的 SHACL 约束组件(而是仅用于在 GUI 中定义编辑表单) )?
(此类问题最好在 topbraid-users 邮件列表中提出)
形状看起来不错,但 TopBraid 目前未验证 rdf:Statements,而是使用 http://datashapes.org/reification.html#uriReification
的具体化三元组
这可能会在未来的版本中发生变化,具体取决于 Jena 可能采取的 RDF* 支持方向。
当前版本的TBC不适合编辑这些具体化的数值,但TopBraid EDG是。
我正在 TopBraidComposer Maestro Edition (v 6.3.2) 中使用 SHACL 测试 RDF 数据的验证。
在分析 SHACL 的过程中,我看到了文档 DASH Reification Support for SHACL。该文件的第 2 章定义了 属性 dash:reifiableBy
,根据该文件 - “ 可以用于 link 一个 SHACL 属性 形状或多个节点形状。任何具体化的语句都必须符合这些节点形状。"
这似乎是说可以针对某些形状定义语句的 SHACL 验证。该文档有一个示例,我尝试在 TopBraidComposer 中 运行 - 稍微修改一下,以便实际获得验证结果(在这种情况下,该语句无效)。密码是:
# baseURI: http://example.org/shacl/shapes/dash/reifiableBy
# imports: http://datashapes.org/dash
# prefix: exshacl
@prefix ex: <http://example.org/shacl/data/dash/reifiableBy#> .
@prefix exschema: <http://example.org/shacl/schema/dash/reifiableBy/> .
@prefix exshacl: <http://example.org/shacl/shapes/dash/reifiableBy#> .
@prefix dash: <http://datashapes.org/dash#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<http://example.org/shacl/shapes/dash/reifiableBy>
a owl:Ontology ;
owl:imports <http://datashapes.org/dash> ;
.
###########################
# Shape(s)
###########################
exshacl:ProvenanceShape
a sh:NodeShape ;
sh:property [
a sh:PropertyShape ;
sh:path exschema:date ;
sh:datatype xsd:date ;
sh:minCount 1 ;
] ;
sh:property [
a sh:PropertyShape ;
sh:path exschema:author ;
sh:nodeKind sh:IRI ;
sh:minCount 1 ;
] ;
.
exshacl:PersonShape
a sh:NodeShape ;
sh:targetClass exschema:Person ;
sh:property [
a sh:PropertyShape ;
sh:path exschema:age ;
sh:datatype xsd:integer ;
sh:minCount 1 ;
dash:reifiableBy exshacl:ProvenanceShape ;
] ;
.
###########################
# Data
###########################
ex:Bob
a exschema:Person ;
exschema:age "23"^^xsd:integer ;
.
ex:BobAge23Reification
a rdf:Statement ;
rdf:subject ex:Bob ;
rdf:predicate exschema:age ;
rdf:object "23"^^xsd:integer ;
ex:author ex:Claire .
exshacl:PersonShape
有效,因为 属性 形状确保 exschema:age
存在于 exschema:Person
并且数据类型为 xsd:integer
。
但是,三元组 ex:Bob exschema:age "23"^^xsd:integer
上的 rdf 语句 ex:BobAge23Reification
未针对 exshacl:ProvenanceShape
进行验证。虽然 属性 exschema:author
出现在语句中,但 属性 exschema:date
不存在。
示例代码是否错误或缺少关键位,或者 dash:reifiableBy
没有定义实际验证的 SHACL 约束组件(而是仅用于在 GUI 中定义编辑表单) )?
(此类问题最好在 topbraid-users 邮件列表中提出)
形状看起来不错,但 TopBraid 目前未验证 rdf:Statements,而是使用 http://datashapes.org/reification.html#uriReification
的具体化三元组这可能会在未来的版本中发生变化,具体取决于 Jena 可能采取的 RDF* 支持方向。
当前版本的TBC不适合编辑这些具体化的数值,但TopBraid EDG是。