com.sun.wbem.query パッケージ中のクラスやメソッドは、WQL パーサーと、解析する WQL 文字列を表しています。このパッケージには、照会文字列内の節を表すクラスと、これらの節の中の文字列を処理するメソッドが含まれています。
現在のところ解析可能な WQL 式のタイプは SELECT 式だけです。SELECT 式には次の部分が含まれています。
SELECT 文
FROM 節
WHERE 節
次の図は、WQL 式中の節と WBEM クラスの対応を表したものです。
WQL |
WBEM 照会クラス |
---|---|
SELECT attribute_expression |
SelectList |
FROM table_attribute |
FromExp |
WHERE conditional_expression |
QueryExp |
WQL は、CIM データモデルに基づいて格納されるデータを照会できるようになっています。CIM モデルでは、オブジェクトに関する情報は CIM クラスや CIM インスタンスに格納されます。CIM インスタンスには、名前、データ型、値からなるプロパティを持含めることができます。WQL は、次の表に示すように CIM オブジェクトモデルを SQL テーブルにマップします。
SQL |
WQL |
---|---|
テーブル |
CIM クラス |
行 |
CIM インスタンス |
列 |
CIM プロパティ |
CIM の WQL 式は、次の形式で表すことができます。
次はより実際的な WQL 式の例です。
SELECT * FROM Solaris_FileSystem WHERE (Name="home" OR Name="files") AND AvailableSpace > 2000000 |
SelectExp クラスは、SELECT 分を表します。
SELECT 文は、情報検索に使用される SQL 文ですが、WQL SELECT 文には、WQL 特有の制約と拡張がいくつかあります。SQL SELECT 文は、通常データベース環境でテーブルから特定の列を検索するのに使用されます。WQL SELECT 文は、単一クラスのインスタンスを検索するのに使用されます。WQL では、複数のクラスに渡る照会はサポートされません。
検索リストは SELECT 式で表されます。SELECT 文には次の形式があります。
SELECT 文 |
選択されるもの |
---|---|
SELECT * |
指定されたクラスとそのすべてのサブクラスのすべてのインスタンス。 |
SELECT attr_exp, attr_exp...attr_exp |
指定されたクラスとそのすべてのサブクラスのすべてのインスタンスのうち、指定された識別子をもっているものだけ。 |
FROM 節は、abstract クラス fromExp によって表されます。現在のところ、fromExp の直接のサブクラスは NonJoinExp だけです。NonJoinExp は、1 つのテーブル (CIM クラス) だけを指定した FROM 節を表しています。select 操作はこのテーブルに対して行われます。
FROM 節では、照会文字列に一致するインスタンスが含まれているクラスを指定します。SQL では、FROM 節に修飾子付き属性式を指定します。これが検索するクラスの名前になります。修飾子付き属性式には、そのテーブルとクラスを指定します。現在のところ WQL FROM 節では、非 join 式だけがサポートされます。したがって、WQL FROM 節には 1 つのクラスしか指定できません。
QueryExp クラスは、その各サブクラスが条件式を表している abstract クラスです。特定の CIMInstance がこれらの条件式に適用されると、ブール値を返します。
WHERE 節は、照会のスコープを狭めるためのものです。WHERE 節には条件式が含まれています。これらの条件式には、プロパティまたはキーワード、演算子、定数が含まれています。WHERE 節には、あらかじめ定義された WQL 演算子のいずれかを指定する必要があります。
SELECT 文の後に追加する WHERE 節の基本的な構文は、次のとおりです。
SELECT FROM WHERE CIM instance CIM class conditional_expressionWHERE 節の条件式は、次の形式です。
property operator constant
QueryExp クラスの次の各サブクラスは、WHERE 節における条件式の特定のタイプに対応しています。
AndQueryExp
BinaryRelQueryExp
NotQueryExp
OrQueryExp
WHERE 節の条件式は QueryExp クラスで表されます。条件式はツリー構造になっています。たとえば、条件式 (a=2 and b=3 or c=4) は、次のようなツリー構造で表されます。
QueryExp クラスは照会式ツリーのトップレベルだけを返します (上の例では ORQueryExp)。これによって、プロバイダは、そのクラス内のメソッドを使って照会式ツリーの分岐を下方にたどることができます。
プロバイダが WQL 照会文字列を別のエンティティに渡し、この文字列を解析させるには、次のメソッドが便利です。
canonizeDOC - 式を「論理積の論理和」形式にします (比較式と比較式の AND を OR にする)。これによって、式をツリー形式ではなく、複数のリストが含まれる 1 つのリストとして処理できるため、評価が容易になります。例: (x > 5 and y > 6) or (y > 6 and z=7)
canonizeCOD - 式を「論理和の論理積」形式にします (比較式と比較式の OR を AND にする)。これによって、式をツリー形式ではなく複数のリストが含まれる 1 つのリストとして処理できるため、評価が容易になります。例: (x > 5 or y > 6) and (y > 6 or z=7)