3

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

  • 获取 DBPedia 资源链接列表

在哪里

  • 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> .
    }
}
4

2 回答 2

4

您几乎拥有它,唯一的问题是 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> .
    }
}

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

于 2012-06-20T17:32:18.987 回答
3

这可以用values写得更清楚。您可以使用来指定可能标识名称的属性。此外,Google没有dbpprop:type的资源值(至少现在没有了);最好坚持使用rdf:typedbpedia-owl:Company。这意味着您的查询可以变成:

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

SPARQL 结果

于 2015-05-16T15:16:34.970 回答