バージョン 6.3.3
 —  プログラミングガイド  —

Tamino データベースのデータへのアクセス

このドキュメントでは、Natural のデータ操作言語(DML)を使用して Tamino データベースにアクセスするときのさまざまな面について説明します。

次のトピックについて説明します。

Tamino で作業するための Natural の設定方法の詳細については、『データベース管理システムインターフェイス』ドキュメントの「Natural for Tamino」を参照してください。


必要条件

Tamino では、構造化されたデータ指向の XML 文書が doctype と呼ばれるコンテナに保存されます。 doctype は論理的なグループにまとめられ、このグループはコレクションと呼ばれます。 コレクションは、データの物理的なコンテナである Tamino データベースに保存されます。

Tamino で保存でき、Natural for Tamino でアクセスできるデータは、Tamino XML スキーマで定義する必要があります。

Top of page

Natural for Tamino で使用する DDM とビューの定義

このセクションでは、Tamino XML スキーマ言語、Natural DDMs、およびビューの定義の基本概念について、およびこれらと Natural for Tamino との対話方法について説明します。

次のトピックについて説明します。

Tamino XML スキーマ言語について

Tamino XML スキーマ言語は、XML 文書の構造を持つデータタイプ指向記述を定義するために使用されます。 Tamino では、1 つのコレクション内で同じルートエレメントと同じ構造を持つ XML 文書のコンテナが doctype によって表現されます。

Tamino におけるコレクションとは、さまざまな doctype の集まりが入るコンテナであるため、同じものに属する doctype の論理的なグループとみなすことができます。

Tamino XML スキーマ定義では、doctype をそれが含まれるコレクションとともに定義します。 1 つの Tamino XML スキーマで複数の doctype を定義でき、複数のコレクションに doctype を定義することもできます。

Tamino XML スキーマ言語の詳細については、Tamino のドキュメントを参照してください。

Tamino から生成した DDM

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 から生成した DDM での配列

Tamino XML スキーマに maxOccurs の値が 1 よりも大きい XML 要素を定義すると、この要素はその値が示す頻度で発生する可能性があります。 このような指定は、Natural スタティック配列定義または Natural X-array 定義のいずれかにマッピングされます。 処理する XML 要素のタイプに応じて、次のような状況が起きる可能性があります。

maxOccurs 定義を Natural 配列にマッピングする詳細については、『エディタ』ドキュメントの「DDM エディタ」セクションの「Tamino のデータ変換」を参照してください。 配列の境界または配列の種類(スタティック配列または X-array)は、通常と同様に、対応するビュー定義で変更できます。

DDM の例

次に示すのは、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

Top of page

Tamino データベースにアクセスするための Natural ステートメント

Tamino にアクセスするために提供されている Natural DML ステートメントは、さらに次の 2 つのカテゴリに分類できます。

Natural システム変数 *ISN は、Tamino ino:id 上でマッピングされます。

Natural for Tamino の検索ステートメント

次の Natural ステートメントをデータベース検索に使用できます。

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 のデータベース更新ステートメント

Natural for Tamino を使用するために、次のデータベース更新ステートメントが提供されます。

各ステートメントの詳細については、『ステートメント』ドキュメントの該当するセクションを参照してください。

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 for Tamino の論理トランザクション処理

Natural では、トランザクションに基づいてデータベース更新処理が実行されます。つまり、すべてのデータベース更新要求は論理トランザクション単位で処理されます。 論理トランザクションは、データベースに含まれている情報が論理的に一貫性を持っていることを確実にするために、完全に実行されなければならない最小の業務ユニットです。業務ユニットの定義はユーザーが行います。

論理トランザクションは、データベース内の 1 つ以上の doctype に関係する 1 つ以上の更新ステートメント(DELETE または STORE)で構成される場合があります。 また、論理トランザクションは、複数の Natural プログラムにまたがることもできます。

論理トランザクションは、データベース更新ステートメントが発行されたときに開始します。 Natural ではこの処理が自動的に行われます。 例えば、FIND ループに DELETE ステートメントが含まれている場合です。 論理トランザクションの終了は、プログラムの END TRANSACTION ステートメントによって決まります。 このステートメントによって、トランザクション内のすべての更新が正常に適用されたことが確実になります。

Natural for Tamino のエラー処理

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 サーバーからのエラーコードは追加情報として提供されます。 REQUEST DOCUMENT ステートメントの「レスポンス番号の概要 - HTTP/HTTP 要求」も参照してください。


Natural for Tamino と SQL データベースの対話の例

次に示すのは、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

Top of page

Natural for Tamino の制限事項

Natural for Tamino DDM を生成するスキーマの作成に使用できる Tamino XML スキーマ言語の適用範囲に関して次のような制限があります。

Top of page