我对使用FILTER
的方式有疑问
当我在DBPedia SPARQL端点中使用如下查询时,检索到1个结果。
但是,如果我从查询中取消FILTER ( langMatches(lang(?sl),'en') && langMatches(lang(?ol),'en') )
,那么就没有检索到任何内容。
我认为应该有更多的结果,因为没有使用FILTER
。
这怎么可能?
SPARQL端点:dbpedia.org/sparql
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?s ?sl (<http://xmlns.com/foaf/0.1/depiction> as ?p) ?o ?ol
WHERE {
?s rdfs:label ?sl .
?s <http://xmlns.com/foaf/0.1/depiction> ?o .
?o rdfs:label ?ol .
FILTER ( langMatches(lang(?sl),'en') && langMatches(lang(?ol),'en') ) <------- this part
}
LIMIT 100
答案 0 :(得分:2)
这很奇怪,我确实看到了你所说的结果。您有一个可以运行查询的Web服务,并且可以轻松地修改查询以获取有关正在发生的事情的更多信息。首先,让我们看看总共有多少结果(没有过滤器):
select (count(*) as ?nResults) where {
?s rdfs:label ?sl .
?s <http://xmlns.com/foaf/0.1/depiction> ?o .
?o rdfs:label ?ol .
}
24
现在,如果我们只选择带有英文标签的那对,会剩下多少?
select (count(*) as ?nResults) where {
?s rdfs:label ?sl .
?s <http://xmlns.com/foaf/0.1/depiction> ?o .
?o rdfs:label ?ol .
filter ( langMatches(lang(?sl),'en') && langMatches(lang(?ol),'en') )
}
1
这很有希望,因为当我们添加其他约束时,我们希望数字减少。这些数字也足够小,我们不需要担心限制,我们可以直接查看结果。首先,对于未经过滤的结果:
select * where {
?s rdfs:label ?sl .
?s <http://xmlns.com/foaf/0.1/depiction> ?o .
?o rdfs:label ?ol .
}
当我运行此查询时,我期望返回24个结果行,如第一个查询建议的那样。但是,当我运行它时,我实际上并没有得到任何结果。这个查询似乎需要一段时间,而且可能是我们遇到了一些超时。在任何情况下,都会发生一些奇怪的事情。在过滤的查询上:
select * where {
?s rdfs:label ?sl .
?s <http://xmlns.com/foaf/0.1/depiction> ?o .
?o rdfs:label ?ol .
filter ( langMatches(lang(?sl),'en') && langMatches(lang(?ol),'en') )
}
只有一个结果,它有这些值:
s <http://dbpedia.org/resource/Franz_Kruckenberg>
sl "Franz Kruckenberg"@en
o <http://dbpedia.org/resource/Schienenzeppelin>
ol "Schienenzeppelin"@en
由于未经过滤的案例中的count(*)
查询给出了24,我认为这里发生的事情并不完全正确。这可能是一个时间限制,在这种情况下,您可能需要在本地下载数据并在本地运行查询。但是,如果它是其他类型的错误,您可能想要访问DBpedia邮件列表并询问它们。
运行一些相关的查询并没有太多帮助。例如,如果你只是要求有标签描述的东西,你只会得到一些结果,而且它们都是关于相同的资源(Frank Kruckenberg):
select * where {
?s <http://xmlns.com/foaf/0.1/depiction> [ rdfs:label ?dl ]
}
dl s
---------------------------------------------------------------------
"Schienenzeppelin"@de http://dbpedia.org/resource/Franz_Kruckenberg
"Schienenzeppelin"@en http://dbpedia.org/resource/Franz_Kruckenberg
"Schienenzeppelin"@fr http://dbpedia.org/resource/Franz_Kruckenberg
"Schienenzeppelin"@it http://dbpedia.org/resource/Franz_Kruckenberg
"シーネンツェッペリン"@ja http://dbpedia.org/resource/Franz_Kruckenberg
"Schienenzeppelin"@pl http://dbpedia.org/resource/Franz_Kruckenberg
"Рельсовый Цеппелин"@ru http://dbpedia.org/resource/Franz_Kruckenberg
"Schienenzeppelin"@sv http://dbpedia.org/resource/Franz_Kruckenberg