WebSphere Extended Deployment V6.0.x     操作系统:

ODR 規則型要求的分類

不論使用哪種規則型技術, 規則庫處理程序皆涉及三個基本領域,包括:構成語言的詞彙、用以表達陳述式中之詞彙的文法, 以及規格處理引擎。本文探討規則庫處理程序的前兩個領域。

詞彙

詞彙由運算子、當成運算元使用的變數關鍵字,以及控制流程陳述式組成。在本功能中, 所選的語言為「Java 傳訊服務 (JMS)」。特別是「訊息選取器語法」。訊息選取器是一種字串, 其語法是以一個 SQL92 條件表示式子集為基礎。在這個應用程式中, 將用它來表達一項分類規則。一般的陳述式語法為:

expression; 其中的 expression 為一個有效的 SQL 查詢(其中的條件式子句含有述語), 而分號 (;) 為陳述式終止符號。

當表示式評估為 true 時,會對適當的原則、遞送或 WSMM 採取 permit(允許)、 reject(拒絕)、redirect(重新導向)等動作。若為 false,則會套用預設的條件。permit(允許)、 reject(拒絕)等動作是由原則提供程式(ROUTING 和 WSMM)所提供。例如, 以下的陳述式即為一種條件表示式:

serverhost like ‘blanca%’ and protocol in (‘HTTP’,’SOAP’);

不過,從實作觀點來看,上述的條件表示式將留存在 XML 規則檔中; 因此,動作、原則提供程式和表示式都是規則元素的屬性。

專有名詞

以下是一組分別當成運算子和運算元之關鍵字的定義。

運算子

WebSphere Application Server Extended Deployment 6.0 版在規則表示式中支援下列的運算子。一般而言, 您不見得知道給定運算元的實際資料類型。不過, 您將遵循 HTTP 方法,將每一個運算元視為一個資料類型字串, 並使用運算子作為運算元之實際資料類型的指示元,以進行資料驗證。在 SQL 專有名詞中, 這些運算子也稱為述語, 這是因為它們是出現在 WHEREHAVING 子句內。運算子不區分大小寫。

  • OR - 邏輯 OR 運算子。
  • AND - 邏輯 AND 運算子。
  • NOT - 否定句運算子。
  • IN - IN 運算子用以在單一表示式中表達一個使用多值的運算元。其意義和運算子的 SQL 標準意義一致。比方說, 假設有一個稱為 port 運算元, 而使用者想表達該 port 值可以是任何或所有的值(如 9080、9090、9091), 則表示式片段為 port IN (9080,9090, 9091)。在 SQL 中,如何表達括弧內的值, 取決於 port 的資料類型而定。也就是說,如果 port 的類型為整數(通常是數字), 則未括上單引號的值就語法來說是正確的。如果 port 為資料類型字串,則正確的表示式為 port IN (‘9080’, ‘9090’, ‘9091’)。
  • LIKE - LIKE 運算子用以表達將對字串運算元值進行型樣比對, 而其意義與用法和 SQL 語言中所定義的一致。其值必須含有萬用字元 (%), 且位於預計進行型樣比對的起始處。例如,host LIKE %blanca 表示式將比對出 blanca 單字或結尾是 blanca 的其他任何單字; host LIKE blanca% 表示式將比對出 blanca 單字或開頭為 blanca 的其他任何單字;host LIKE %blanca% 將比對出 blanca 單字或任何內嵌 blanca 記號的單字。從程式碼實作來說, 將使用 java.util.regex.Pattern 類別。
  • = 相等運算子,用來在區分大小寫的形式中表達一個相符項。
  • > 大於運算子,將搭配數值運算元使用。
  • >= 大於或等於運算子,將搭配數值運算元使用。
  • < 小於運算子,將搭配數值運算元使用。
  • <= 小於或等於運算子,將搭配數值運算元使用。
  • BETWEEN - 這個運算子會搭配 AND 使用,用以選取介於第一個(低)值和最後一個 (高)值在內的值範圍。它們將一起運作在數字和日期值上。
  • EXISTS - 一種 Boolean 運算子,用以檢查某個運算元是否存在, 或某個複合子表示式的結果。例如,檢查某些 HTTP Header 元素屬性是否存在。

運算元

