Rdf 使用SPARQL查询DBPedia公司信息

Rdf 使用SPARQL查询DBPedia公司信息,rdf,sparql,wikipedia,dbpedia,Rdf,Sparql,Wikipedia,Dbpedia,我试图使用SPARQL查询DBPedia,只是为了查找公司信息,如描述和徽标 我对设计SPARQL查询来实现这一点相当迷茫 SELECT DISTINCT ?subject ?employees ?homepage WHERE { ?subject rdf:type <http://dbpedia.org/class/yago/Company10805809

我试图使用SPARQL查询DBPedia,只是为了查找公司信息,如描述和徽标

我对设计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
选择不同的主题
?员工
主页
哪里
{
?主题rdf:类型。
?主题2:新员工?员工
过滤器(xsd:integer(?employees)>=50000)。
?主题foaf:主页?主页。
} 
按描述排序(xsd:integer(?employees))
限制20
我遇到过上面的查询,它会查找拥有50000多名员工的公司,但我不理解rdf类型为“”


我只想知道一个公司的名字,我怎么能返回一个唯一的ID,标志和描述?我只想要3条数据,然后我可以将它们存储在我的数据库中

在下面这样的查询中使用
rdf:type
的原因是(大概)这是一个实例为公司的类。询问课程实例是询问公司的一种方式

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

对于您的特定查询,查询DBpedia数据的一个典型好方法是从手动查看数据并查找您感兴趣的值类型开始。例如,您可以看看Apple,Inc.,它的DBpedia资源是

  • ,它重定向到
  • 。您可以在浏览器中查看
对于您要查找的信息类型,重要属性似乎是:

  • rdfs:标签为“苹果”或“苹果公司”(您可以用它来查询),或
  • foaf:名称“苹果公司”
  • foaf:描述,或
  • dbpedia猫头鹰:缩略图
  • dbpediaowl:摘要“英文描述”@en
  • rdf:type dbpedia owl:Company(帮助缩小结果范围)
您可以简单地使用资源IRI作为唯一标识符。考虑到所有这些,您可以编写如下查询。它有多个结果,虽然,因为有多个可能的标志,但它去

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") )
}

如果能够使用

foaf:name|rdfs:label "Apple In."@en
同样,但端点表示,在这种情况下,估计的时间太长:

Virtuoso 42000错误估计执行时间9320(秒)超过3000(秒)的限制

我不确定它是如何估计时间的,但您可以使用一些
选项和一些
值来解决这个问题(但一定要将
不同的
放入
选择
):


注意:在撰写本文时,DBpedia的端点非常缓慢且处于维护状态,因此我还不确定最后一个排列是否实际达到了估计的时间截止点。不过,我认为它会通过。

要得到所有公司,必须使用LIMIT和OFFSET,因为公共端点通常限制每个查询的结果数。 基于@Joshua answer,我编写了一个小脚本,可以运行该脚本从公共dbpedia端点获取所有公司。 要点如下:


还可以修改查询并使用它获取其他实体

我知道@gray看到了它(并对它进行了评论),但为了其他人的缘故,还有一个相关的问题,.DBPedia昨天对我来说也进展得很慢,它让我觉得SPARQL对于我的任务来说是一个糟糕的解决方案。但它现在起作用了,而且速度也很快!谢谢你出色的回答。最后一个SPARQL工作得很好。嘿@szydan在本文中,您将如何在SPARQL查询中过滤特定行业?我尝试了:
}其中{iri a dbpedia owl:Company.OPTIONAL{iri dbpedia owl:abstract?description.FILTER(lang(?description)=“en”)FILTER(regex(?description,^platform$)。}
看看我是否能找到平台即服务公司……但我得到的各种结果在描述中都没有这个词。也许正则表达式是错误的?有没有办法过滤
?industrySector dbpedia owl:industry
?嗨,所以我修改了查询的部分,以得到描述中有单词“platform”。请注意,我已经删除了可选的
?iri a dbpedia owl:Company。?iri dbpedia owl:abstract?description.FILTER(lang(?description)=“en”&®ex(?description,***platform.*,“I”)。
对于第二部分,我要求对您提到的模式进行简单的查询
选择*where{?industrySector dbpedia owl:industry}LIMIT 100
但在这个公共端点上,我只有3个三元组:-(
foaf:name|rdfs:label "Apple In."@en
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") )
}