首页 > 解决方案 > SPARQL BIND IF bound 未按预期工作

问题描述

给定以下 SPARQL 查询:

SELECT DISTINCT ?mainRestaurant ?p ?o WHERE {
  ?registeredRestaurant <http://testData.com/terms#RestaurantType> "Registered Restaurant" ;
     <http://testData.com/terms#city> <http://testData.com/city/london> .

  ?normalRestaurant <http://testData.com/terms#RestaurantType> "Restaurant" ;
     <http://testData.com/terms#city> <http://testData.com/city/london> .

  BIND(IF(bound(?registeredRestaurant), ?registeredRestaurant, ?normalRestaurant) as ?mainRestaurant )

  ?mainRestaurant ?p ?o. 
}

我希望如果:

 ?registeredRestaurant <http://testData.com/terms#RestaurantType> "Registered Restaurant" ;
     <http://testData.com/terms#city> <http://testData.com/city/london>

没有返回任何东西,那么?registeredRestaurant就不会绑定到任何东西,因此在我的 SPARQL 查询的以下部分:

BIND(IF(bound(?registeredRestaurant), ?registeredRestaurant, ?normalRestaurant) as ?mainRestaurant )

?mainRestaurant将绑定到?normalRestaurant但整个 SPARQL 查询不返回任何内容。但是,当?registeredRestaurant确实有与之关联的三元组时,SPARQL 查询会按预期返回。

我已经设法确定这是bound(?registeredRestaurant)问题所在,方法是用trueand替换它,false然后分别?mainRestaurant?registeredRestaurantor填充?normalRestaurant

我误解了 的用途bound()吗?如果是这样,是否有一个功能可以满足我想要做的事情?

标签: sparql

解决方案


推荐阅读