选择没有英文标签的资源

时间:2013-10-22 15:05:24

标签: sparql

我正在尝试选择所有没有英文标签的资源。问题是如果我用另一个标签选择器过滤,它不能保证英文标签不存在。 FILTER NOT EXISTS似乎仅适用于特定属性,但不能与语言选择器结合使用。如何选择没有英文标签的资源?

1 个答案:

答案 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 |
-----------------