我尝试使用 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
同样的原则让我们可以选择具有以下特征的人员:
select * { ?s a dbpedia-owl:Person }
limit 10
对于您的特定查询,查询 DBpedia 数据的一个典型好方法是首先手动查看数据并查找您感兴趣的值类型。例如,您可能会查看 Apple, Inc.,其 DBpedia 资源是
- http://dbpedia.org/resource/Apple_Inc .,重定向到
- http://dbpedia.org/page/Apple_Inc 。您可以在浏览器中查看。
对于您正在寻找的信息类型,重要的属性似乎是:
- rdfs:标签“Apple”或“Apple Inc.” (您将用来查询),或
- foaf:名称“Apple Inc.”
- foaf:描述 http://upload.wikimedia.org/wikipedia/commons/f/fa/Apple_logo_black.svg ,或
- dbpedia-owl:缩略图http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Apple_logo_black.svg/200px-Apple_logo_black.svg.png
- dbpedia-owl:abstract "英文描述"@en
- rdf:type dbpedia-owl:Company(帮助缩小结果范围)
您可以简单地使用资源 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") )
}
如果能够使用就太好了
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/