我在graphDB中有一个艺术风格列表,我试图使用SERVICE函数从维基数据中获取他们的标签:
PREFIX gp: <http://www.semanticweb.org/kandd/group76/final_project#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?movement ?label
WHERE{
?artist gp:hasArtStyle ?movement.
SERVICE <https://query.wikidata.org/sparql>{
?movement rdfs:label ?label .
FILTER (langMatches( lang(?label), "EN" ) )
}
}
注意,gp
是一个命名空间,只存在于我的图中,而不是在互联网上的任何地方,还注意?movement包含一个有效的维基数据uri列表例如http://www.wikidata.org/entity/Q186030
但我得到的响应仍然是:
Error 500: error
Query evaluation error: org.eclipse.rdf4j.query.QueryEvaluationException: org.eclipse.rdf4j.query.QueryEvaluationException: java.io.IOException: Unkown record type: 83 (HTTP status 500)
我做错了什么?
请记住,您的查询是从内部到外部处理的,这意味着首先处理服务部分,然后处理使用您自己的特定属性的部分。
目前,您对WikiData的查询非常笼统。您要求所有具有rdfs:label
的内容,然后对返回的所有英文标签进行过滤。
鉴于此,我猜测您的查询只是超时。相反,我会尝试这样做:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wd: <http://www.wikidata.org/entity/>
SELECT *
WHERE{
SERVICE <https://query.wikidata.org/sparql>{
?artist wdt:P101 wd:Q186030 ; #Field of Work is contemporary art
wdt:P31 wd:Q5 ; #instance of Human
rdfs:label ?name . #get the label
FILTER (langmatches(lang(?name), "en"))
}
}
如果我在GraphDB中尝试这个,它返回156个结果。