簡體   English   中英

Sparql - 排序依次返回空值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM