【问题标题】:Filtering on optional data?过滤可选数据?
【发布时间】:2014-07-03 17:08:00
【问题描述】:

如何在 SPARQL 中过滤可选值,同时 保留 不存在可选值的结果?例如,在下面的数据中有三本书,第三本书没有价格:

:book1 a :Book ; :hasPrice 10.
:book2 a :Book ; :hasPrice 20.
:book3 a :Book.

如何选择价格低于 15 或根本没有价格的书籍?

【问题讨论】:

    标签: rdf sparql


    【解决方案1】:
    select ?book ?price where { 
      ?book a :Book .
      optional { ?book :hasPrice ?price }
      filter ( !bound(?price) || ?price < 15 )
    }
    
    ------------------
    | book   | price |
    ==================
    | :book3 |       |
    | :book1 | 10    |
    ------------------
    

    【讨论】:

    • 谢谢,与我想出的解决方案相同,但这些值作为字符串存储在我查询的三重存储中 - 实际上,这就是问题所在。
    • @TWdorado 然后将其转换为浮点数:filter( !bound(?price) || xsd:double(?price) &lt; 15 )。但是,您没有在数据中显示字符串;你展示了 xsd:integer 类型。请注意,"15"^^xsd:integer 不是字符串,而是整数(以防您在数据中看到的内容)。
    • 你是对的。我从另一个问题中分解了这个问题,所以我之前没有看到字符串的问题。感谢演员提示,还不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    相关资源
    最近更新 更多