[英]Sparql - Order by to return empty values last
我使用AllegroGraph和Sparql 1.1。
我需要對列進行升序排序,並使Sparql查詢在最后返回空值。
樣本數據:
<http://mydomain.com/person1> <http://mydomain.com/name> "John"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>
<http://mydomain.com/person1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://mydomain.com/person>
<http://mydomain.com/person2> <http://mydomain.com/name> "Abraham"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>
<http://mydomain.com/person2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://mydomain.com/person>
<http://mydomain.com/person3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://mydomain.com/person>
在這里,我需要Sparql返回亞伯拉罕,然后是John和沒有name屬性的person3。
查詢我使用:
select ?name ?person {
?person <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://mydomain.com/person>.
optional {?person <http://mydomain.com/name> ?name.}
} order by asc(?name )
當前輸出是person3(null),其次是Abraham和John。 請讓我知道你的想法。
我手頭沒有AllegroGraph,但AFAIK支持多種訂單條件:
select ?name ?person {
?person <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://mydomain.com/person> .
optional {?person <http://mydomain.com/name> ?name . }
} order by (!bound(?name)) asc(str(?name))
第一個條件根據?name
是否綁定進行排序,如果此條件沒有找到差異,則使用第二個條件。 請注意使用str()
將rdf:XMLLiteral
轉換為支持比較的數據類型。
(您可能還需要添加.
在每行的你ntriples數據的結束。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.