我目前正在尝试按优先级排序一些客户端(那些先运行订阅然后是其他客户端。
为此,我在此查询中使用了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但是每当我执行查询时,我得到(以及预期的输出结果)unbound?priority“rows”表示那些应该得到1的项目优先级所以我需要在查询中添加FILTER(绑定(?priority))以获得我期望的结果。
这是正常还是我错过了什么?
提前致谢, 最大
修改:
=>在跟踪器中提出了排序问题
我编辑了查询以检查prority在同一节点上是绑定还是未绑定。
这是我得到的结果集的示例输出
?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子句也不受尊重
答案 0 :(得分:1)
使用EXISTS
作为另一个表达式的子表达式存在一个错误,可能导致错误的结果,如您的示例所示。
现在,这已在源代码中修复,并将包含在下一个版本中