我正在尝试选择所有没有英文标签的资源。问题是如果我用另一个标签选择器过滤,它不能保证英文标签不存在。 FILTER NOT EXISTS
似乎仅适用于特定属性,但不能与语言选择器结合使用。如何选择没有英文标签的资源?
答案 0 :(得分:1)
对于这样的数据,其中:b
没有英文标签,
@prefix : <http://example.org/> .
:a :label "foo"@en .
:b :label "bar"@fr .
:c :label "baz"@en, "baz"@fr .
这样的查询只返回:b
,因为它是唯一没有英文标签的资源:
prefix : <http://example.org/>
select * where {
?x :label ?label . # find xs that do have a label
filter not exists { # but for which no label in
?x :label ?enLabel . # English exists
filter(langMatches(lang(?enLabel),"en"))
}
}
使用Jena的sparql
命令行工具的结果是:
$ sparql --data data.n3 --query query.rq
-----------------
| x | label |
=================
| :b | "bar"@fr |
-----------------