rdf - 使用SPARQL查询DBPedia公司信息

标签 rdf sparql wikipedia dbpedia

我尝试使用 SPARQL 查询 DBPedia,只是为了查找公司信息,例如描述和 Logo 。

我对设计 SPARQL 查询来执行此操作感到相当困惑。

    SELECT DISTINCT ?subject 
                ?employees 
                ?homepage 
  WHERE 
    {
      ?subject  rdf:type               <http://dbpedia.org/class/yago/Company108058098>  .
      ?subject  dbpedia2:numEmployees  ?employees
        FILTER  ( xsd:integer(?employees) >= 50000 )                                     .
      ?subject  foaf:homepage          ?homepage                                         .
    } 
  ORDER BY  DESC(xsd:integer(?employees))
  LIMIT  20

我遇到过上面的查询,它找到了拥有超过 50,000 名员工的公司,但我不明白诸如 rdf 类型为“http://dbpedia.org/class/yago/Company108058098”之类的事情

好吧,我只想知道一个公司名称,我如何返回唯一的 ID、 Logo 和描述?我只想要 3 条数据,然后将其存储在数据库中。

最佳答案

rdf:type <http://dbpedia.org/class/yago/Company108058098>的原因在如下查询中是因为(大概)这是一个实例是公司的类。请求类的实例是请求公司的一种方式。

select * { ?s rdf:type <http://dbpedia.org/class/yago/Company108058098> }
limit 10

SPARQL results

同样的原则让我们可以选择具有以下特征的人员:

select * { ?s a dbpedia-owl:Person }
limit 10

SPARQL results

对于您的特定查询,查询 DBpedia 数据的一个典型好方法是首先手动查看数据并查找您感兴趣的值类型。例如,您可能会查看 Apple, Inc.,其 DBpedia 资源是

对于您正在寻找的信息类型,重要的属性似乎是:

您可以简单地使用资源 IRI 作为唯一标识符。鉴于这一切,您可以编写如下查询。不过,它有多种结果,因为有多种可能的 Logo ,但事实就是如此。

select ?iri ?logo ?description {
  ?iri a dbpedia-owl:Company ;
       dbpedia-owl:abstract ?description ;
       rdfs:label "Apple Inc."@en ;
       foaf:depiction|dbpedia-owl:thumbnail ?logo .
  filter( langMatches(lang(?description),"en") )
}

SPARQL results

如果能够使用就太好了

foaf:name|rdfs:label "Apple In."@en

也是如此,但端点在这种情况下表示估计时间太大:

Virtuoso 42000 Error The estimated execution time 9320 (sec) exceeds the limit of 3000 (sec).

我不确定它是如何估计时间的,但你可以使用一些 optionals和一些values解决这个问题(但请务必将 distinct 放入 select ):

select distinct ?iri ?logo ?description {
  values ?hasLogo { foaf:depiction dbpedia-owl:thumbnail }
  values ?hasName { foaf:name rdfs:label }
  ?iri a dbpedia-owl:Company ;
       dbpedia-owl:abstract ?description ;
       ?hasLName "Apple Inc."@en ;
       ?hasLogo ?logo .
  filter( langMatches(lang(?description),"en") )
}

注意:在撰写本文时,DBpedia 的端点非常缓慢并且正在维护中,因此我还不确定最后的排列是否确实达到了预计的时间截止时间。不过,我认为它会成功。

关于rdf - 使用SPARQL查询DBPedia公司信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19693995/

相关文章:

java - 需要一个应用程序来修复带有未转义字符的 XML

rdf - Sparql 查询超时并出现传递临时内存错误消息

sparql - 从 SPARQL 查询返回嵌套数据结构

python - 如何使用 python 从多个维基百科页面抓取数据?

java - 将 jena 模型转换为 jena tdb

SPARQL - 返回主题列表的相互对象

iphone - 手机上的语义东西(RDF、OWL)——这可能吗?

rdf - 无法得到结果

python - 尝试用漂亮的汤隔离 1 列

wikipedia - 如何获取维基百科页面的所有链接及其维基数据 ID?