sparql - 如何使用具有多个条件的 ASK WHERE 语句 (sparql)

标签 sparql freebase

我想检查一个实体是否具有下面列出的类型之一。如果是,则查询必须返回 true。

PREFIX basekb:<http://rdf.basekb.com/ns/>

basekb:music.release_track
basekb:book.written_work
basekb:book.book
basekb:music.release
basekb:music.album
basekb:tv.tv_series.episode
basekb:music.composition
basekb:music.recording
basekb:film.film
basekb:fictional_universe.fictional_character

实体m.0109yb6有以下类型。 sparql 查询应返回 true

http://rdf.basekb.com/ns/common.topic
http://rdf.basekb.com/ns/music.recording

问题

我提出了以下查询。有没有更好的方法来解决这个问题?

PREFIX basekb:<http://rdf.basekb.com/ns/>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdf1:<http://www.w3.org/2000/01/rdf-schema#>

ASK where 
{
          {basekb:m.0109yb6 rdf:type ?x; rdf:type basekb:music.release_track} 
    UNION {basekb:m.0109yb6 rdf:type ?x; rdf:type basekb:book.written_work}
    UNION {basekb:m.0109yb6 rdf:type ?x; rdf:type basekb:book.book}
    UNION {basekb:m.0109yb6 rdf:type ?x; rdf:type basekb:music.release}
    UNION {basekb:m.0109yb6 rdf:type ?x; rdf:type basekb:music.album}
    UNION {basekb:m.0109yb6 rdf:type ?x; rdf:type basekb:tv.tv_series.episode}
    UNION {basekb:m.0109yb6 rdf:type ?x; rdf:type basekb:music.composition}
    UNION {basekb:m.0109yb6 rdf:type ?x; rdf:type basekb:music.recording}
    UNION {basekb:m.0109yb6 rdf:type ?x; rdf:type basekb:film.film}
    UNION {basekb:m.0109yb6 rdf:type ?x; rdf:type basekb:fictional_universe.fictional_character}
}

答案:正确

最佳答案

您编写的查询有点奇怪。没有使用 ?x 变量,因此您可以立即将其简化为:

ASK where 
{
          {basekb:m.0109yb6 rdf:type basekb:music.release_track} 
    UNION {basekb:m.0109yb6 rdf:type basekb:book.written_work}
    #-- ...
    UNION {basekb:m.0109yb6 rdf:type basekb:fictional_universe.fictional_character}
}

不过,仍然有很多重复的代码。您可以使用 SPARQL 1.1 的 values 来指定变量 ?type 的允许值,然后只需询问您的实体是否具有 rdf 的这些值之一:类型:

prefix basekb:<http://rdf.basekb.com/ns/>
prefix rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>

ask where {
  basekb:m.0109yb6 rdf:type ?type
  values ?type {
    basekb:music.release_track
    basekb:book.written_work
    basekb:book.book
    basekb:music.release
    basekb:music.album
    basekb:tv.tv_series.episode
    basekb:music.composition
    basekb:music.recording
    basekb:film.film
    basekb:fictional_universe.fictional_character
  }
}

关于sparql - 如何使用具有多个条件的 ASK WHERE 语句 (sparql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30979567/

相关文章:

regex - SPARQL 中的 dc :Creator string literal vs. 正则表达式过滤器

SPARQL更新示例,用于在单个查询中更新三个以上的三元组

java - Jena 的 SPARQL 解析错误,但 DBpedia 接受查询

javascript - 使用 Rails 3.1 Assets 管道包括外部库

java - Freebase 寻找替代公司名称

sparql - 如何使用 SPARQL 查询查找资源的下一个最大值

sparql - RDFox 守护进程端口

完整主题摘要的 Freebase 查询

freebase - 在 any_reverse 反射上消除 MQL 结果

search - Freebase:格式化搜索结果以列出未知类型对象的所有属性