我目前正在尝试按优先级对一些客户进行排序(那些首先拥有正在运行的订阅的客户,然后是其他客户。
为此,我在此查询中使用了 BIND 子句:
SELECT DISTINCT ?context ?priority ?label {
?s a my:Client .
?s rdfs:label ?label .
BIND ( IF(EXISTS {?s rdf:type my:Subscriber}, 1, 0) AS ?priority )
} ORDER BY DESC(?priority) ASC(?label)
在我看来, ?priority var 应该始终绑定到 0 或 1,但是每当我执行查询时,我得到(连同预期的输出结果)未绑定的 ?priority “行”,用于那些应该获得 1 优先级的项目,所以我需要在我的查询中添加 FILTER (bound(?priority)) 以获得我所期望的。
这是正常的还是我错过了什么?
在此先感谢,马克斯。
编辑 :
=> 在跟踪器中提交排序问题
我编辑了查询以检查优先权在同一个节点上是否绑定和未绑定。
这是我返回的结果集的示例输出
?context = urn:graph:1772#844 , ?priority = 1^^http://www.w3.org/2001/XMLSchema#integer , ?sort1 = client 2@fr
?context = urn:graph:1772#1690 , ?priority = 1^^http://www.w3.org/2001/XMLSchema#integer , ?sort1 = client 1@fr
?context = urn:graph:1772#742 , ?priority = 0^^http://www.w3.org/2001/XMLSchema#integer , ?sort1 = client 4@fr
?context = urn:graph:1772#1010 , ?priority = 0^^http://www.w3.org/2001/XMLSchema#integer , ?sort1 = client 3@fr
?context = urn:graph:1772#1690 , ?sort1 = client 1@fr
?context = urn:graph:1772#844 , ?sort1 = client 2@fr
在最后两行中,变量 ?priority 根本没有绑定。顺便说一句,您会注意到如果第一个子句未绑定,则第二个 ORDER 子句也不会被执行