我已经为现场音乐会建立了本体论,Concert_Ontology.ttl。这包含音乐会,艺术家,曲目和歌曲的定义。我想根据属性c:artistName和dbp:name匹配我的本体中的艺术家和dbpedia Person本体中的艺术家。我已经编写了以下查询来访问dbpedia端点并检索有关艺术家的其他信息。如何将变量传递给SPARQL中的SERVICE表达式?
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来运行联合查询? – AKSW
我正在使用Apache Jena Fuseki –