我正在尝试使用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
我遇到了上述查询,该查询找到了超过50,000个emplayoees的公司,但我不明白rdf类型为“http://dbpedia.org/class/yago/Company108058098”
我想知道的是公司名称,我该如何返回唯一的ID,徽标和描述?我只想要3个数据,然后我可以存储在我的数据库中。
答案 0 :(得分:2)
{i}之类的查询中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资源是
对于您正在寻找的各种信息,重要的属性似乎是:
您可以简单地使用资源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(秒)的限制。
我不确定它是如何估算时间的,但您可以使用一些optionals
和一些values
来解决它(但请务必将distinct
放入{{} 1}}):
select
注意:在撰写本文时,DBpedia的端点非常缓慢并且处于维护状态,因此我不确定这最后的排列是否真的达到了估计的截止时间。不过,我认为它会经历。
答案 1 :(得分:0)
要让所有公司都必须使用LIMIT和OFFSET,因为通常公共端点会限制每个查询的结果数。 根据@Joshua的回答,我写了一个小脚本,可以运行从公共dbpedia端点获取所有公司。 这是要点: https://gist.github.com/szydan/e801fa687587d9eb0f6a
还可以修改查询并使用它来获取其他实体。