WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

CREATE ステートメント

CREATE ステートメントは新規メッセージ・フィールドを作成します。

構文

構文図を読む構文図をスキップする
>>-CREATE--Qualifier--Target--+----------+---------------------->
                              '-AsClause-'   

>--+------------------+--+-------------------+-----------------><
   |              (1) |  |               (2) |   
   '-DomainClause-----'  +-RepeatClauses-----+   
                         +-ValuesClauses-----+   
                         +-FromClause--------+   
                         |             (3)   |   
                         '-ParseClause-------'   

Qualifier

|--+-FIELD-------------------+----------------------------------|
   '-+-PREVIOUSSIBLING-+--OF-'   
     +-NEXTSIBLING-----+         
     +-FIRSTCHILD------+         
     '-LASTCHILD-------'         

AsClause

|--AS--AliasFieldReferenceVariable------------------------------|

DomainClause

|--DOMAIN--expression-------------------------------------------|

RepeatClauses

|--REPEAT--+---------------------+------------------------------|
           '-VALUE-- -expression-'   

ValuesClauses

|--+------------------+--+-------------------+------------------|
   '-| NamesClauses |-'  '-VALUE--expression-'   

NamesClauses

                                                                           (4)     
|--+-+------------------+--+-----------------------+--+------------------+-----+--|
   | '-TYPE--Expression-'  '-NAMESPACE--Expression-'  '-NAME--Expression-'     |   
   '-IDENTITY--PathElement-----------------------------------------------------'   

FromClause

|--FROM--SourceFieldReference-----------------------------------|

ParseClause

|--PARSE--(--BitStreamExpression--+------------------------------+--)--|
                                  | .-<<-----------------------. |      
                                  | V                          | |      
                                  '---+-ENCODING--expression-+-+-'      
                                      +-CCSID--expression----+          
                                      +-SET--expression------+          
                                      +-TYPE--expression-----+          
                                      +-FORMAT--expression---+          
                                      '-Options--------------'          

オプション

|--OPTIONS--+------------+--------------------------------------|
            '-expression-'   

注:
  1. FIELD 修飾子と一緒に DomainClause およびParseClause を使用しないでください。
  2. RepeatClauses は、PREVIOUSSIBLING および NEXTSIBLING 修飾子とのみ使用できます。
  3. ParseClause 内の各副文節は、それぞれ 1 回だけしか使用できません。
  4. TYPENAMESPACE、および NAME エレメントが存在する場合は、鉄道図に示される順序で書く必要があります。

新しいメッセージ・フィールドは、指定した位置 (CREATE FIELD) または 既存の位置に対する相対位置 (CREATE... OF...) に配置されます。 新しいフィールドが作成されるのは、ターゲット・フィールド参照が、Environment、InputLocalEnvironment、OutputLocalEnvironment、OutputRoot、または OutputExceptionList など、変更可能なメッセージを指す場合だけです。

FIELD 文節を含める場合、ターゲットで指定されたフィールドにナビゲートされ (必要であれば、フィールドが作成される)、任意の VALUE 文節か FROM 文節が実行されます。 FIELD 文節を含めてもフィールドをまったく作成しないこともあり、確実に行われるのは、指定したフィールドの存在を確認することだけです。

ターゲット・フィールド参照の中で配列指標を使用するときは、特定フィールドの 1 つのインスタンスだけを作成できます。 したがって、SET ステートメントを書く場合、次のように書き始めます。
 SET OutputRoot.XMLNS.Message.Structure[2].Field = ...  

Structure の少なくとも 1 つのインスタンスが、メッセージの中に既に存在していなければなりません。 つまり、作成されるツリー内のフィールドだけが、ルートから、フィールド参照によって示されるフィールドへの、直接パス上にあるものです。

PREVIOUSSIBLING、NEXTSIBLING、FIRSTCHILD、または LASTCHILD 文節を含める場合、FIELD 文節とまったく同じ方法でターゲットで指定されたフィールドにナビゲートされます (必要であれば、フィールドが作成されます)。 次に新しいフィールドが作成され、指定した位置に置かれます (例えば、 PREVIOUSSIBLING または FIRSTCHILD として)。 これらの文節を持つ CREATE ステートメントでは必ず、新しいフィールドが作成され、指定した位置に置かれます。

同じターゲットを指定する 2 つの CREATE FIRSTCHILD OF ターゲット・ステートメントを使用する場合、2 番目のステートメントでは、新しいフィールドがターゲットの最初の子として作成され、以前に作成した最初の子がメッセージ・ツリーの右に置き換えられます (そのため、最初の子ではなくなります)。 同様に、CREATE LASTCHILD OF ターゲットはターゲット・フィールドにナビゲートし、新しいフィールドを右端の子として追加し、以前の最後の子を左に置き換えます。

