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

How to use the ASK WHERE statement with multiple conditions (sparql)

我想检查实体是否具有下列类型之一。如果是,则查询必须 return 为真。

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 查询应该 return 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:type 的这些值之一:

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