SPARQL查询特定信息

SPARQL查询特定信息,sparql,virtuoso,Sparql,Virtuoso,我正在努力创建一些SPARQL查询。我需要3件具体的东西,这就是我目前所拥有的: PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dbpedia: <http://dbpedia.org/resource/> PREFIX dbo: <http://dbpedia.or

我正在努力创建一些SPARQL查询。我需要3件具体的东西,这就是我目前所拥有的:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>

select distinct ?title ?author ?country ?genre ?language
where {
  ?s rdf:type dbo:Book;
  dbp:title ?title;
  dbp:author ?author;
  dbp:country ?country;
  dbp:genre ?genre;
  dbp:language ?language.

}
前缀rdf:
前缀rdfs:
前缀dbpedia:
前缀dbo:
前缀dbp:
选择不同的?标题?作者?国家?流派?语言
在哪里{
?s rdf:类型dbo:书本;
dbp:标题?标题;
dbp:作者?作者;
dbp:国家?国家;
dbp:体裁?体裁;
语言?语言。
}
此查询将为我提供所有书籍的列表。我真正需要的是向代码中添加一些过滤器的能力。我想通过以下三种方式进行筛选:

  • 特定标题名称(例如,用“哈利波特”搜索标题)
  • 特定作者姓名(例如,用“J.K.罗琳”搜索作者)
  • 特定类型(例如,搜索带有“冒险”的类型)

我已经为此挣扎了太久,我无法定义这3个查询。我试图实现一个函数,该函数将使用用户表单传递的参数执行SPARQL语句。我在这里和网上找到了一些例子,但我无法构建这3个特定的查询。

如前所述,并非每本书都有每一个属性,您的某些属性可能根本不存在。例如,根据对的描述,我将
dbp:genre
更改为
dbo:literaryGenre
。看,还有


你想按给定的字符串查找书籍吗?在表示筛选条件的资源标签上使用正则表达式。更好的方法是使用
bif:contains
。例如,获取作者的英文标签,然后对其进行筛选。您还需要查看您想要查找的内容的示例描述,例如。(多长时间是“太长”?这感觉很像最后一分钟的作业……)你讽刺地提到的“太长”就像一个月。我不得不为一个使用系统推荐、用户界面等的新网站系统创建很多东西,但我根本无法理解RDF/SPARQL。这是我项目中唯一缺失的部分。目前,我可以执行上面列出的SPARQL,并使用从此查询中检索到的信息填充网页,但我需要一些特定的查询,这些查询将返回相同的列,以便使用特定的结果填充搜索页面。我想能够指定作者流派或名称,将来自该网站input@AKSW我从您那里看到了一个允许搜索特定书名的示例,但即使有了这个示例,我也无法看到如何为这三个目的构建查询。除此之外,我不知道如何只接收那些字段(而不是SELECT*)。我对RDF/SPARQL不太在行,但无论如何还是要感谢你的建议。最小化示例:
select*where{s RDF:type dbo:Book;dbo:author?author。?author rdfs:label?authorLabel.FILTER(LANGMATCHES(LANG(?authorLabel),'en')?authorLabel bif:包含“Rowling”
SELECT *
WHERE
 { ?s rdf:type dbo:Book .
   ?s rdfs:label ?bookLabel . 
      FILTER(LANGMATCHES(LANG(?bookLabel), 'en')) 
   ?s dbo:author ?author . 
   ?author rdfs:label ?authorLabel . 
      FILTER(LANGMATCHES(LANG(?authorLabel), 'en')) 
   ?authorLabel bif:contains "Rowling" 
   OPTIONAL { ?s dbp:country ?country .
              ?country rdfs:label ?countryLabel .
                 FILTER(LANGMATCHES(LANG(?countryLabel), 'en')) }
   OPTIONAL { ?s dbo:literaryGenre ?genre .
              ?genre rdfs:label ?genreLabel .
                 FILTER(LANGMATCHES(LANG(?genreLabel), 'en')) }
   OPTIONAL { ?s dbp:language ?language .
              ?language rdfs:label ?languageLabel .
                 FILTER(LANGMATCHES(LANG(?languageLabel), 'en')) }
}