【发布时间】:2018-07-05 12:46:01
【问题描述】:
我正在努力创建一些 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.
}
此查询将为我提供所有书籍的列表。我真正需要的是能够向此代码添加一些过滤器。我想过滤 3 件事:
- 特定的标题名称(例如,使用“harry potter”搜索标题)
- 具体的作者姓名(例如,使用“J. K. Rowling”搜索作者)
- 特定类型(例如,使用“冒险”搜索类型)
我已经为此苦苦挣扎了太久,我根本无法定义这 3 个查询。我正在尝试实现一个函数,该函数将使用用户表单传递的参数执行 SPARQL 语句。我在这里和网络上找到了一些示例,但我无法构建这 3 个特定的查询。
【问题讨论】:
-
您想通过给定的字符串查找书籍吗?在代表过滤条件的资源标签上使用正则表达式。更好的是,使用
bif:contains。例如,获取作者的英文标签,然后对其进行过滤。 -
您还需要查看您要查找的内容示例的描述,例如 dbpedia.org/resource/Harry_Potter_and_the_Goblet_of_Fire>。 (“太长”是多长时间?这感觉很像最后一刻的功课……)
-
你讽刺的这个“太长”就像一个月。我必须为使用系统推荐、用户界面等的新网站系统创建很多东西,但我根本无法理解 RDF/SPARQL。这是我项目中唯一缺少的部分。目前,我可以执行上面列出的 SPARQL 并使用从此查询中检索到的信息填充网页,但我需要一些返回相同列的特定查询,以便我可以使用特定结果填充搜索页面。我希望能够指定来自网站输入的作者类型或名称
-
@AKSW 我从您那里看到了一个允许搜索特定书名的示例,但即使使用该示例,我也无法看到如何为这 3 个目的构建查询。不仅如此,我不知道如何只接收那些字段(而不是 SELECT *)。我不擅长 RDF/SPARQL,但无论如何感谢您的建议。
-
最小化的例子:
select * where { ?s rdf:type dbo:Book; dbo:author ?author . ?author rdfs:label ?authorLabel . FILTER(LANGMATCHES(LANG(?authorLabel), 'en')) ?authorLabel bif:contains "Rowling" }