2013-04-29 15 views
1

在我的代碼中,我已經將第一個,中間和最後一個名字綁定到一個名稱中,並使用名稱對它進行排序。Sparql:如果第一個名字爲空,則顯示排序列表最後一個名字

我想按升序對綁定名稱進行排序,並且沒有名字的名稱應顯示在排序列表的末尾。

請分享你的想法來解決這個問題。

我的代碼:

bind (COALESCE(?firstName, "") As ?firstName1). 

bind (COALESCE(?middleName, "") As ?middleName1). 

bind (COALESCE(?lastName, "") As ?lastName1). 

bind (concat(str(?firstName1),str(?middleName1),str(?lastName1)) as ?name). 

} 

order by (regex(" " ,?firstName1) && bound (?name)) 

在輸出雖然它的第一個名字是在結束時清空尚未出現的名字,其餘未在遞增排序名稱。

回答

0

據我所知,你想排序的名字按字典順序(按名字排序,然後按中間名,然後按姓氏)有一個例外:不要把條目與沒有名字在一開始,你想把它們放在最後。如果這是正確的,你想要一個排序條件,如:

ORDER BY DESC(bound(?firstName)) ?firstName ?middleName ?lastName 

這是一些RDF在其中:fn:mn:ln代表的名字,中間名和姓,分別工作:

@prefix : <http://www.example.org/>. 

:aaa :fn "A"; :mn "A"; :ln "A". 
:aab :fn "A"; :mn "A"; :ln "B". 
:aba :fn "A"; :mn "B"; :ln "A". 

:_aa   :mn "A"; :ln "A". 
:_ab   :mn "A"; :ln "B". 
:_ba   :mn "B"; :ln "A". 

這SPARQL用於結合?firstName任選的數據,並且如我上述訂單:

PREFIX : <http://www.example.org/> 

SELECT ?firstName ?middleName ?lastName 
WHERE { 
      ?x :mn ?middleName . 
      ?x :ln ?lastName . 
    OPTIONAL { ?x :fn ?firstName . } 
} 
ORDER BY DESC(bound(?firstName)) ?firstName ?middleName ?lastName 

調用數據names.n3和查詢names.sparql,這裏是當我運行與耶拿的ARQ數據的查詢,我得到的結果:

$ /usr/local/lib/apache-jena-2.10.0/bin/arq --data names.n3 --query names.sparql 
------------------------------------- 
| firstName | middleName | lastName | 
===================================== 
| "A"  | "A"  | "A"  | 
| "A"  | "A"  | "B"  | 
| "A"  | "B"  | "A"  | 
|   | "A"  | "A"  | 
|   | "A"  | "B"  | 
|   | "B"  | "A"  | 
------------------------------------- 

你仍然可以做的那種,即使你正在投射?name這樣而不是?firstName,?middleName?lastName中的任何一個。例如,查詢

PREFIX : <http://www.example.org/> 

SELECT ?name 
WHERE { 
      ?x :mn ?middleName . 
      ?x :ln ?lastName . 
    OPTIONAL { ?x :fn ?firstName . } 

    bind (concat(str(coalesce(?firstName, "_")), str(?middleName), str(?lastName)) as ?name). 
} 
ORDER BY DESC(bound(?firstName)) ?firstName ?middleName ?lastName 

產生

--------- 
| name | 
========= 
| "AAA" | 
| "AAB" | 
| "ABA" | 
| "_AA" | 
| "_AB" | 
| "_BA" | 
--------- 
+0

非常感謝約書亞·泰勒! – ranjani 2013-05-02 10:03:32

+0

@ranjani很高興我可以幫忙,並歡迎來到StackOverflow!如果提供的答案回答您的問題,最好將其標記爲已接受(通過單擊答案旁邊的箭頭)。快樂的SPARQLing! – 2013-05-02 12:39:42

相關問題