如何将模型检查逻辑查询转换为SPARQL查询?

hal*_*ala 3 rdf semantic-web ontology sparql jena

假设我有以下 RDF 数据:

\n\n
@prefix : <urn:ex:>\n\n:m  :A  "a"\n:m  :A  "b"\n:m  :A  "c"\n:m  :B  "a"\n:m  :B  "b"\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
\xe2\x88\x80x A(X) \xe2\x86\x92 B(x)\n
Run Code Online (Sandbox Code Playgroud)\n

use*_*512 5

SPARQL 没有条件或通用量化,但有存在性(有什么与此匹配吗?)、(隐式)合取和否定(在“不存在”意义上)。

\n\n

所以重写问题:

\n\n
\xe2\x88\x80x A(x) \xe2\x86\x92 B(x) \xe2\x87\x92\n\xe2\x88\x80x \xc2\xac ( A(x) \xe2\x88\xa7 \xc2\xac B(x) ) \xe2\x87\x92\n\xc2\xac \xe2\x88\x83x A(x) \xe2\x88\xa7 \xc2\xac B(x)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
# Is there anything of type A but not B?\nASK {\n  { ?x a :A } MINUS { ?x a :B }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n