首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPARQL联邦查询未返回所有解决方案

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

Stack Overflow用户
提问于 2017-10-21 11:03:37
回答 1查看 348关注 0票数 1

这是这个问题的一种进化。

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

我的想法是,我想根据本地RDF图中的信息过滤来自DBPedia的结果。查询如下:

代码语言:javascript
复制
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 (for ?s)。我认为这是因为John McCain是第一个'x‘结果中唯一的匹配项,但我不知道如何获得返回所有匹配的查询。例如,如果我添加了如下过滤器:

代码语言:javascript
复制
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。还有很多像杰米·奥利弗这样的比赛,除非我特别把它添加到这样的过滤器中,否则它们是不会通过的。

有人能解释一下提取其余火柴的方法吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-22 12:39:37

造成此问题的原因似乎是服务块试图从DBPedia中提取所有foaf: pull,然后根据本地Stardog筛选它们。因为在查询DBPedia时有10,000个结果限制,所以只会找到10,000个任意人员集合中出现的匹配。为了解决这个问题,我编写了一个脚本,将包含Stardog中每个字符串名称的过滤器块放在一起,并将其附加到服务块上,以便远程过滤,从而避免达到10,000个结果限制。看起来是这样的:

代码语言:javascript
复制
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, ...)
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46862589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档