我正在使用 TopBraid Composer 免费版 (5.1.3) 创建包括 SPIN 约束的本体。然后我将生成的 RDF 文件加载到 RDF4J (2.0.1) 并使用 RDF4J Workbench 进行测试。
我正在研究 SPIN 约束。这是一个检查我添加到CRO2:SignalRate
课程中的非负信号速率的示例:
CONSTRUCT {
?this soo:hasConstraintViolation _:b0 .
_:b0 a spin:ConstraintViolation .
_:b0 rdfs:label "Non-Positive SignalRate" .
_:b0 spin:violationRoot ?this .
_:b0 spin:violationPath Nuvio:hasDataValue .
_:b0 spin:violationLevel spin:Warning .
}
WHERE {
?this Nuvio:hasDataValue ?signalRate .
FILTER (?signalRate <= 0.0) .
}
因此,我正在使用以下 SPARQL 更新查询在 RDF4J 工作台中测试此约束:
PREFIX inst: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Sharing/Instantiations#>
PREFIX Nuvio: <http://cogradio.org/ont/Nuvio.owl#>
PREFIX CRO2: <http://cogradio.org/ont/CRO2.owl#>
INSERT DATA {
inst:aSignalRate_test a CRO2:SignalRate ;
Nuvio:hasDataValue "-10"^^xsd:long .
}
这个测试瞬间违反了上面显示的约束。如果我省略了spin:violationLevel
三元组并允许它默认为 a spin:Error
,那么我会从查询中收到一条错误消息,并且不会像预期的那样断言测试实例。如图所示执行时,违反约束是 a spin:Warning
,因此inst:aSignalRate_test
创建的个体具有数据值 -10.0。 我的问题是,约束CONSTRUCT
条款中的断言在哪里?spin:violationLevel
我相信自从影响行为 发生变化以来,它们就被断言了。请注意,我尝试使用自己的soo:hasConstraintViolation
属性绑定到空白节点,但这不起作用。CONSTRUCT 三元组是否在其他上下文/图中断言?我只是对所有内容使用默认值/图形。
我正在使用 RDF4J Workbench 的 Explore 和使用 SPARQL 查询来寻找预期的三元组。例如,在我断言我的错误后,以下查询不返回任何内容CRO2:SignalRate
:
PREFIX spin: <http://spinrdf.org/spin#>
SELECT DISTINCT *
WHERE {
?s spin:violationRoot ?o .
}
这种行为在 TopBraid Composer FE 和 RDF4J Workbench 中的断言是一致的。
我的目标是查找和使用在 SPIN 约束违反情况下断言的诊断消息,最好使用 SPARQL 查询来查找此类诊断。似乎有道理。我错过了一些东西。
谢谢。