我想使用 SHACL 检查建筑项目的传入数据集。为此,我在类级别定义了几个约束。在我的用例中,我需要能够对指定实例的这些约束进行项目特定异常。这在 SHACL 中可能吗?这个怎么建模?
最后,我想在不同的形状图(SG)中描述这些约束:
- 通用SG,无一例外地遵守规则;
- 项目 SG,在一般 SG 中包含特定项目相关的约束和约束例外。
我可以想到诸如 SHACL-SPARQL 之类的变通方法,或者首先检查一般 SG,然后使用过滤器忽略项目特定的异常,但我想知道是否有针对这种情况的更干净的解决方案。
下面是一个简化的例子来说明这个问题:
数据图可能如下所示:
@prefix schema: <http://www.example.org/schema#> .
@prefix : <http://www.example.org/data#> .
schema:Building a owl:Class .
:CorrectBuilding a schema:Building ;
schema:owner "John Doe" ;
schema:otherProp "Some other prop" .
:IncorrectBuilding a schema:Building ;
schema:otherProp "Some other prop" .
:BuildingWithException a schema:Building ;
schema:otherProp "Some other prop" .
一般的 SG 可能如下所示:
@prefix schema: <http://www.example.org/schema#> .
@prefix : <http://www.example.org/data#> .
@prefix gsg: <http://www.example.org/generalsg#>
gsg:PersonShape
a sh:NodeShape ;
sh:targetClass schema:Building ;
sh:property [
sh:path schema:owner ;
sh:minCount 1 ;
] .
使用上述和项目特定的 SG,验证器应该返回 的违规:IncorrectBuilding
,而不是:BuildingWithException
。
我怎样才能为项目制作特定的例外:BuildingWithException
?
感谢您的阅读,让我知道您的想法。