據我所知,你想排序的名字按字典順序(按名字排序,然後按中間名,然後按姓氏)有一個例外:不要把條目與沒有名字在一開始,你想把它們放在最後。如果這是正確的,你想要一個排序條件,如:
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" |
---------
非常感謝約書亞·泰勒! – ranjani 2013-05-02 10:03:32
@ranjani很高興我可以幫忙,並歡迎來到StackOverflow!如果提供的答案回答您的問題,最好將其標記爲已接受(通過單擊答案旁邊的箭頭)。快樂的SPARQLing! – 2013-05-02 12:39:42