このドキュメントでは、Natural のデータ操作言語(DML)を使用して Tamino データベースにアクセスするときのさまざまな面について説明します。
次のトピックについて説明します。
Tamino で作業するための Natural の設定方法の詳細については、『データベース管理システムインターフェイス』ドキュメントの「Natural for Tamino」を参照してください。
Tamino では、構造化されたデータ指向の XML 文書が doctype と呼ばれるコンテナに保存されます。 doctype は論理的なグループにまとめられ、このグループはコレクションと呼ばれます。 コレクションは、データの物理的なコンテナである Tamino データベースに保存されます。
Tamino で保存でき、Natural for Tamino でアクセスできるデータは、Tamino XML スキーマで定義する必要があります。
このセクションでは、Tamino XML スキーマ言語、Natural DDMs、およびビューの定義の基本概念について、およびこれらと Natural for Tamino との対話方法について説明します。
次のトピックについて説明します。
Tamino XML スキーマ言語は、XML 文書の構造を持つデータタイプ指向記述を定義するために使用されます。 Tamino では、1 つのコレクション内で同じルートエレメントと同じ構造を持つ XML 文書のコンテナが doctype によって表現されます。
Tamino におけるコレクションとは、さまざまな doctype の集まりが入るコンテナであるため、同じものに属する doctype の論理的なグループとみなすことができます。
Tamino XML スキーマ定義では、doctype をそれが含まれるコレクションとともに定義します。 1 つの Tamino XML スキーマで複数の doctype を定義でき、複数のコレクションに doctype を定義することもできます。
Tamino XML スキーマ言語の詳細については、Tamino のドキュメントを参照してください。
Natural から Tamino データベースにアクセスできるようにするには、Tamino の doctype と Natural のデータベース構造との間に論理的な接続を確立する必要があります。 このような論理接続は、データ定義モジュール(DDM)と呼ばれます。
Tamino データベースから生成される Natural DDM は、1 つのスキーマに定義された 1 つの doctype の表現です。 DDM には、対応する Tamino XML スキーマで定義されているように、各データフィールドのタイプに関する情報、および必要なすべての構造情報が含まれています。 新しい DDM を生成するには、指定されたコレクションで使用可能なすべての doctype のリストから doctype を選択する必要があります。 1 つのコレクションが 1 つの Natural データベース ID(DBID)に対応付けられるため、他のコレクションの doctype にアクセスするには 2 つ目の DBID を使用する必要があります。
Tamino XML スキーマでは、Natural のデータ定義とはかなり異なる方法でデータとデータ構造が記述されます。 このため、Natural データフォーマットを Tamino XML スキーマデータタイプから生成するために、専用のマッピングが導入されています。
DDM は Natural DDM エディタを使用して定義します。 Tamino XML スキーマのマッピングの詳細については、『エディタ』ドキュメントの「DDM エディタ」セクションの「Tamino のデータ変換」を参照してください。
DDM に定義されるフィールド属性については、『エディタ』ドキュメントの「DDM エディタ」セクションの「DDM の編集 - フィールド属性定義」を参照してください。
Tamino XML スキーマに maxOccurs
の値が 1 よりも大きい XML 要素を定義すると、この要素はその値が示す頻度で発生する可能性があります。 このような指定は、Natural スタティック配列定義または Natural X-array 定義のいずれかにマッピングされます。 処理する
XML 要素のタイプに応じて、次のような状況が起きる可能性があります。
XML 要素が complexContent
を持つ complexType
である(要素に他の要素が含まれる)場合、生成される対応する Natural グループはインデックス付きグループになります。
XML 要素が simpleType
である(要素にデータのみが含まれる)場合、または simpleContent
を持つ complexType
である(要素にはデータと属性のみが含まれ、他の要素は含まれない)場合は、生成される Natural データフィールドは配列になります。
maxOccurs
定義を Natural 配列にマッピングする詳細については、『エディタ』ドキュメントの「DDM エディタ」セクションの「Tamino のデータ変換」を参照してください。 配列の境界または配列の種類(スタティック配列または X-array)は、通常と同様に、対応するビュー定義で変更できます。
次に示すのは、Tamino XML スキーマ定義から生成された EMPLOYEES DDM の例です。
このスキーマは、Natural デモアプリケーション SYSEXINS などを使用して定義できます。
DB: 00250 FILE: 00001 - EMPLOYEES-XML TYPE: XML COLLECTION: NATDemoData SCHEMA: Employee DOCTYPE: Employee NAMESPACE-PREFIX: xs NAMESPACE-URI: http://www.w3.org/2001/XMLSchema T L Name F Leng D Remark - -- -------------------------------- - ---------- - ----------- G 1 EMPLOYEE FLAGS=MULT_REQUIRED,MULT_ONCE TAG=Employee XPATH=/Employee G 2 GROUP$1 FLAGS=GROUP_ATTRIBUTES 3 PERSONNEL-ID A 8 D xs:string FLAGS=ATTR_REQUIRED TAG=@Personnel-ID XPATH=/Employee/@Personnel-ID G 2 GROUP$2 FLAGS=GROUP_SEQUENCE,MULT_REQUIRED,MULT_ONCE G 3 FULL-NAME FLAGS=MULT_OPTIONAL TAG=Full-Name XPATH=/Employee/Full-Name G 4 GROUP$3 FLAGS=GROUP_SEQUENCE,MULT_REQUIRED,MULT_ONCE 5 FIRST-NAME A 20 D xs:string FLAGS=MULT_OPTIONAL TAG=First-Name XPATH=/Employee/Full-Name/First-Name 5 MIDDLE-NAME A 20 D xs:string FLAGS=MULT_OPTIONAL TAG=Middle-Name XPATH=/Employee/Full-Name/Middle-Name 5 MIDDLE-I A 20 D xs:string FLAGS=MULT_OPTIONAL TAG=Middle-I XPATH=/Employee/Full-Name/Middle-I 5 NAME A 20 D xs:string FLAGS=MULT_OPTIONAL TAG=Name XPATH=/Employee/Full-Name/Name . . . 3 LANG A 3 xs:string FLAGS=ARRAY,MULT_OPTIONAL OCC=1:4 TAG=Lang XPATH=/Employee/Lang
Natural プログラム内で Tamino データベースを使用して作業するには、必要な DDM のフィールドを Natural view-definition で指定する必要があります。DEFINE DATA
ステートメントを参照してください。 一般に、ビューとは DDM で定義されているような完全なデータ構造の特殊なサブセットです。
Tamino XML スキーマ -> Natural for Tamino DDM -> Natural view-definition
ビューを XML オブジェクトの保存に使用する場合は、対応する Tamino XML スキーマ定義に従って、有効な文書を生成するために必要なすべてのフィールドがビューに含まれている必要があります。
ビューフィールドの 1 つがスタティック配列である EMPLOYEES-XML DDM のビューは、例えば次のようになります。
DEFINE DATA LOCAL 01 VW VIEW OF EMPLOYEES-XML 02 NAME 02 CITY 02 LANG (1:4) END-DEFINE
Tamino にアクセスするために提供されている Natural DML ステートメントは、さらに次の 2 つのカテゴリに分類できます。
純粋な検索ステートメント
データベース更新ステートメント
Natural システム変数 *ISN
は、Tamino ino:id
上でマッピングされます。
次の Natural ステートメントをデータベース検索に使用できます。
このステートメントは、指定した検索条件に一致するレコードをデータベースから選択するために使用します。
このステートメントは、一意の ID を使ってデータベースから 1 つの特別なレコードを選択するために使用します。
このステートメントは、指定した順番でデータベースからレコードの範囲を選択するために使用します。
Tamino のアクセスでは、検索ステートメントの使用可能なオプションおよび節のすべてを使用できるわけではありません。 詳細については、『ステートメント』ドキュメントの該当するセクションを参照してください。
すべてのステートメントは、Tamino _xquery
コマンド動詞で内部的に実現されます。 ステートメントの各節は、対応する Tamino XQuery 式にマッピングされます。例えば、検索条件は Tamino XQuery 比較式にマッピングされ、順番の指定はソート方向を指定した Tamino
XQuery 順番決定式にマッピングされます。
FIND
ステートメントと READ
ステートメントの結果セットはループの最初に決定され、ループ全体を通じて変更されません。
次の例では、1 つのビューフィールドが配列になっている Tamino データベースから一連の従業員レコードを読み取ります。
* READ 5 RECORDS DESCENDING CONTAINING A * STATIC ARRAY IN THE VIEW DEFINE DATA LOCAL 01 VW VIEW OF EMPLOYEES-TAMINO 02 NAME 02 CITY 02 LANG (1:4) END-DEFINE * READ(5) VW DESCENDING BY NAME = 'MAYER' DISPLAY NAME CITY LANG(*) END-READ * END
Natural for Tamino を使用するために、次のデータベース更新ステートメントが提供されます。
このステートメントは、新しい XML 文書をデータベースに挿入するために使用します。
このステートメントは、データベースから文書を削除するために使用します。 DELETE
ステートメントでは位置決め削除が実装されます。
各ステートメントの詳細については、『ステートメント』ドキュメントの該当するセクションを参照してください。
DELETE
ステートメントは Tamino _delete
コマンド動詞で現在の ino:id
を使用して内部的に実現され、STORE
ステートメントは _process
コマンド動詞で実装されます。
次のプログラム例では、何らかのデータを持つ新しい従業員レコードがデータベースに保存されます。
* STORE NEW EMPLOYEE DEFINE DATA LOCAL 01 VW VIEW OF EMPLOYEES-TAMINO 02 PERSONNEL-ID 02 NAME 02 CITY 02 LANG (1:3) END-DEFINE * * FILL VIEW PERSONNEL-ID := '1230815' NAME := 'KENT' CITY := 'ROME' LANG(1) := 'ENG' LANG(2) := 'GER' LANG(3) := 'SPA' * * STORE VIEW STORE RECORD IN VW * COMMIT * END
Tamino XML スキーマで doctype のデータ構造を必須と定義した場合は、STORE
ステートメントが発行される前にこれらのデータ構造もビューに含める必要があります。含めないと Tamino エラーが発生します。
Natural では、トランザクションに基づいてデータベース更新処理が実行されます。つまり、すべてのデータベース更新要求は論理トランザクション単位で処理されます。 論理トランザクションは、データベースに含まれている情報が論理的に一貫性を持っていることを確実にするために、完全に実行されなければならない最小の業務ユニットです。業務ユニットの定義はユーザーが行います。
論理トランザクションは、データベース内の 1 つ以上の doctype に関係する 1 つ以上の更新ステートメント(DELETE
または STORE
)で構成される場合があります。 また、論理トランザクションは、複数の Natural プログラムにまたがることもできます。
論理トランザクションは、データベース更新ステートメントが発行されたときに開始します。 Natural ではこの処理が自動的に行われます。 例えば、FIND
ループに DELETE
ステートメントが含まれている場合です。 論理トランザクションの終了は、プログラムの END TRANSACTION
ステートメントによって決まります。 このステートメントによって、トランザクション内のすべての更新が正常に適用されたことが確実になります。
Natural の標準エラーメッセージに加え、サブエラーコードを使って追加情報を提供する 2 つの特殊なエラーコードがあります。
NAT8400 | Taminoエラー ... が発生しました。 |
Explanation |
この特殊エラーでは、追加のサブコード番号が表示されます。 この番号は Tamino のエラーメッセージを表します。 Tamino の『メッセージおよびコード』ドキュメントを参照してください。 ライブラリ SYSEXT のユーザー出口 USR6007 は、NAT8400 エラーが発生した場合に診断情報を得るために提供されています。 使い方の例を次に示します。 DEFINE DATA LOCAL 01 VW VIEW OF EMPLOYEES-TAMINO 02 NAME 02 CITY 01 TAMINO_PARMS 02 TAMINO_ERROR_NUM (I4) /* Error number of Tamino error 02 TAMINO_ERROR_TEXT (A70) /* Tamino error text 02 TAMINO_ERROR_LINE (A253) /* Tamino error message line END-DEFINE * NAME := 'MEYER' CITY := 'BOSTON' STORE VW * ON ERROR IF *ERROR EQ 8400 /* in case of error 8400 obtain diagnostic information CALLNAT 'USR6007N' TAMINO_PARMS PRINT 'Error 8400 occurred:' PRINT 'Error Number:' TAMINO_ERROR_NUM PRINT 'Error Text :' TAMINO_ERROR_TEXT PRINT 'Error Line :' TAMINO_ERROR_LINE END-IF END-ERROR * END |
NAT8411 | HTTP 要求はレスポンスコード ... で失敗しました。 |
Explanation |
HTTP サーバーからのエラーコードは追加情報として提供されます。 |
次に示すのは、Natural for Tamino と SQL データベースとのさらに高度な対話の例です。Tamino データベースからデータを検索し、SQL データベースの適切なテーブルの対応する行を挿入または更新します。
* * TAMINO DB --> SQL RDBMS EXAMPLE * DEFINE DATA LOCAL * DEFINE VIEW FOR TAMINO 01 VW-TAMINO VIEW OF EMPLOYEES-TAMINO 02 PERSONNEL-ID 02 NAME 02 CITY * DEFINE VIEW FOR SQL DATABASE 01 VW-SQL VIEW OF EMPLOYEES-SQL 02 PERSONNEL_ID 02 NAME 02 CITY END-DEFINE * * OPEN A TAMINO LOGICAL READ LOOP * TAMINO. READ VW-TAMINO BY NAME * * SEARCH RECORD IN SQL DATABASE AND * INSERT A NEW RECORD IF NOT FOUND OR * UPDATE THE EXISTING ONE WITH THE DATA * FROM TAMINO DB SQL. FIND(1) VW-SQL WITH PERSONNEL_ID = PERSONNEL-ID (TAMINO.) IF NO RECORDS FOUND PERSONNEL_ID := PERSONNEL-ID (TAMINO.) NAME := NAME (TAMINO.) CITY := CITY (TAMINO.) STORE VW-SQL ESCAPE BOTTOM END-NOREC PERSONNEL_ID := PERSONNEL-ID (TAMINO.) NAME := NAME (TAMINO.) CITY := CITY (TAMINO.) UPDATE END-FIND * END-READ * END TRANSACTION * END
Natural for Tamino DDM を生成するスキーマの作成に使用できる Tamino XML スキーマ言語の適用範囲に関して次のような制限があります。
Natural for Tamino でサポートされるのは、Tamino XML スキーマ言語のコンストラクタと属性のみです。詳細については『エディタ』ドキュメントの「DDM エディタ」セクションの「Tamino XML スキーマコンストラクタ」を参照してください。 その他のコンストラクタ(xs:any
や xs:anyAttribute
など)は、Natural for Tamino とともに使おうとしても Tamino XML スキーマに適用できません。
xs:import
の機能は Natural for Tamino ではサポートされません。 つまり、外部スキーマコンポーネントを、Natural との使用に適した Tamino XML スキーマ内で参照することはできません。 すなわち、Tamino XML スキーマでの
doctype 定義を Natural for Tamino とともに使用する場合は、この Tamino XML スキーマ自体の内部ですべての参照を解決する必要があります。
コンストラクタ xs:complexType
の属性 mixed
は、デフォルト値である "false" でのみサポートされます。 Natural for Tamino では、内容が混在する文書定義(mixed="true"
を指定して設定するなど)はサポートされません。 mixed="true"
を使用すると、DDM の生成中にエラーが発生します。
Natural for Tamino DDM でのネスト構造のレベルは 99 までに制限されています。 新しい DDM レベルは、次のいずれかのコンストラクタが Tamino XML スキーマで発生するたびに生成されます。
xs:element
xs:attribute
xs:choice
xs:all
xs:sequence
Tamino XML スキーマで再帰的に定義される構造を Natural for Tamino とともに使用することはできません。
Tamino XML スキーマ言語コンストラクタ xs:choice
は、すべての選択肢が含まれる Natural グループにマッピングされます。 特定の 1 つの選択に処理を制限するには、必要な選択を示した適切なビューを作成する必要があります。
Natural for Tamino では、"クローズドコンテンツの整合性チェックモード" のみがサポートされます。 "オープンコンテンツの整合性モード" のある Tamino XML スキーマは、Natural for Tamino とともに使用できません。
Tamino XML スキーマ言語コンストラクタの xs:choice
、xs:sequence
、および xs:all
について、属性 maxOccurs
の値が 1 よりも大きくなると Natural データ構造では処理できません。 したがって、1 よりも大きい値では DDM 生成中に常にエラーが発生します。
Natural for Tamino では、W3C スキーマのサブセットとして Tamino XML スキーマで定義された Tamino オブジェクトのみを処理できます。 Natural for Tamino では、特に XML 以外のデータ(tsd:nonXML
)やスキーマが定義されていないインスタンス(ino:etc
)はサポートされません。