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

时间:2019-05-14 20:16:51

标签: sparql

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

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

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

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

此查询返回truefalse

最好使用一个查询,而我需要获得2列resourceexisting

这是我的样本回复:

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

我知道ASKUNION,但是如何为这个示例将它们放在一起?

1 个答案:

答案 0 :(得分:4)

查询:

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