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

Are*_*ref 5 sparql

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

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

这是其中之一的查询示例:

ASK { <http://fkg.iust.ac.ir/resource/A> ?p  ?o }
Run Code Online (Sandbox Code Playgroud)

该查询返回truefalse

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

这是我的示例响应:

---------------------------------------------------
|        resource        |        existing        |
|========================|========================|
|           :A           |          true          |
|------------------------|------------------------|
|           :B           |          false         |
|------------------------|------------------------|
|           :C           |          true          |
---------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

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

cyg*_*gri 5

查询:

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

SELECT ?resource (EXISTS { ?resource ?p ?o } AS ?existing) {
    VALUES ?resource { :A :B :C }
}
Run Code Online (Sandbox Code Playgroud)

测试数据:

<http://fkg.iust.ac.ir/resource/A> a _:dummy.
<http://fkg.iust.ac.ir/resource/C> a _:dummy.
Run Code Online (Sandbox Code Playgroud)

结果:

-----------------------
| resource | existing |
=======================
| :A       | true     |
| :B       | false    |
| :C       | true     |
-----------------------
Run Code Online (Sandbox Code Playgroud)
  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 })
    
    Run Code Online (Sandbox Code Playgroud)