CREATE PREVIOUSSIBLING OF ターゲットは、ターゲットで指定したフィールドのすぐ左にフィールドを作成します (そのため、ツリーの深さは変わりません)。同じように、CREATE NEXTSIBLING OF ターゲットは、ターゲットで指定したフィールドのすぐ右にフィールドを作成します。 PREVIOUSSIBLING または NEXTSIBLING の作成時に、REPEAT キーワードを使用して、新規フィールドのタイプおよび名前を、現行フィールドからコピーできます。

AS 文節:

AS 文節があれば、名前付き参照変数を、新規に作成されたフィールドを指すように移動します。 後ほどの処理でこの新規フィールドを含めたい場合は、この文節を使用します。

DOMAIN 文節:

DOMAIN 文節がある場合、新しいフィールドを指定したタイプの新しいパーサーに関連付けます。 この文節では、ルート・フィールド名 (例えば、XMLNS や MQRFH2) を指定します。 DOMAIN 文節が存在しても、指定される値がゼロ長の文字ストリングである場合、ターゲットで指定したフィールドを所有するパーサーと同じタイプの新しいパーサーが作成されます。 指定したドメイン名が CHARACTER データ・タイプではないか、値がヌルの場合、例外がスローされます。 FIELD 文節と一緒に DOMAIN 文節は指定しないでください。新規フィールドが作成されない可能性もあります。

REPEAT 文節:

REPEAT 文節を使用して、ターゲット・フィールドから新規フィールドのタイプおよび名前をコピーできます。 あるいは新規フィールドのタイプ、名前、および値を、次のようにすることができます。
  • 既存のフィールドからコピーする (FROM 文節を使用する)
  • 明示的に指定する (VALUES 文節を使用する)
  • ビット・ストリームを解析することによって定義する (PARSE 文節を使用する)
FROM および PARSE 文節による場合は、新しいフィールドの子も作成できます。

VALUES 文節:

VALUES 文節では、適切なデータ・タイプ (タイプでは INTEGER、名前では CHARACTER、そして値では任意の scalar 型) を戻す任意の式で、タイプ、名前、および値 (または、これらのサブセット) を指定できます。 タイプまたは名前に指定された値がヌルの場合には、例外がスローされます。

NAMES 文節:

NAMES 文節は、タイプが文字のヌル以外の値を戻すすべての式を取ります。 意味は、NAME および NAMESPACE 文節の有無によって、次のように左右されます。
NAMESPACE NAME エレメントに付けられる名前
いいえ いいえ エレメントは名前なし (名前フラグは自動的に設定されない)。
いいえ はい エレメントは、デフォルトのネーム・スペースで指定された名前。
はい いいえ エレメントは、指定されたネーム・スペースで指定された空の名前。
はい はい エレメントは、指定されたネーム・スペースで指定された指定名。

IDENTITY オペランドは、TYPE および NAME 文節の代わりに単一のパス・エレメントを使用します。この場合、パス・エレメントには (最大限で) タイプ、ネーム・スペース、名前、および索引が含まれます。 これらのエレメントは、作成されるエレメントのタイプ、ネーム・スペース、名前、および索引を指定するもので、すべてフィールド参照のトピックで説明された規則に従っています (ESQL フィールド参照の概要を参照)。 以下に例を示します。

	IDENTITY (XMLNS.attribute)Space1:Name1[42]

IDENTITY オペランドの使用法については、以下の「例」を参照してください。

FROM 文節:

FROM 文節の場合、新規フィールドのタイプ、名前、および値は、SourceFieldReference によって指し示したフィールドから取られます。 ターゲットの既存の子フィールドは切り離され (ただし、FIELD 文節の場合は、フィールドが既に存在している場合もあります)、次いで新しいフィールドに、ソース・フィールドの子フィールドが渡されます。

PARSE 文節:

PARSE 文節がある場合、提供されたビット・ストリームから新たに作成されたフィールドの下にサブツリーが作成されます。 このサブツリーをビルドするアルゴリズムは、パーサーごとに、指定されたオプションごとに異なります。 すべてのパーサーはモード RootBitStream をサポートしていますが、このモードのツリー作成アルゴリズムは入力ノードが使用するものと同じです。

パーサーの中には 2 番目のモード FolderBitStream をサポートしているものもあり、このモードは、同じモードを使用して ASBITSTREAM 関数 (ASBITSTREAM 関数を参照) によって作成されたビット・ストリームからサブツリーを生成します。