運算元有區分大小寫,在此是以小寫字母來定義,且不容許使用 底線 (_)。不過,如果運算元由多個單字組成, 則會採 camelback 形式,將每一個連續單字的第一個字母變成大寫。
  • clientipv4 – 採用 IPv4 點式四碼位址類型 n.n.n.n 的用戶端機器 IP 位址。
  • clientipv6 – 遵循 RFC 1924 的用戶端機器 IPv6 128 位元位址類型 x:x:x:x:x:x:x:x。
  • serveripv4 – 採用 IPv4 點式四碼位址類型 n.n.n.n 的伺服器機器 IP 位址。
  • serveripv6 – 遵循 RFC 1924 的伺服器機器 IPv6 128 位元位址類型 x:x:x:x:x:x:x:x。
  • clienthost – 用戶端系統的名稱。這是 IP 指令主機名稱的值。這個運算元不支援數值運算子,例如 >、 >=、<、<=。
  • serverhost – 伺服器系統的名稱。這是 IP 指令主機名稱的值。這個運算元不支援數值運算子,例如 >、 >=、<、<=。
  • port – 主機中提供服務之埠。
  • protocol – 傳輸要求時所用的通訊協定。支援的通訊協定有:HTTP、HTTPS、SOAP 和 IIOP。未來或許可支援更多通訊協定, 但在語意上不需要任何的變更。
  • duration – 要求可供分類的時間範圍。一旦要求超過這個時間範圍, 則會套用預設行為。duration 將進一步分為:
    • startDate:以語言環境為基礎來設定格式的 GregorianCalendar 起始日期(以作為呈現、UI 用), 其格式為 day-of-week mm/dd/yyyy hh:mm:ss。如果沒有指定時間部分,且使用下列一項限制, 則會採用其時間。
    • endDate:以語言環境為基礎來設定格式的 GregorianCalendar 結束日期(以作為呈現、UI 用), 其格式為 day-of-week mm/dd/yyyy hh:mm:ss。如果沒有指定時間部分,且使用下列一項限制, 則會採用其時間。如果沒有指定結束日期,則結束日期會是無限。
  • 另外,所提供的預錄常數可搭配 startDate 和 endDate 使用。它們可用來進一步限制時間範圍, 如果沒有指定,則會預設為這段範圍中的 24/7。名稱無法編輯,而值可以變更, 但依預設,會使用本文件中指定的值。它們是:
    • WORKING_HOURS - 週一到週五上午 8 點到下午 5 點。
    • WEEKEND – 週六和星期日從週五半夜 12 點起到週日半夜 12 點。
    • OFFSHIFT_HOURS – 週一到週五下午 5:01 到上午 7:59。
    WORKING_HOURS - 週一到週五上午 8 點到下午 5 點。WEEKEND – 週六和星期日從週五半夜 12 點起到週日半夜 12 點。OFFSHIFT_HOURS – 週一到週五下午 5:01 到上午 7:59。
  • uri – 要求的 URI;可以是以正規表示式比對出的型樣。若要完全相符,請使用 = 運算子。
  • uid – 要求傳送端的使用者 ID。
  • gid – 要求傳送端的群組 ID。
  • scope$name, scope$value – 這些運算元將用在一般名稱/值配對上, 以當成 URL、Cookie、標頭等的參數使用。另外,scope$name 還附帶一項要求,它必須是一個有效的 Java ID。範圍可以是標頭、Cookie 或 queryparm, 以指定名稱在要求中的位置。它將和名稱/值配對中的名稱相比較, 若有指定一值,則邏輯 AND 運算子會搭配對應值一起使用。例如, 規則將評估查詢參數 ticker,且值為 IBM,則其類似如下:queryparm$name=‘ticker’ AND queryparm$value = ‘IBM’; 請注意,如果只是要檢查名稱 ticker 是否存在, 則陳述式為 queryparm$name=‘ticker’;

給定的規則可有多個名稱/值配對,且評估順序是從第一個到最後一個。如果名稱/值配對本身在規則中重複出現, 則會優先採用最後評估的一個。




概念主题    

使用条款 | 反馈

最近更新日期: Aug 14, 2006 2:00:44 PM EDT
http://publib.boulder.ibm.com/infocenter/wxdinfo/v6r0/index.jsp?topic=/com.ibm.websphere.xd.doc/info/odoe_task/codoerule.html

© Copyright IBM Corp. 2005, 2006. All Rights Reserved.
本信息中心基于 Eclipse 技术。(http://www.eclipse.org)