【问题标题】:how to convert model checking logic query to SPARQL query?如何将模型检查逻辑查询转换为 SPARQL 查询?
【发布时间】:2016-06-15 10:26:30
【问题描述】:

假设我有以下 RDF 数据:

@prefix : <urn:ex:>

:m  :A  "a"
:m  :A  "b"
:m  :A  "c"
:m  :B  "a"
:m  :B  "b"

我可以使用什么 SPARQL 查询来检查 RDF 模型是否满足以下逻辑公式?

∀x A(X) → B(x)

【问题讨论】:

标签: sparql rdf jena semantic-web ontology


【解决方案1】:

SPARQL 没有条件句或全称量词,但有存在词(有什么匹配的吗?)、(隐式)合取和否定(在“缺席”意义上)。

所以改写问题:

∀x A(x) → B(x) ⇒
∀x ¬ ( A(x) ∧ ¬ B(x) ) ⇒
¬ ∃x A(x) ∧ ¬ B(x)

这几乎是 SPARQL 可以做的事情:

# Is there anything of type A but not B?
ASK {
  { ?x a :A } MINUS { ?x a :B }
}

如果有任何违反约束的情况,此查询将返回 true

【讨论】:

  • 这是minus 的一个很好的用法。我倾向于默认使用 not exists(例如,?x a :A . filter not exists { ?x a :B },因为 minus 有时会有点令人惊讶(它们并不总是产生相同的结果),但这是正确使用 minus 的一个很好的例子。
  • 关于“如果返回 false,则测试已通过”的更多说明。这是绝对正确的,但是根据语句的 positive 形式来考虑可能更容易:“如果有任何违反约束的情况,查询将返回 true。 "
  • 文本被盗 :-) 是的,减号在这里感觉更好,但像你一样我倾向于过滤不存在​​。
猜你喜欢
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
相关资源
最近更新 更多