繁体   English   中英

SPARQL联合查询未返回所有解决方案

[英]SPARQL Federated Query Not Returning All Solutions

这是这个问题的演变。

基本上,我很难从远程端点获取SPARQL查询的所有解决方案。 我在这里阅读了第2.4节因为它似乎描述的情况几乎与我的情况相同。

我的想法是,我想根据本地RDF图中的信息从DBPedia过滤结果。 查询在这里:

PREFIX ns1:             
<http://www.semanticweb.org/caeleanb/ontologies/twittermap#>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT *
WHERE {
  ?p ns1:displayName ?name .
  SERVICE <http://dbpedia.org/sparql> {
    ?s rdfs:label ?name .
    ?s rdf:type foaf:Person .
  }
}

我得到的唯一结果是dbpedia:John_McCain(用于?s)。 我认为这是因为约翰·麦凯恩是第一个“ x”结果中的唯一匹配项,但我不知道如何获取查询以返回所有匹配项。 例如,如果我添加一个过滤器,例如:

SERVICE <http://dbpedia.org/sparql> {
  ?s rdfs:label ?name .
  ?s rdf:type foaf:Person .
  FILTER(?name = "John McCain"@en || ?name = "Jamie Oliver"@en)
}

然后,它会正确返回dbpedia:Jamie_Oliver和dbpedia:John_McCain。 除非我专门将其添加到这样的过滤器中,否则还有数十种其他比赛如Jamie Oliver都不会通过。

有人可以解释提取其余比赛的方式吗? 谢谢。

看起来此问题的原因是,SERVICE块正在尝试从DBPedia中提取所有foaf:Person,然后根据我的本地Stardog db对其进行过滤。 由于查询DBPedia时结果限制为10,000,因此仅会发现该10,000个人中的匹配项。 为了解决这个问题,我编写了一个脚本,将一个包含了Stardog db中每个字符串名称的FILTER块放在一起,并将其附加到SERVICE块以进行远程过滤,从而避免达到10,000个结果限制。 看起来像这样:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX ns1: <http://www.semanticweb.org/caeleanb/ontologies/twittermap#>

CONSTRUCT{
  ?s rdf:type ns1:Person ;
    ns1:Politician .
}
WHERE {
    ?s rdfs:label ?name .
    ?s rdf:type dbo:Politician .
    FILTER(?name IN ("John McCain"@en, ...)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM