【发布时间】:2014-07-03 17:08:00
【问题描述】:
如何在 SPARQL 中过滤可选值,同时 保留 不存在可选值的结果?例如,在下面的数据中有三本书,第三本书没有价格:
:book1 a :Book ; :hasPrice 10.
:book2 a :Book ; :hasPrice 20.
:book3 a :Book.
如何选择价格低于 15 或根本没有价格的书籍?
【问题讨论】:
如何在 SPARQL 中过滤可选值,同时 保留 不存在可选值的结果?例如,在下面的数据中有三本书,第三本书没有价格:
:book1 a :Book ; :hasPrice 10.
:book2 a :Book ; :hasPrice 20.
:book3 a :Book.
如何选择价格低于 15 或根本没有价格的书籍?
【问题讨论】:
select ?book ?price where {
?book a :Book .
optional { ?book :hasPrice ?price }
filter ( !bound(?price) || ?price < 15 )
}
------------------
| book | price |
==================
| :book3 | |
| :book1 | 10 |
------------------
【讨论】:
filter( !bound(?price) || xsd:double(?price) < 15 )。但是,您没有在数据中显示字符串;你展示了 xsd:integer 类型。请注意,"15"^^xsd:integer 不是字符串,而是整数(以防您在数据中看到的内容)。