如何在SPARQL中构建主题搜索

时间:2013-06-25 17:52:26

标签: sparql

我试图在gutemberg项目(http://www4.wiwiss.fu-berlin.de/gutendata/)中获得关于作者William Shakespeare的所有书籍。 我可以使用此查询来返回莎士比亚作为作者的所有项目:

PREFIX dc:<http://purl.org/dc/elements/1.1/>
PREFIX foaf:<http://xmlns.com/foaf/0.1/>

SELECT ?bookTitle
WHERE {
?author foaf:name "Shakespeare, William, 1564-1616".
?book dc:creator ?author;
      dc:title ?bookTitle
}

但我更愿意使用dcterms:subject获得关于莎士比亚的批评书的清单     http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/subject/Shakespeare_William_1564-1616

我真的很感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我同意RobV's comment令人惊讶的是,在编写第一个查询后,编写第二个查询会有很大困难。无论如何,这种变化相对微不足道。我使用dc:subjectdcterms:subject进行了检查,看来Gutenberg数据与dc:subject一起存储,因此我在此查询中使用了该数据,而不是dcterms:subject。这是查询;您只需要将dc:subject <.../Shakespeare...>添加到模式中,然后删除作者约束。一些前缀使查询更容易编写,结果也更容易阅读。

PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX gp: <http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/people/>
PREFIX gs: <http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/subject/>
PREFIX gr: <http://wifo5-04.informatik.uni-mannheim.de/gutendata/resource/>

SELECT ?book ?author ?bookTitle WHERE {
?book dc:creator ?author ;
      dc:title ?bookTitle ;
      dc:subject gs:Shakespeare_William_1564-1616 .
}

使用这样的查询,您应该得到如下结果:

--------------------------------------------------------------------------------------------
| book          | author                                        | bookTitle                |
============================================================================================
| gr:etext14827 | gp:Guizot_François_Pierre_Guillaume_1787-1874 | "Étude sur Shakspeare"   |
| gr:etext5429  | gp:Johnson_Samuel_1709-1784                   | "Preface to Shakespeare" |
--------------------------------------------------------------------------------------------