SPARQL查询优化

时间:2018-07-13 20:52:36

标签: sparql rdf dbpedia

我正在研究针对公共DBPedia端点http://dbpedia.org/sparql运行的SPARQL查询,尽管返回了结果,但是查询要花很长时间才能执行。我不是SPARQL的专家,并希望有人能在可能的情况下帮助我优化查询。

查询检索以下内容:

  • 属性URI
  • 对象URI
  • 属性标签
  • 对象标签
  • 对象数据类型

...如果对象标签(或对象本身,如果它是字符串数据类型)包含关键字。

例如,在下面的查询中,我正在寻找对象标签(如果存在标签)或对象本身(如果是字符串数据类型)包含关键字“伦敦”的结果。

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

0 个答案:

没有答案