以下顯示範例規則檔案,同時提供檔案包含的每一個標記相關說明。
<RULES>
<RULE>
<NAME>從屬端有足夠的記憶體</NAME>
<DESCRIPTION>檢查從屬端是否有足夠的記憶體來執行應用程式</DESCRIPTION>
<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() < $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>
<TEXT>應用程式無法在低於 100 MB 的情況下執行</TEXT>
</MOREINFO>
</SEVERITY>
<SEVERITY level="WARNING">
<PARAM id='SIZE'>150</PARAM>
<MOREINFO>
<TEXT>接近最低記憶體層次</TEXT>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>
此範例所示範的規則,可用來檢查從屬端是否有執行應用程式所需的足夠記憶體。<VIOLATION> 是一種 XPATH 表示式,說明 Applet 將對包含所有已收集到的資料的 XML 檔進行評估。請注意,由於違規是內嵌於 XML 檔中的 XPATH 表示式,有些 XPATH 字元,像是 '<'、'>' 和 '&' 必須以個體取代。如果 XPATH 表示式傳回非空值節點集,表示規則已失敗。在此情況下,如果從屬端的可用記憶體少於一定數量,規則就會失敗。可使用不同的嚴重度層次來設定觸發違規的實際數量。
在本範例中,Applet 會先將 VIOLATION 表示式中的子字串 "$arg=SIZE$" 取代為 "100",然後評估該表示式。如果從屬端的可用記憶體低於 100 MB,規則就會失敗並呈嚴重狀態。Applet 會指出該狀態並顯示「應用程式無法在低於 100 MB 的情況下執行」的訊息。如果規則成立,Applet 會將 "$arg=SIZE$" 取代為 150 並再試一次;如果規則失敗,Applet 會顯示「接近最低記憶體層次」訊息。如果 Applet 在檢視過所有嚴重度層次後並未發現任何違規,表示規則成立。
在上述範例中,與各個違規 (如同在 <TEXT> 元素中所指定) 一同顯示的其他資訊不是動態的。然而在偵測到違規時,管理員可能會想要告訴使用者需要多少記憶體。使用 <MOREINFO> 標記下的 <ARG> 元素可達到此一目的。假設規則的內容為:
<RULE>
<NAME>從屬端有足夠的記憶體</NAME>
<DESCRIPTION>檢查從屬端是否有足夠的記憶體來執行應用程式</DESCRIPTION>
<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() < $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>
<TEXT>應用程式無法在低於 100 MB 的情況下執行。您只有 {0} MB 可供使用</TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
如果偵測到嚴重違規,Applet 會評估 <ARG> 元素中的 XPATH 表示式,並將它插入 <MOREINFO> 文字中的字串 "{0}" 位置,會產生像是「應用程式無法在低於 100 MB 的情況下執行。您只有 45 MB 可供使用」的訊息。<ARG> 元素的值必須是有效的 XPATH 表示式。可指定多個參數;Applet 會評估第一個表示式,將它取代為 "{0}" 並將第二個表示式取代為 "{1}" 等等。如果任何 XPATH 表示式傳回多個節點,Applet 會建立一個以逗號分隔的節點清單。
為了在多個從屬端位置使用相同的規則,管理員可透過資源組合來啟用 <NAME>、<DESCRIPTION> 和 <TEXT> 元素的轉譯。資源組合是使用 <BUNDLE> 元素指定的,其說明如下:
<RULES>
<BUNDLE id=”bundle1”>acme.bundles.RuleBundle</BUNDLE>
<BUNDLE id=”bundle2”>ruleBundle.xml</BUNDLE>
<RULE>
<NAME resource=”name@bundle1”>從屬端有足夠的記憶體</NAME>
<DESCRIPTION resource=”description@bundle2”>此規則會檢查從屬端是否有足夠的記憶體來執行應用程式</DESCRIPTION>
<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() < $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>
<TEXT resource=” moreinfo@bundle2 ”>您只有 {0} MB 記憶體。</TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>
資源組合可以是 Applet JAR 檔案中的 Java 類別檔案、伺服器上的 Java 類別檔案或伺服器上的 XML 檔案。所有 Java 資源組合類別都必須擴充 Java.util.ResourceBundle,所有 XML 資源組合則必須包含下列格式:
<BUNDLE>
<STRING id='Hello'>Hola</STRING>
<STRING id='moreinfo'>Solo tienes {0} MB de memoria</STRING>
</BUNDLE>
Applet 會先找出目前位置的二元代碼,例如,"es"。Applet 在剖析 BUNDLE 標記時,會先假設標記值為 Java 類別名稱。Applet 會用位置代碼來修改類別名稱,然後試著從 Applet JAR 檔載入此類別。因此,就上例中的第一個 BUNDLE 來說,如果位置是 "es",Applet 會試著載入 acme.bundles.RuleBundle_es。如果該類別不存在,Applet 會試著從伺服器載入,將建置網頁所在的目錄視為類別路徑的根目錄;因此,在第一個組合的狀況中,如果使用者是從 http://www.company.com/csa/CSA 取得 CSA Applet,則 Applet 會試著載入 http://www.company.com/csa/acme/bundles/RuleBundle_es.class。如果此步驟失敗,Applet 會將 BUNDLE 標記的值視為伺服器上的一個 XML 檔名;因此,在第二個 <BUNDLE> 元素的狀況中,Applet 會試著下載 http://www.company.com/csa/ruleBundle_es.xml。
如果 Applet 在具有指定資源屬性的規則中遇到 NAME、DESCRIPTION 或 TEXT 標記,它會先試著找出並顯示該指定資源。如果指定的組合不在目前的位置,或如果指定的 ID 在組合中不存在,Applet 會顯示標記本身的值。例如,在上述指定的規則檔案下,假設位置是「西班牙」(es),但檔案 ruleBundle_es.xml 中沒有 ID 為 "description" 的資源。如果從屬端只有 45 MB 可用,則 Applet 會顯示:
El cliente tiene bastante memoria - 此規則會檢查從屬端是否有足夠的記憶體可執行應用程式。
- X Solo tienes 45 MB de memoria
最後,有些情況下可能不需要評估某些規則。例如,當使用者使用 Internet Explorer 來存取應用程式時,就不需要評估用來檢查是否有正確 Netscape 瀏覽器設定的規則。因此,管理員可為每個規則指定一或多個先決條件,其說明如下:
<RULES>
<PRECONDITION id=”a”>//ROWSET[TABLE='MGMT_ECM_CSA']/ROW/BROWSER_TYPE[text() = ‘Netscape']</PRECONDITION>
<PRECONDITION id=”b”>//ROWSET[TABLE='MGMT_ECM_CSA']/ROW/BROWSER_VERSION[number() > 4]</PRECONDITION>
<RULE precondition="a,b">
<NAME>從屬端有足夠的記憶體</NAME>
<DESCRIPTION >此規則會檢查從屬端是否有足夠的記憶體來執行應用程式</DESCRIPTION>
<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() < $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>
<TEXT>應用程式無法在低於 100 MB 的情況下執行。您只有 {0} MB 可供使用</TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>
Applet 會針對各個先決條件來評估指定的 XPATH 表示式。如果表示式傳回非空值結果集,表示符合先決條件 (請注意:這些語意與 <VIOLATION> 元素中的 XPATH 表示式語意相反)。只有在所有列出的先決條件均符合時,才會評估含有先決條件清單的規則。
以下是最後一個範例,列出規則檔的所有元素以及各個元素的總表。
<RULES>
<PRECONDITION id=”a”>//ROWSET[TABLE='MGMT_ECM_CSA']/ROW/BROWSER_TYPE[text() = ‘Netscape']</PRECONDITION>
<PRECONDITION id=”b”>//ROWSET[TABLE='MGMT_ECM_CSA']/ROW/BROWSER_VERSION[number() > 4]</PRECONDITION>
<BUNDLE id=”bundle1”>acme.bundles.RuleBundle</BUNDLE>
<BUNDLE id=”bundle2”>ruleBundle.xml</BUNDLE>
<RULE>
<NAME resource=”name@bundle1”>從屬端有足夠的記憶體</NAME>
<DESCRIPTION resource=”description@bundle2”>此規則會檢查從屬端是否有足夠的記憶體來執行應用程式</DESCRIPTION>
<VIOLATION> //ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB[number() < $arg=SIZE$] </VIOLATION>
<SEVERITY level="CRITICAL">
<PARAM id='SIZE'>100</PARAM>
<MOREINFO>
<TEXT resource=” moreinfo@bundle2 ”>您只有 {0} MB 記憶體。</TEXT>
<ARG>//ROWSET[@TABLE='MGMT_ECM_HW']/ROW/AVAIL_MEMORY_SIZE_IN_MB/text()</ARG>
</MOREINFO>
</SEVERITY>
</RULE>
</RULES>
| 標記名稱 | 說明 |
|---|---|
| RULES | 這是 XML 檔案的最上層標記。 |
| BUNDLE |
此標記指定用於轉譯的資源組合。標記的值是檔案的名稱或 Java 類別名稱。規則引擎會讀取此字串,然後第一次嘗試在 Applet JAR 中尋找包含此名稱的檔案。此檔案應該包含各種語言中資源 ID 與字串的對應。如果找不到類似檔案,則字串會當成是 Java 資源組合類別的名稱。使用語法 <resource id>@<bundle id>,可以參照資源組合中的字串。 |
| PRECONDITION | 此標記用來指定 XPATH 表示式,它必須傳回非空值節點集,以便評估規則。"id" 屬性指定先決條件的 ID。規則指定應該進行評估的先決條件清單,以列示其 ID 的方式表示。 |
| RULE | 此標記代表要評估的個別節點。規則的嚴重度是使用 <SEVERITY> 標記指定的 (請參閱下面)。規則至少要指定一個嚴重度標記。標記有一個選擇性「先決條件」屬性,用來指定由逗點區隔的先決條件 ID 清單。評估規則之前,必須符合所有先決條件。如果未符合先決條件,規則的狀態為「不適用」,而且不會顯示在從屬端 UI。RULE 標記的子項是 NAME、DESCRIPTION、VIOLATION、SEVERITY 以及 MOREINFO。 |
| NAME |
此標記指定規則的名稱以及識別儲存區域中的標記。 注意:此標記必須包含一個值,而且不可以空白。 |
| DESCRIPTION | 這是規則的說明。 |
| VIOLATION |
此標記列示根據指定規則檢查的違規。違規指定在「CSA 條件語言」中。 |
| SEVERITY | 規則可有三個嚴重度層次:INFO、WARNING 及 CRITICAL。SEVERITY 節點包含的 ARG 子項數目,必須等於 VIOLATION 節點中的表示式能接受的引數數目。當規則引擎評估規則時,會為嚴重度層次中指定的每個引數集評估 VIOLATION 中的條件,從 CRITICAL 開始,依嚴重度順序往下移動。引擎遇到不成立的條件時,會宣告為失敗,嚴重度層次等於造成失敗之引擎的嚴重度層次。如果所有指定的層次都符合條件,規則即算通過。SEVERITY 節點的子項是 PARAM 和 MOREINFO。 |
| PARAM | 此標記指定應替換為表示式的引數值。標記的 "id" 屬性必須符合表示式中某一引擎的名稱。 |
| MOREINFO |
此標記指定若使用者按一下失敗的規則旁顯示的「詳細資訊」按鈕時,要顯示的資訊。MOREINFO 的子項是 TEXT 和 ARG。 注意:MOREINFO 節點可以是嚴重度節點的子項 (指定多個嚴重度時) 或是規則本身的子項。 |
| TEXT | 此標記指定當按一下「詳細資訊」按鈕時,要顯示的內容。"resource" 屬性會指定資源組合中的字串 – 如果未顯示此字串,則顯示節點的值。文字 (資源組合或在節點本身中) 可以使用 "{0}"、"{1}" 等等,指定要在什麼位置插入引數。在此狀況下,會評估 ARG 節點中的表示式,然後按照指定的順序插入文字。如果指定的 ARG 節點比字串中可插入的位置還多,會略過多出來的節點。 |
| ARG |
此標記會使用「CSA 條件語言」指定可以評估和插入 MOREINFO 文字的表示式。 |
版權所有 © 1996,2007,Oracle。保留一切權利。