此查询的正确SPARQL版本是什么?

时间:2012-06-20 13:10:46

标签: sparql dbpedia

我试图通过SPARQL在DBPedia.org上运行查询。基本上,这就是我想要做的事情:

  • 获取DBPedia资源链接列表

WHERE

  • foaf:name(http://xmlns.com/foaf/0.1/name)等于PARAMETER1
  • 或者dbpprop:companyName(http://dbpedia.org/property/companyName)等于PARAMETER1
  • 或者dbpprop:name(http://dbpedia.org/property/name)等于PARAMETER1

  • rdf:type(http://www.w3.org/1999/02/22-rdf-syntax-ns#type)等于PARAMETER2
  • 或者dbpedia-owl:type(http://dbpedia.org/ontology/type)等于PARAMETER2

我自己尝试过这样做,但完全没有取得任何成功的结果。

任何帮助将不胜感激 - 谢谢!

编辑: 以下是我一直在处理的查询:

SELECT ?s
WHERE {
    {
      ?s <http://xmlns.com/foaf/0.1/name> "Google Inc." .
    } UNION {
      ?s <http://dbpedia.org/property/companyName> "Google Inc." .
    } UNION {
      ?s <http://dbpedia.org/property/name> "Google Inc." .
    }

    {
      ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://dbpedia.org/ontology/Company> .
    } UNION {
      ?s <http://dbpedia.org/ontology/type> <http://dbpedia.org/resource/Public_company> .
    }
}

2 个答案:

答案 0 :(得分:3)

您几乎拥有它,唯一的问题是DBPedia中的属性值使用语言标记,并且您的查询查找具有普通文字值的名称。此查询适用于我:

SELECT DISTINCT ?s
WHERE {
    {
      ?s <http://xmlns.com/foaf/0.1/name> "Google Inc."@en .
    } UNION {
      ?s <http://dbpedia.org/property/companyName> "Google Inc."@en .
    } UNION {
      ?s <http://dbpedia.org/property/name> "Google Inc."@en .
    }

    {
      ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://dbpedia.org/ontology/Company> .
    } UNION {
      ?s <http://dbpedia.org/ontology/type> <http://dbpedia.org/resource/Public_company> .
    }
}

请注意,我添加了DISTINCT以消除资源具有多个值时出现的重复答案,例如foaf:namedbpprop:companyName

答案 1 :(得分:1)

使用可以更清晰地编写。您可以使用指定可能标识名称的属性。此外,Google没有 dbpprop:type 的资源值(至少不再存在);最好坚持使用 rdf:type dbpedia-owl:Company 。这意味着您的查询可以变为:

select distinct ?s where {
  values ?name { foaf:name dbpprop:companyName dbpprop:name }
  ?s a dbpedia-owl:Company ;
     ?name "Google Inc."@en .
}

SPARQL results