SPARQL查询检索所有DBPedia文学类型

时间:2013-08-11 18:04:34

标签: sparql semantic-web dbpedia

我可以使用以下查询检索DBpedia中所有图书<http://dbpedia.org/ontology/Book>的列表:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX ontology: <http://dbpedia.org/ontology/> 
select distinct ?bookUri  
where { ?bookUri  rdf:type ontology:Book . } 

SPARQL results

但我无法使用几乎完全相同的查询来检索literaryGenre <http://dbpedia.org/ontology/literaryGenre>

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX ontology: <http://dbpedia.org/ontology/> 
select distinct ?genreUri  
where { ?genreUri  rdf:type ontology:literaryGenre . } 

SPARQL results

我完全糊涂了。这些查询可以在DBpedia SPARQL endpoint上运行。

1 个答案:

答案 0 :(得分:2)

问题是http://dbpedia.org/ontology/literaryGenre不是owl:Class,而是对象属性。实际上,在您链接到的页面http://dbpedia.org/ontology/literaryGenre上,我们读到了:

  

关于:文学体裁

     

Type的实体:ObjectProperty,来自Named   图表:http://dbpedia.org/resource/classes#,在数据空间中:   dbpedia.org

     

文学体裁是一种文学作品。   类型可以由文学技巧,语气,内容甚至决定   (如同小说一样)长度。

因此,您可以使用以下查询查看来自the public endpoint的图书的文学类型:

select distinct * where {
  ?book dbpedia-owl:literaryGenre ?genre .
}
limit 100

SPARQL Results

但有用的是,您可以检查作为文学类型属性对象的资源,例如http://dbpedia.org/resource/Adventure_Novel,并且在执行此操作时,您可以找到一些可能有助于您找到更多内容的属性。例如,Adventure_Novel具有属性:

rdf:type        yago:LiteraryGenres
dcterms:subject category:Literary_genres
dcterms:subject category:Adventure_fiction

在浏览该页面时您可能还会注意到,Advenure_Novel不仅是dbpedia-owl:literaryGenre语句的对象,还是dbpedia-owl:genredbpedia-owl:format的对象。 (我忽略了较旧的dbpprop属性。)所以你有两个选择:

  1. 您可以查询包含rdf:type yago:LiteraryGenresdcterms:subject category:Literary_genres的内容,并使用此类查询生成243个结果:

    select distinct ?genre where {
      { ?genre rdf:type yago:LiteraryGenres }
      UNION 
      { ?genre dcterms:subject category:Literary_genres }
    }
    

    SPARQL results

  2. 您可以询问dbpedia-owl:genredbpedia-owl:format(有8434)的对象:

    select distinct ?genre where {
      { [] dbpedia-owl:format ?genre } 
      UNION 
      { [] dbpedia-owl:genre ?genre }
      UNION
      { [] dbpedia-owl:literaryGenre ?genre }
    }
    

    SPARQL results

    但是,您会注意到,在该查询中,format的某些结果更像是发布媒介,例如DocudramaMusic_download。因此,坚持那些明确类型的结果可能更有意义(7940结果):

    select distinct ?genre where {
      { [] dbpedia-owl:genre ?genre }
      UNION 
      { [] dbpedia-owl:literaryGenre ?genre }
    }
    

    SPARQL results

    然而,看看这些结果,许多类型都不是文学类型,但是,例如,音乐类型,这意味着你可能更好看看literaryGenre属性(936结果):< / p>

    select distinct ?genre where {
      [] dbpedia-owl:literaryGenre ?genre
    }
    

    SPARQL results

  3. 根据这些结果, best 选项看起来就是选择dbpedia-owl:literaryGenre语句对象的内容。