【发布时间】:2017-10-21 11:03:37
【问题描述】:
这是this question的演变。
基本上,我无法从远程端点获取 SPARQL 查询的所有解决方案。我已经阅读了第 2.4 节here,因为它似乎描述了与我的情况几乎相同的情况。
我的想法是我想根据我本地 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 (for ?s)。我认为这是因为 John McCain 是第一个“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 端点的默认限制是单个查询将返回 10000 个结果。而且我很确定,您的三重商店的联合查询引擎不会考虑这一点。顺便说一句,知道使用哪个三联商店总是很有趣。 -
我正在使用 Stardog。但是该死的:/所以基本上我从 DBPedia 收到了 10,000 个结果,而这仅足以匹配 John McCain?当我使用 FILTER 时,我会将大小减小到 10,000 以下,这样我可以看到更多匹配项?
-
我猜联合查询的 SPARQL 标准假定在指定语义时返回的结果集没有技术限制——这确实是有道理的。是的,我想 John McCain 在前 10,000 个匹配结果中是偶然的。
-
@AKSW 好吧,我刚刚编写了一个脚本来创建一个 FILTER,其中包含我想要匹配的所有字符串(例如 FILTER(?name="name1" || ?name="name2"... )) 但是当我尝试执行查询时收到 HTTP 500(内部服务器错误)。我的 FILTER 可以使用多长时间有限制吗?
-
哦,是的,Virtuoso 的 HTTP GET 请求的长度是有限制的。据我记得它是
10000 byte查询字符串的长度。对于更长的查询,您必须使用 POST 请求
标签: sparql dbpedia federated-queries