2014-02-26 32 views
3

我遵循SPARQL 1.1部分10.2 CONSTRUCT並具有以下SPARQL查詢,它返回其主題具有類型Homework並且也具有事件日期的所有三元組。SPARQL的CONSTRUCT模式中的ORDER BY解決方法修飾符

CONSTRUCT { ?s ?p ?o } WHERE 
{ 
GRAPH ?g { ?s ?p ?o } . 
{ ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> 
    <http://lod.isi.edu/ontology/syllabus/Homework> 
}. 

{ ?s <http://lod.isi.edu/ontology/syllabus/hasEventDate> ?date}. 
} 

現在,我想檢索事件日期的升序/降序結果?date。我嘗試添加order by修改器,如下所示,但OpenRDF工作臺中存在解析錯誤。

CONSTRUCT { ?s ?p ?o } WHERE 
{ 
GRAPH ?g { ?s ?p ?o } . 
{ ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> 
    <http://lod.isi.edu/ontology/syllabus/Homework> 
}. 

{ ?s <http://lod.isi.edu/ontology/syllabus/hasEventDate> ?date}. 
ORDER BY DESC(?date) 

} 
Encountered " "order" "ORDER "" at line 9, column 6. Was expecting one of: 
"(" ... "{" ... "}" ... "[" ... <NIL> ... <ANON> ... "optional" ... 
"graph" ... "minus" ... "filter" ... "true" ... "false" ... "bind" ... 
"service" ... "values" ... <Q_IRI_REF> ... <PNAME_NS> ... <PNAME_LN> ... 
<BLANK_NODE_LABEL> ... <VAR1> ... <VAR2> ... <INTEGER> ... <INTEGER_POSITIVE> ... 
<INTEGER_NEGATIVE> ... <DECIMAL> ... <DECIMAL_POSITIVE> ... 
<DECIMAL_NEGATIVE> ... <DOUBLE> ... <DOUBLE_POSITIVE> ... 
<DOUBLE_NEGATIVE> ... <STRING_LITERAL1> ... <STRING_LITERAL2> ... 
<STRING_LITERAL_LONG1> ... <STRING_LITERAL_LONG2> ... 
+0

你使用的確切語法是什麼,你得到了什麼錯誤? –

+0

還請顯示查詢的示例輸出 - 實際輸出和預期輸出。 –

+1

接受的答案解釋瞭如何解決語法問題,但需要注意的是'構造'查詢的結果是一個RDF圖,它是一個三元組的集合(因此是_unordered_集合)。 'order by'不會爲你做任何事情,除非你將它與'limit'(可能還有'offset')一起使用來選擇所有可能結果的子集。 –

回答

2

的問題是,你的ORDER BY子句不是在查詢正確的位置。它應該是右括號封閉WHERE子句後:

CONSTRUCT { ?s ?p ?o } 
WHERE 
{ 
GRAPH ?g { ?s ?p ?o } 
?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://lod.isi.edu/ontology/syllabus/Homework> . 
?s <http://lod.isi.edu/ontology/syllabus/hasEventDate> ?date . 
} 
ORDER BY ASC(?date) 

另外請注意,您的原始查詢幾大括號的是,雖然不完全是錯誤的,多餘的。

+1

這將解決語法問題,但同樣重要的是要注意'構造'查詢的結果是一個圖形,即三元組的(無序)集合; 'order by'在這裏並沒有真正做任何事情,除非它與'limit'(可能是'offset')一起使用來限制結果的內容。 –

+0

@JoshuaTaylor這是真的。然而,儘管SPARQL標準不能保證完成的RDF圖中三元組的順序(僅僅因爲這種圖是_by definition_ unordered),但實現仍然需要以有序形式處理解決方案序列。因此,在以迭代方式報告查詢結果的查詢引擎中,三元組實際上將按照定義的順序進行報告。 –