我正在研究针对公共DBPedia端点http://dbpedia.org/sparql运行的SPARQL查询,尽管返回了结果,但是查询要花很长时间才能执行。我不是SPARQL的专家,并希望有人能在可能的情况下帮助我优化查询。
查询检索以下内容:
...如果对象标签(或对象本身,如果它是字符串数据类型)包含关键字。
例如,在下面的查询中,我正在寻找对象标签(如果存在标签)或对象本身(如果是字符串数据类型)包含关键字“伦敦”的结果。
running the query against the endpoint时需要一些时间才能完成。我知道使用较少的通用关键字可以更快地完成查询,但是将关键字发送给查询的应用程序通常会发送相对通用的关键字,因此我希望可以以某种方式对查询进行优化。
请注意,我必须使用BIND操作将对象URI与对象标签绑定在一起,因为使用此结果数据的应用程序不能在该字段中接受空白值,当对象是字符串数据类型时会出现空白值。
SELECT ?propertyLabel ?property ?objectLabel ?object datatype(?object) AS ?objectDataType
WHERE
{
?URI ?property ?object .
{
?object rdfs:label ?objectLabel .
?objectLabel bif:contains '"London"' .
FILTER langMatches(lang(?objectLabel), 'en')
}
UNION
{
?URI ?property ?object .
?object bif:contains '"London"' .
FILTER ( lang(?object) = ''
|| langMatches(lang(?object), 'en')
) .
BIND(?object AS ?objectLabel)
}
?property rdfs:label ?propertyLabel .
FILTER langMatches(lang(?propertyLabel), 'en') .
}
ORDER BY DESC(count(?property))
LIMIT 500