WBEM 查詢語言

簡介

查詢手法可以使在網路上減輕WBEM管理環境的負擔,確切的傳送查詢請求的方法和接收查詢結果,是定義 [CIM Operation Over HTTP Specification] 的一部份。

CIM 查詢語言已經廣泛的使用在 [CIM Operation over HTTP Specification[,查詢定義透過 ExecuteQuery CIM opration 從物件取回實體層(instance-level)的資料結果,並且定義指示 (Indication) 發生時的情況,和要取回的資料,如同以下:

  • 訂閱在事件模組內的 CIM_IndicationFilter
  • 使用 CIM_QueryCondition 或在CIM_PolicySet 使用CIM_MethodAction 實體

我們可以從圖9.1中藍色圈圈的部份輸入查詢語言。

圖 9.1 查詢輸入處
Enlarge
圖 9.1 查詢輸入處

在接下來的章節,我們將會介紹一種查詢語言,稱為WBEM Query Language(WQL),並且要如何篇寫WQL。

[ 編輯]

WBEM 查詢語言

WBEM Query Language (WQL)是在 Query Language (ANSI SQL) 裡的一個小子集, WQL是用來支援WBEM在Solaris/WMI的平台,下面的表格顯示出傳統的SQL概算相對應於WQL。

表一 SQL 與 WQL 之比較
SQL WQL
Table CIM 類別 (class)
Row CIM 實體 (instance)
Column CIM property

在DMTF組織,有兩種標準規格語言,另一種語言稱作CIM Query Language (CQL)。因為WQL比CQL普遍流行,在以下的章節中,我們將會著重在如何寫WQL。

在WBEM Service實作時,WQL是一種取回結果的語言,你可以使用WQL去取回以CIM 資料模組型態的資料。在CIM模組裡,物件的相關資訊是存在CIM 類別和CIM 實體。CIM的實體包含屬性,屬性有一個名字、資料型態、內容值。WBEM客戶端使用WQL去查詢和過濾資料。當資料是存在一個特別的資料提供者,CIMON會傳送使用者的查詢到適合的資料提供者,使得使用者可以搜尋某一個類別的實體,或所有的類別含有一個特別的名稱領域(namespace)。

例如,你可以搜尋所有Solaris_DiskDrive類別的實體中Storage_Capacity的屬性:

select * from Solaris_DiskDrive where Storage_Capacity = 1000
[ 編輯]

WQL 關鍵字

WBEM Service SDK 支援 WQL,且可以使用簡單 select語法,但不包括 join。下面的表格說明WQL的重要字。

表二:部分 WQL 關鍵字
關鍵字 WQL 含意
SELECT 所要查詢的屬性
WHERE 縮小查詢範圍
FROM 所要查詢屬性所在的類別名稱
NOT 非空值的比較
OR 比較兩個情況,當超過一個邏輯運算出現時OR要置於AND之後
AND 比較兩個情況,如果都成立,回傳值為真
LIKE 產生提供符合最小資訊的結果
[ 編輯]

SELECT 述詞

你可以使用 SELECT 句子取回單一個類別和它子類別的實體,你也可以針對屬性取回和滿足條件情況下取回,SELECT句子的語法如下:

SELECT list FROM class WHERE conditio

下面的表格顯示使用 SELECT 句子使用參數的例子。

表三:SELECT 的實例
範例 查詢描述
SELECT * FROM class 選擇某類別和它子類別中所有的實體,所有的實體會包含所有的屬性
SELECT PropertyA FROM class 選擇某類別和它子類別中實體含有屬性A
SELECT PropertyA, PropertyB FROM class WHERE PropertyB=20 選擇某類別和它子類別中實體含有屬性A、屬性B,並且屬性B 等於20。所以每個取回的實體只含屬性A、屬性B
[ 編輯]

FROM 述詞

FROM 字句定義符合查詢字串中的實體所在的類別,目前不支援JOIN的語法,所以只能從單一個類別取回資料。

FROM 由一個概念類別fromExp表達,目前NonJoinExp只能直接對fromExp的字類別。NonJoinExp 子類別表達SELECT 操作執行只在單一個CIM 類別。下面顯示一個使用FROM的例子。

SELECT * FROM class
[ 編輯]

WHERE 述詞

WHERE縮小查詢的範圍,句子中包含一個情況的敘述,敘述中可包含屬性、關鍵字、運算子、整數。把WHERE加到SELECT後面的語法如下:

SELECT CIMinstance FROM CIMclass WHERE conditional_expression

在WHERE句型中的conditional_expression 採取下面的行式:

property operator constant
  • property:常數、欄位名稱或數學算符與這些項目的組合。
  • operator:大多為比較運算子,用於數值資料、字元、日期資料的比較。
  • constant:常數、欄位名稱或數學算符與這些項目的組合。

句子中包含一個情況的敘述,敘述中可包含屬性、關鍵字、運算子、整數。把 WHERE 加到 SELECT 後面的語法如下:

SELECT instance FROM class [WHERE constant operator property]

下面顯示在 conditional_expression 使用參數的例子。下面的查詢只會取回 Solaris_Printer 類別中,已經是準備好的printer的實體:

SELECT * FROM Solaris_Printer WHERE Status = `ready'

這個例子會取回 Solaris_FileSystem 類別中帶有 Name 為 `home' 或為 `file' 的所有實體:

SELECT * FROM Solaris_FileSystem WHERE Name= `home' OR Name= `files'

這個例子會取回Solaris_FileSystem類別中帶有Name為’home’或為’file’的所有實體,且AvailableSpace > 2000000 和 FileSystem = `Solaris':

SELECT * FROM Solaris_FileSystem WHERE (Name = `home' OR Name = `files') 
 AND AvailableSpace > 2000000 AND FileSystem = `Solaris'
[ 編輯]

Query 錯誤

根據標準規格,我們列出當使用者執行查詢請求時,發生的錯誤訊息。

表四:CIM 的例外訊息
錯誤訊息描述
CIM_ERR_ACCESS_DENIED 使用者沒有權限使用查詢的動作。
CIM_ERR_INVALID_PARAMETER 輸入的參數不對。
CIM_ERR_FAILED 一般的錯誤訊息。
CIM_ERR_NOT_SUPPORTED WBEM沒有支援這樣的功能。
CIM_ERR_INVALID_NAMESPACE Namespace不存在。
CIM_ERR_QUERY_LANGUAGE_NOT_SUPPORTED 使用的查詢語言不支援
CIM_ERR_INVALID_QUERY 非何法的查詢語言。
[ 編輯]

總結

在本章中,我們介紹了CIM模型查詢語言的基本概念,客戶端開發者可利用該查詢語言更方便的開發應用程式,CIM查詢語言相當類似於應用於資料庫開發的Structured Query Language (SQL),也因為SQL的普及,CIM查詢語言也能廣泛的被接受使用,此外,藉由傳送複雜的查詢語句給WBEM伺服器,可降低客戶端與伺服器間的溝通負荷。

[ 編輯]

自我練習

  • WQL是以哪些查詢語言為基礎?
  • WQL的基本語法格式為何?
  • 請概述SQL與WQL的對應關係。
  • 請利用WBEMTest範例來測試以下的CIM查詢
    • 1a: 檢索CIM模型描述貯藏處中,類別Win32_LogicalDisk的所有實體。
    • 1b: 檢索CIM模型描述貯藏處中,類別Win32_LogicalDisk的所有實體,且其檔案格式為FAT者。
    • 1c: 檢索CIM模型描述貯藏處中,類別Win32_LogicalDisk的所有實體,且其剩餘空間少於100 KB者。
[ 編輯]

參考資料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值