Sparql 如何从DBPedia获取所有公司?

Sparql 如何从DBPedia获取所有公司?,sparql,dbpedia,Sparql,Dbpedia,我对查询DBPedia还不熟悉。我如何才能从所有公司获得 此查询仅返回50000个组织: SELECT DISTINCT * WHERE {?company a dbpedia-owl:Company} 你的查询没有返回所有的公司,这是对的。不过,这种模式是正确的。请注意,此查询仅统计公司,返回88054: prefix dbpedia-owl: <http://dbpedia.org/ontology/> select (count(distinct ?company) as

我对查询DBPedia还不熟悉。我如何才能从所有公司获得

此查询仅返回50000个组织:

SELECT DISTINCT * WHERE {?company a dbpedia-owl:Company}

你的查询没有返回所有的公司,这是对的。不过,这种模式是正确的。请注意,此查询仅统计公司,返回88054:

prefix dbpedia-owl: <http://dbpedia.org/ontology/>

select (count(distinct ?company) as ?count)
where {
  ?company a dbpedia-owl:Company
}

上面的设置为已排序行设置阈值

该文章提出的解决方案是使用子查询:

要防止上述问题,您可以利用 更好地利用与关联的临时存储的子查询 这种追求。例如:

SELECT ?p ?s 
WHERE 
  {
    {
      SELECT DISTINCT ?p ?s 
      FROM <http://dbpedia.org> 
      WHERE   
        { 
          ?s ?p <http://dbpedia.org/resource/Germany> 
        } ORDER BY ASC(?p) 
    }
  } 
OFFSET 50000 
LIMIT 1000
SELECT?p?s
哪里
{
{
选择不同的p?s
从…起
哪里
{ 
标准普尔
}ASC订购(?p)
}
} 
抵销50000
限制1000
我不完全确定这为什么能解决问题,可能是端点可以对40000多行进行排序,只要它不必返回所有行。无论如何,它确实起作用。您的查询将变成:

prefix dbpedia-owl: <http://dbpedia.org/ontology/>

select ?company {{
  select ?company { 
    ?company a dbpedia-owl:Company
  }
  order by ?company
}} 
offset 88000
LIMIT 1000
前缀dbpedia owl: 选择?公司{{ 选择?公司{ ?a公司dbpedia猫头鹰:公司 } 公司订购 }} 偏移量88000 限制1000
从DBpedia获取所有公司的另一种方法是使用以下查询运行:

SELECT * 
WHERE {
{?s a <http://dbpedia.org/ontology/Person>.?s ?p ?o.} 
UNION
{?s1 a <http://dbpedia.org/ontology/Person>.?o1 ?p1 ?s1.}
}
选择*
在哪里{
{s a.?s p?o.}
联合
{?s1a.?o1?p1?s1.}
}

这还有一个额外的优点,就是为您提供所有的三元组。它需要几分钟到几个小时的时间,具体取决于您的RAM和CPU能力。

但是,对超过40000个记录集进行排序时出现问题:
select?company where{company a dbpedia owl:company}order by?company limit 10 offset 40000
Getting
Virtuoso 22023错误SR353:Sorted TOP子句指定要排序的行数超过40010行。只允许4万人。要么减少偏移量和/或行数,要么使用可滚动的光标
@Anton-Hmm…这确实会让事情变得更复杂。我想在这一点上,你会想阅读,它解决了这个特殊的问题。谢谢!我只是想发布这个链接:)去试试看。我想知道这样的查询是否返回非相交集。@安东,我刚刚更新了我的答案,以说明如何使用这种技术实现查询。看起来你可以得到所有的公司。:)
SELECT ?p ?s 
WHERE 
  {
    {
      SELECT DISTINCT ?p ?s 
      FROM <http://dbpedia.org> 
      WHERE   
        { 
          ?s ?p <http://dbpedia.org/resource/Germany> 
        } ORDER BY ASC(?p) 
    }
  } 
OFFSET 50000 
LIMIT 1000
prefix dbpedia-owl: <http://dbpedia.org/ontology/>

select ?company {{
  select ?company { 
    ?company a dbpedia-owl:Company
  }
  order by ?company
}} 
offset 88000
LIMIT 1000
SELECT * 
WHERE {
{?s a <http://dbpedia.org/ontology/Person>.?s ?p ?o.} 
UNION
{?s1 a <http://dbpedia.org/ontology/Person>.?o1 ?p1 ?s1.}
}