通过 SPARQL 查询检查多个资源是否存在

Check multiple resources exist or not via SPARQL query

我有多个资源,例如 A, B, C

我想知道这些资源是否存在于我的数据库中。

以下是其中一个的查询示例:

ASK { <http://fkg.iust.ac.ir/resource/A> ?p  ?o }

这个查询 returns truefalse.

最好使用一个查询,我需要得到2列,resource & existing

这是我的示例回复:

---------------------------------------------------
|        resource        |        existing        |
|========================|========================|
|           :A           |          true          |
|------------------------|------------------------|
|           :B           |          false         |
|------------------------|------------------------|
|           :C           |          true          |
---------------------------------------------------

我知道 ASKUNION,但我怎样才能将它们放在一起用于此示例?

查询:

PREFIX : <http://fkg.iust.ac.ir/resource/>

SELECT ?resource (EXISTS { ?resource ?p ?o } AS ?existing) {
    VALUES ?resource { :A :B :C }
}

测试数据:

<http://fkg.iust.ac.ir/resource/A> a _:dummy.
<http://fkg.iust.ac.ir/resource/C> a _:dummy.

结果:

-----------------------
| resource | existing |
=======================
| :A       | true     |
| :B       | false    |
| :C       | true     |
-----------------------
  1. 要获得表格结果,请使用 SELECT 而不是 ASK
  2. 要获取已知资源列表的多个解决方案,请使用 VALUES
  3. EXISTS 就像一个迷你 ASK 查询,可以嵌入表达式
  4. 使用SELECT (expression AS ?variable)形式将mini-ASK的结果绑定到变量?existing
  5. 警告:答案取决于您所说的“资源存在”是什么意思。在 RDF 图中,节点不会显式地创建和删除,但它们的存在仅仅是因为在三元组中被使用。编写的原始 ASK 查询检查是否存在任何以该节点为主题的三元组。为了完整起见,可能还需要检查对象位置:
    (EXISTS { ?resource ?p ?o } || EXISTS { ?s ?p ?resource })