【发布时间】:2016-11-12 17:24:25
【问题描述】:
我已经为现场音乐会构建了一个本体,Concert_Ontology.ttl。这包含音乐会、艺术家、曲目和歌曲的定义。我想根据属性 c:artistName 和 dbp:name 匹配我的本体中的艺术家和 dbpedia Person 本体中的艺术家。我编写了以下查询来访问 dbpedia 端点并检索有关艺术家的其他信息。
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX c: <http://localhost:8080/Concert_Ontology.ttl#>
SELECT ?performer ?artistname ?dob
WHERE {
?performer a c:Artist ;
c:artistName ?artistname .
SERVICE <http://dbpedia.org/sparql> {
?person a dbo:Person ;
dbo:birthDate ?dob ;
dbp:name ?n .
FILTER (str(?n) = ?artistname)
}
}
但是,我似乎无法从 SERVICE 表达式中访问 ?artistname 变量。如果我将 FILTER 方法放在 SERVICE 表达式之外,则查询有效,但由于 dbpedia 的返回上限为 10000 个结果,我无法检索和匹配所有艺术家。
有人可以指导我找到解决此问题的方法吗?
【问题讨论】:
-
您使用哪个 API 来运行联合查询?
-
我正在使用 Apache Jena Fuseki
标签: sparql rdf fuseki apache-jena