当前位置: 首页 > 知识库问答 >
问题:

使用构造旋转约束:构造的三元组去哪里?

巴英韶
2023-03-14

我正在使用TopBraid Composer免费版(5.1.3)创建包括旋转约束在内的本体。然后,我将生成的RDF文件加载到RDF4J(2.0.1)中,并使用RDF4J工作台进行测试

我正在研究自旋约束。下面是一个检查非负信号速率的例子,我已经添加CRO2: Signal速率类中:

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) .
}

因此,我正在RDF4J工作台中使用以下SPARQL更新查询测试此约束:

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 .
}

这个测试瞬间违反了上面显示的约束。如果我省略了旋转:违反级别三重,并允许默认为旋转:错误,那么我从查询中得到一条错误消息,测试实例没有被断言,正如预期的那样。当如图所示执行时,约束冲突是一个旋转:警告,因此inst:aSignalRate_test个体是用数据值-10.0创建的。我的问题是,约束的CONSTRUCT子句中的断言在哪里?我相信它们是被断言的,因为旋转的变化:违反级别影响行为。请注意,我试图用自己的soo: hasConstraintViolation属性绑定到空白节点,但这不起作用。是否在其他上下文/图中断言CONSTRUCT三元组?我只是使用默认/图形的一切。

我正在使用RDF4J工作台的Explore和SPARQL查询寻找预期的三元组。例如,在我断言我的错误CRO2:SignalRate后,以下查询不返回任何内容:

PREFIX spin: <http://spinrdf.org/spin#>

SELECT DISTINCT *
WHERE {
    ?s spin:violationRoot ?o .
}

这种行为在TopBraid Composer FE和RDF4J工作台中的断言之间是一致的。

我的目标是找到并使用在违反SPIN约束的情况下断言的诊断消息,最好是通过使用SPARQL查询来找到这样的诊断。似乎很合理。我错过了一些东西。

谢谢

共有2个答案

华善
2023-03-14

因此,在上面的@JeenBroekstra注释和我的响应注释之后,我已经切换到使用构造函数,这样错误信息仍然是可见的工件。我已经创建了几个我自己的spin:constructor子属性,以保持事物的有序性。我还指定了这些构造函数的执行顺序,以便这些检查在可能出错的其他规则之前运行(例如,通过负信号速率)。

这种方法的优点:

  • 错误详细信息工件(例如spin:violationRoot)在triple store中仍然可见。这在我涉及机器对机器的应用程序中非常重要

这种方法的缺点:

  • 错误的个体仍然被实例化。
  • 这不是标准行为,所以用于在日志中查找约束工件的工具可能找不到它们。

下面是一个示例规则的屏幕截图,该规则实现为一个子属性:构造函数:

蓟安歌
2023-03-14

简而言之:你不能。

自旋约束旨在检测违规行为并报告违规行为。在RDF4J中,报告机制是日志。

SPIN规范(http://spinrdf.org/spin.html#spin-constraints)的相关部分:

[...]如果ASK约束对一个实例的计算结果为true,则该实例违反了条件。或者,CONSTRUCT查询可以创建提供特定违规详细信息的自旋:约束违规类的实例。

请注意,没有要求推理器对基于CONSTRUCT的约束产生的数据做任何事情——它只是为了可选的“附加信息”。

也许值得一看的是,我们是否可以为reasoner添加一个增强功能,以一种或另一种形式报告此类三元组,但在当前系统中,只有SPIN规则(使用DELETE/INSERT等)修改数据库。

 类似资料:
  • C 风格的循环通常不必要 你可以写 C 风格的循环,但常常不需要它们。 不要在 foreach 的位置使用它们: for (my $i = 0; $i <= $#foo; $i++) { # BAD foreach (@foo) { # BETTER 不要在 while 的位置使用它们: for (my $i = <STDIN>; $i; $i = <STDIN>) { # BAD whil

  • 这是一款放置型游戏,游戏虽然没什么精美的图片和动听的音乐,但还是有相当的经营乐趣。

  • web3.eth.Contract类简化了与以太坊区块链上智能合约的交互。创建合约对象时, 只需指定相应智能合约的json接口,web3就可以自动地将所有的调用转换为底层 基于RPC的ABI调用。 通过web3的封装,与智能合约的交互就像与JavaScript对象一样简单。 实例化一个新的合约对象: new web3.eth.Contract(jsonInterface[, address][,

  • 问题内容: 具有如下数据结构: 如何构造Items的标题数组?如[‘One’,’Two’] 如果 标题 == [] {。,则此代码集将生成“语法错误:意外的标识符” 。 问题答案: 我只会用新数组返回标题 小提琴 此外,该错误是由于缺少括号引起的 应该 甚至更好

  • 生活中有很多的几何体具备旋转特征,比如球体,常见杯子, three.js提供了一个构造函数LatheGeometry(), LatheGeometry可以利用已有的二维数据生成三维顶点数据,二维数据可以通过二维向量对象Vector2定义,也可以通过3D曲线或2D线条轮廓生成。 LatheGeometry的二维坐标数据默认绕y轴旋转。 格式:LatheGeometry(points, segment

  • 分组构造描述正则表达式的子表达式并捕获输入字符串的子字符串。 下表列出了分组结构 - 分组构造 描述 图案 火柴 ( subexpression ) 捕获匹配的子表达式并为其指定从零开始的序数。 (\w)\1 "ee" in "deep" (?< name >subexpression) 将匹配的子表达式捕获到命名组中。 (?\w)\ k "ee" in "deep" (?< name1 -nam