【发布时间】:2016-11-30 15:34:00
【问题描述】:
我正在使用 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 三元组并允许它默认为spin:Error,那么我会从查询中收到一条错误消息,并且测试实例没有如预期的那样被断言。如图所示执行时,约束违规为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 查询来查找此类诊断。似乎有道理。我错过了一些东西。
谢谢。
【问题讨论】:
标签: sparql owl rdf4j topbraid-composer spin-rdf