2013年12月18日 星期三

Neo4j: Cypher語法筆記:表達形式 Expressions

The article described the expressions of Neo4j.

*******

Neo4j的Cypher語法支援了下面幾種表達形式。
如同多數的程式語言一樣,數字、字串、函數等方法都有支援。
以下是我簡單整理給自己看的,主要參考Neo4j的官方文件。

數字型態,主要是整數與小數,小數只支援到雙倍精確度(Double)
呈現時就是直接輸入數字,例如6, 7, 13, 12.05

字串 String,可以用單引號或者雙引號,夾帶長串的文字
"Eric Zero", 'Zero', "Neo4j"

變數,就是變數。英文習慣是Variable,但是官方文件說是identifier
可以是文字或者文字帶有數字,並且有區分大小寫。
在送出查詢使用時不用先宣告變數。
x, X, xYz, x1, 1xZ都可以,就是不能用單獨數字。
不然會被當成是一個數值內容。
每個物件本身會被視為一個物件。

屬性(Property),變數下的細節層級。
例如一個變數可以有長度或者名稱。
不要忘了,這個變數本身就是一個物件。
例如gene.name,指gene這個物件下面有一個名叫name的屬性。
gene.length,指gene下面還有length的屬性存在。
關於屬性,可能要自己建立一個資料節點(node)後比較有感。
這個之後再聊。

參數,用大括號包起來。
例如{param}、{0}

集合(collection of expression),使用中括號包裝。
裡面的元素用逗號區隔,集合內可以都是同樣型態的資料。
或者夾雜數字、字串、參數等混合。空集合也可以。
["a","b"]、[0,1,1.1,2]、["a2", 2,"test"]、[ ]

函數,跟多數程式語言一樣,用函數名與小括號。
括號裡面再放入輸入的物件,例如 length( str )

路徑表達 (path-pattern),實際上是「關係」的呈現為主。
這是Cypher很有特色的一點,用ASCII Art的方式呈現。
例如A指到B,就是(A)-->(B)
A跟C都指到B,可以用兩個方法呈現。
第一種:(A)-->(B) , (C)-->(B)
第二種:(A)-->(B)<--(C)

很有趣吧!包起來物件的左右小括號,看起來就跟圈圈一樣。
配合橫線跟大於等於的符號形成一個箭頭。

在語法表達式中,等號具備傳值的功能。
規則是右邊的值給左邊。
例如LengthOfSeq = seq.length
意思是LengthOfSeq這個變數的值,是來自於物件seq的length屬性。
length屬性如果是字串,LengthOfSeq收到後就是字串。
如果是Numerical, 收到後就是數值。

跳脫字元也是必要的,因為特殊字元需要特殊的處理方式。
有程式設計經驗的人都知道,Cypher也承襲多數語法慣例:
\t    Tab字元
\n   換行字元
\b   退位字元
\\    斜線
\'    單引號
\"   雙引號

跳脫字元 Escape Character的使用非常重要
尤其配合正規表示法(RegEx, Regular Expression)很普遍。

CASE,是一種條件表達式。符合條件的會被執行。
請看一下這個簡單的Cypher範例:

MATCH n
RETURN CASE  n.eyes
WHEN 'blue'
THEN 1
WHEN 'brown'
THEN 2
ELSE 3 END AS result


上面例子中,先找到資料節點n。
(MATCH等語法,另闢一文說明)
之後回傳n.eyes的屬性值作為CASE條件判斷用途
當值是字串blue傳回1,字串brown傳回2
其他都當作3(預設值),CASE到此結束以END表示
result這個值就是THEN的條件判斷後結果

*******

表達式的筆記先介紹到這裡,有錯誤煩請指教。

參考的原始官方網頁





沒有留言: