假设我有以下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)
答案 0 :(得分:4)
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 。