SPARQL查询特定信息
我正在努力创建一些SPARQL查询。我需要3件具体的东西,这就是我目前所拥有的: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
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')) }
}