我正在处理针对公共DBPedia endpoints http://dbpedia.org/sparql运行的SPARQL查询,虽然返回了结果,但查询需要很长时间才能执行 . 我不是SPARQL的专家,并希望有人可以帮助我优化查询 .
该查询检索以下内容:
属性URI
对象URI
属性标签
对象标签
object数据类型
...如果对象标签(或对象本身,如果它是字符串数据类型)包含关键字 .
例如,在下面的查询中,我正在查找对象标签(如果存在标签)或对象本身(如果字符串数据类型)包含关键字“伦敦”的结果 .
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