2

我目前正在尝试按优先级对一些客户进行排序(那些首先拥有正在运行的订阅的客户,然后是其他客户。

为此,我在此查询中使用了 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 子句也不会被执行

4

1 回答 1

1

使用EXISTS另一个表达式的子表达式存在一个错误,可能会导致不正确的结果,如您的示例所示。

这现在已在源代码中修复,并将包含在下一个版本中

于 2013-04-22T23:23:32.690 回答