2013-04-29 40 views
0

我使用AllegroGraph和Sparql 1.1。Sparql - 按順序返回空值

我需要對列進行升序排序,並使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返回亞伯拉罕,其次是約翰和Person3可能不具有name屬性。

查詢我使用:

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可能(空),其次是亞伯拉罕和約翰。 enter image description here 請讓我知道你的想法。

回答

2

我沒有AllegroGraph在手,但據我所知它支持多階條件:根據是否?name綁定與否而如果這個條件沒有找到差異,第二

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)) 

第一個條件排序條件被使用。請注意使用str()rdf:XMLLiteral轉換爲支持比較的數據類型。

(您可能還需要添加.在每一行結束在ntriples數據。)

+0

是的,這完全在AllegroGraph! – 2013-04-29 12:02:31