BIND子句上的Sparql问题

时间:2013-04-20 14:39:32

标签: sparql dotnetrdf

我目前正在尝试按优先级排序一些客户端(那些先运行订阅然后是其他客户端。

为此,我在此查询中使用了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子句也不受尊重

1 个答案:

答案 0 :(得分:1)

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

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