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

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

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

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


必要条件

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

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

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 エディタ」、「DDM エディタの使用」「DDM サービス」、「DDM エディタの使用」セクションを参照してください。

Tamino から生成した DDM での配列

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

  • XML 要素が complexType を持つ complexContent である(要素に他の要素が含まれる)場合、生成される対応する Natural グループはインデックス付きグループになります。

  • XML 要素が simpleType である(要素にデータのみが含まれる)場合、または simpleContent を持つ complexType である(要素にはデータと属性のみが含まれ、他の要素は含まれない)場合は、生成される Natural データフィールドは配列になります。

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

DDM の例

次に示すのは、Tamino XML スキーマ定義から生成された EMPLOYEES DDM の例です。

このスキーマは、Natural デモアプリケーション SYSEXDB などを使用して定義できます。

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 ステートメント

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

  • 純粋な検索ステートメント

  • データベース更新ステートメント

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

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

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

  • FIND

    このステートメントは、指定した検索条件に一致するレコードをデータベースから選択するために使用します。

  • GET

    このステートメントは、一意の ID を使ってデータベースから 1 つの特別なレコードを選択するために使用します。

  • READ

    このステートメントは、指定した順番でデータベースからレコードの範囲を選択するために使用します。

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 を使用するために、次のデータベース更新ステートメントが提供されます。

  • STORE

    このステートメントは、新しい XML 文書をデータベースに挿入するために使用します。

  • DELETE

    このステートメントは、データベースから文書を削除するために使用します。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 for Tamino の論理トランザクション処理

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

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

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

Natural for Tamino のエラー処理

Natural の標準エラーメッセージに加え、サブエラーコードを使って追加情報を提供する 2 つの特殊なエラーコードがあります。

エラーメッセージ NAT8400

NAT8400 Tamino error ... occurred

この特殊エラーでは、追加のサブコード番号が表示されます。この番号は 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

NAT8411 HTTP request failed with response code...

HTTP サーバーからのエラーコードは追加情報として提供されます。「REQUEST DOCUMENT」ステートメント、「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

Natural for Tamino の制限事項

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

  • Natural for Tamino でサポートされるのは、Tamino XML スキーマ言語のコンストラクタと属性のみです詳細については『エディタ』ドキュメントの「DDM サービス」セクションの「Tamino XML スキーマコンストラクタ」を参照してください。その他のコンストラクタ(xs:anyxs: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:choicexs:sequence、および xs:all について、属性 maxOccurs の値が 1 よりも大きくなると Natural データ構造では処理できません。したがって、1 よりも大きい値では DDM 生成中に常にエラーが発生します。

  • Natural for Tamino では、W3C スキーマのサブセットとして Tamino XML スキーマで定義された Tamino オブジェクトのみを処理できます。Natural for Tamino では、特に XML 以外のデータ(tsd:nonXML)やスキーマが定義されていないインスタンス(ino:etc)はサポートされません。