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 変数は常に 0 または 1 にバインドする必要があるように思えますが、クエリを実行するたびに、(予想される出力結果と共に) バインドされていない ?priority "rows" が取得され、優先度として 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

最後の 2 行では、変数 ?priority はまったくバインドされていません。ちなみに、最初の句がバインドされていない場合、2 番目の ORDER 句も受け入れられないことに注意してください。

4

1 に答える 1

1

EXISTSを別の式の子式として使用すると、例のように誤った結果になる可能性があるというバグがありました。

これは現在ソース コードで修正されており、次のリリースに含まれる予定です。

于 2013-04-22T23:23:32.690 に答える