PARSE 文節を使用する場合は、BitStreamExpression に解析するビット・ストリームを含んでいるスカラー値を指定します。 メッセージ・ツリー・フィールド参照を使用する場合は、ビット・ストリームを含むスカラー値が含まれていることを確認してください。 InputRoot.XMLNSC などの既存のメッセージ本文フォルダーは、ビット・ストリームを含んでいないため、XMLNS フォルダーの直列化には使用できません。 ビット・ストリームを含むスカラー値以外の値を PARSE 文節の BitStreamExpression に渡すと、メッセージ・フローは BIP2906 エラー・メッセージを生成します。 むしろ、まず先に ASBITSTREAM 関数を呼び出して既存のメッセージ・ツリー・フォルダーを直列化する必要があります。 この ASBITSTREAM 関数の結果は、BitStreamExpression として PARSE 文節に渡すことができます。

次の例は、 XMLNSC フォルダーを直列化してから、その ASBITSTREAM の結果を PARSE 文節に使用する方法を示しています。
DECLARE inCCSID INT InputProperties.CodedCharSetId;                     
DECLARE inEncoding INT InputProperties.Encoding;                        
DECLARE inBitStream BLOB ASBITSTREAM(InputRoot.XMLNSC, inEncoding, inCCSID);
CREATE LASTCHILD OF OutputRoot DOMAIN('MRM')                            
       PARSE(inBitStream, inEncoding, inCCSID, 'DP3UK14002001',         
             'TestCase', 'XML1', options); 

PARSE ステートメントが処理されると、すべての PARSE 文節式が評価されます。 次の式のいずれかが適切なタイプのヌル以外の値を結果として渡さないと、例外がスローされます。

文節 タイプ デフォルト値
OPTIONS 整数 RootBitStream & ValidateNone
ENCODING 整数 0
CCSID 整数 0
SET CHARACTER ゼロ長ストリング
TYPE CHARACTER ゼロ長ストリング
FORMAT CHARACTER ゼロ長ストリング

TYPE 節の構文の詳細については、「メッセージ」プロパティーでのネーム・スペースの指定を参照してください。

OPTIONS 文節は、整数タイプの値を戻す式をすべて受け入れます。この文節は、与えられた定数のリストにあるオプション値を生成する場合にのみ有効です (なお、複数のオプションが必要な場合は、BITOR 関数を使用します)。

生成された値は整数になり、したがってその値は変数に保管したり、パラメーターとして関数に渡したり、CREATE ステートメントで直接使用することもできます。 グローバルに定義された定数のリストは次のとおりです。
        妥当性検査マスター・オプション...
        ValidateContentAndValue
        ValidateValue		-- ValidateContent と一緒に使用できる
        ValidateContent		-- ValidateValue と一緒に使用できる
        ValidateNone

       妥当性検査障害アクション・オプション...
        ValidateException
        ValidateExceptionList
        ValidateLocalError
        ValidateUserTrace

       妥当性検査タイミング・オプション...
        ValidateComplete
        ValidateImmediate
        ValidateDeferred
注:
  1. 妥当性検査オプションについての詳細は、妥当性検査プロパティーを参照してください。
  2. 妥当性検査タイミング・オプション構文解析タイミング・オプション に対応し、特に妥当性検査据え置き構文解析タイミング・オンデマンド に対応します。

C および Java™ の等価 API

以下のメソッドでは等価のオプションを使用できないことに注意してください。
  • Java プラグイン・ノード API MBElement メソッド createElementAsLastChildFromBitstream() および toBitstream()
  • C プラグイン・ノード API メソッド cniCreateElementAsLastChildFromBitstream() および cniElementAsBitstream

各グループから 1 つのオプションだけが指定できます。ValidateValue と ValidateContent は例外で、内容と値の妥当性検査を入手するために一緒に使用できます。 グループ内のオプションを指定しないと、太字のオプションが使用されます。

ENCODING 文節は、整数タイプの値を戻すすべての式を受け入れます。 しかし、次の提供された定数のリストからオプション値を生成することだけに意味があります。
       MQENC_INTEGER_NORMAL
       MQENC_INTEGER_REVERSED
       MQENC_DECIMAL_NORMAL
       MQENC_DECIMAL_REVERSED
       MQENC_FLOAT_IEEE_NORMAL
       MQENC_FLOAT_IEEE_REVERSED
       MQENC_FLOAT_S390

CCSID 文節に使用される値は、通常の番号付けの方式に従います。 例えば、1200 = UCS-2、1208 = UTF-8 のようになります。

文節が指定されていない場合、所定のデフォルト値が使用されます。 また、CCSID や Encoding のデフォルト値も、キュー・マネージャーの Encoding や CCSID の設定から取られた値なので、そのまま使用してください。

