0

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

4

1 回答 1

2

对于这样的数据,其中:b没有英文标签,

@prefix : <http://example.org/> .
:a :label "foo"@en .
:b :label "bar"@fr .
:c :label "baz"@en, "baz"@fr .

像这样的查询将返回 only :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 |
-----------------
于 2013-10-22T17:12:55.307 回答