同様に、Message Set、Message Type、および Message Format の各オプションについても、多くのパーサーがメッセージ・セット、メッセージ・タイプ、およびメッセージ形式の情報を必要としない (したがって、有効な値であれば何でもよい) ため、それぞれのデフォルト値を使用すると便利です。

式が評価されると、その式の結果を使用してビット・ストリームが解析されます。
注: この関数には多数の文節があるため、名前付き文節ではなくコンマ区切りリストでパラメーターを提供する代替構文もサポートされています。 この場合、式は次の順番でなければなりません。
ENCODING -> CCSID -> SET -> TYPE -> FORMAT -> OPTIONS

リストはどこで切り捨ててもよく、値を提供しない文節にはまったく空の式を使用することもできます。

CREATE ステートメントの使用法の例

  1. 次の例は、指定したフィールドを作成する場合です。
    CREATE FIELD OutputRoot.XMLNS.Data;
  2. 次の例は、名前、タイプ、または値を指定しないで、ref1 の最初の子としてフィールドを作成する場合です。
    CREATE FIRSTCHILD OF ref1;
  3. 次の例は、指定したタイプ、名前、および値のフィールドを作成します。
    CREATE NEXTSIBLING OF ref1 TYPE NameValue NAME 'Price' VALUE 92.3;
  4. 次の例では、タイプと名前を指定し、値は指定しないでフィールドを作成します。そのフィールドは、動的参照 (ref1) の指す兄弟の前に追加されます。
    CREATE PREVIOUSSIBLING OF ref1 TYPE Name NAME 'Quantity';
  5. 次の例では、「Component」という名前のフィールドを作成し、それを指すように参照変数 targetCursor を移動させます。
    CREATE FIRSTCHILD OF targetCursor AS targetCursor NAME 'Component';
  6. 次の例は、参照変数 targetCursor によって示されるフィールドの右方兄弟として、そのフィールドと同じタイプおよび名前を持つ新規フィールドを作成します。 その後、ステートメントは新規フィールドを指すように targetCursor を移動させます。
    CREATE NEXTSIBLING OF targetCursor AS targetCursor REPEAT;
  7. 次の例は、PARSE 文節の使用法を示しています。
    DECLARE bodyBlob BLOB ASBITSTREAM(InputRoot.XMLNS, InputProperties.Encoding,
     InputProperties.CodedCharSetId);
    DECLARE creationPtr REFERENCE TO OutputRoot;
    CREATE LASTCHILD OF creationPtr DOMAIN('XMLNS') PARSE(bodyBlob,
                        InputProperties.Encoding,
     InputProperties.CodedCharSetId);

    この例を拡張して、フィールドかフォルダーの逐次化や構文解析を表示できます。

    DECLARE bodyBlob BLOB ASBITSTREAM(InputRoot.XMLNS.TestCase.myFolder,
                        InputProperties.Encoding,
    InputProperties.CodedCharSetId,",",",FolderBitStream);
    DECLARE creationPtr REFERENCE TO OutputRoot;
    CREATE LASTCHILD OF creationPtr DOMAIN('XMLNS') PARSE(bodyBlob,
                        InputProperties.Encoding,
    InputProperties.CodedCharSetId,",",",FolderBitStream);
  8. 次の例は、IDENTITY オペランドの使用法を示しています。
    CREATE FIELD OutputRoot.XMLNS.TestCase.Root IDENTITY (XML.ParserRoot)Root;
    CREATE FIELD OutputRoot.XMLNS.TestCase.Root.Attribute 
           IDENTITY (XML.Attribute)NSpace1:Attribute VALUE 'Attrib Value';
    CREATE LASTCHILD OF OutputRoot.XMLNS.TestCase.Root 
           IDENTITY (XML.Element)NSpace1:Element1[1] VALUE 'Element 1 Value';
    CREATE LASTCHILD OF OutputRoot.XMLNS.TestCase.Root 
           IDENTITY (XML.Element)NSpace1:Element1[2] VALUE 'Element 2 Value';

    次の出力メッセージが生成されます。

    <TestCase>
     <Root xmlns:NS1="NSpace1" NS1:Attribute="Attrib Value">
      <NS1:Element1>Element 1 Value</NS1:Element1>
      <NS1:Element1>Element 2 Value</NS1:Element1>
     </Root>
    </TestCase>
  9. 以下の例は、DOMAIN 文節を使って、異種パーサー・コピーが行われた場合に XMLNS パーサー固有の情報が失われないようにする方法を示しています。
    DECLARE bodyBlob BLOB ASBITSTREAM(InputRoot.XMLNS, InputProperties.Encoding,
    InputProperties.CodedCharSetId);
    CREATE FIELD Environment.Variables.myXMLTree;
    DECLARE creationPtr REFERENCE TO Environment.Variables.myXMLTree;
    CREATE FIRSTCHILD OF creationPtr DOMAIN('XMLNS') PARSE(bodyBlob, 
                        InputProperties.Encoding, 
    InputProperties.CodedCharSetId);

CREATE ステートメントの例

この例では、サンプル ESQL と入力メッセージが示されています。この例の最後にこれらの出力メッセージが一緒に生成されます。

CREATE COMPUTE MODULE CreateStatement_Compute
	CREATE FUNCTION Main() RETURNS BOOLEAN
	BEGIN
	  CALL CopyMessageHeaders();

        CREATE FIELD OutputRoot.XMLNS.TestCase.description TYPE NameValue VALUE 'This is my TestCase' ;
        DECLARE cursor REFERENCE TO OutputRoot.XMLNS.TestCase;
        CREATE FIRSTCHILD OF cursor Domain('XMLNS') 
               NAME 'Identifier' VALUE InputRoot.XMLNS.TestCase.Identifier;
        CREATE LASTCHILD  OF cursor Domain('XMLNS') NAME 'Sport' VALUE InputRoot.XMLNS.TestCase.Sport;
        CREATE LASTCHILD  OF cursor Domain('XMLNS') NAME 'Date' VALUE InputRoot.XMLNS.TestCase.Date;
        CREATE LASTCHILD  OF cursor Domain('XMLNS') NAME 'Type' VALUE InputRoot.XMLNS.TestCase.Type;
        CREATE FIELD         cursor.Division[1].Number TYPE NameValue VALUE 'Premiership';
        CREATE FIELD         cursor.Division[1].Result[1].Number TYPE NameValue VALUE  '1' ;
        CREATE FIELD         cursor.Division[1].Result[1].Home TYPE Name;
        CREATE LASTCHILD OF  cursor.Division[1].Result[1].Home NAME 'Team' VALUE 'Liverpool' ;
        CREATE LASTCHILD OF  cursor.Division[1].Result[1].Home NAME 'Score' VALUE '4';
        CREATE FIELD         cursor.Division[1].Result[1].Away TYPE Name;
        CREATE LASTCHILD OF  cursor.Division[1].Result[1].Away NAME 'Team' VALUE 'Everton';
        CREATE LASTCHILD OF  cursor.Division[1].Result[1].Away NAME 'Score' VALUE '0';
        CREATE FIELD         cursor.Division[1].Result[2].Number TYPE NameValue VALUE  '2';
        CREATE FIELD         cursor.Division[1].Result[2].Home TYPE Name;
        CREATE LASTCHILD OF  cursor.Division[1].Result[2].Home NAME 'Team' VALUE 'Manchester United';
        CREATE LASTCHILD OF  cursor.Division[1].Result[2].Home NAME 'Score' VALUE '2';
        CREATE FIELD         cursor.Division[1].Result[2].Away TYPE Name;
        CREATE LASTCHILD OF  cursor.Division[1].Result[2].Away NAME 'Team' VALUE 'Arsenal';
        CREATE LASTCHILD OF  cursor.Division[1].Result[2].Away NAME 'Score' VALUE '3';
        CREATE FIELD         cursor.Division[2].Number TYPE NameValue  VALUE '2';
        CREATE FIELD         cursor.Division[2].Result[1].Number TYPE NameValue  VALUE  '1';
        CREATE FIELD         cursor.Division[2].Result[1].Home TYPE Name;
        CREATE LASTCHILD OF  cursor.Division[2].Result[1].Home NAME 'Team' VALUE 'Port Vale';
        CREATE LASTCHILD OF  cursor.Division[2].Result[1].Home NAME 'Score' VALUE '9' ;
        CREATE FIELD         cursor.Division[2].Result[1].Away TYPE Name;
        CREATE LASTCHILD OF  cursor.Division[2].Result[1].Away NAME 'Team' VALUE 'Brentford';
        CREATE LASTCHILD OF  cursor.Division[2].Result[1].Away NAME 'Score' VALUE '5';

	END;

	CREATE PROCEDURE CopyMessageHeaders() BEGIN
		DECLARE I INTEGER 1;
		DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
		WHILE I < J DO
			SET OutputRoot.*[I] = InputRoot.*[I];
			SET I = I + 1;
		END WHILE;
	END;

END MODULE;
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:47:20


参照トピック参照トピック | バージョン 8.0.0.5 | ak04950_