Oracle Application Server Integration InterConnect ユーザーズ・ガイド 10g リリース2 (10.1.2) B15751-02 |
|
この章では、XMLスキーマ定義(XSD)の概要とInterConnectによるXSDのサポートについて説明します。項目は次のとおりです。
XSDは、XML文書の構造の定義です。 XML文書に表示できる要素と属性、およびこれらの要素と属性に使用できるデータの型が指定されます。 この情報を使用して、XML文書の各要素または属性が記述に従っていることが検証されます。
Document Type Definition(DTD)を上回るXSDのメリットは、次のとおりです。
XMLスキーマでは、要素とその構造が定義されます。 また、属性とそのデータ型も定義されます。 要素の構造は、その要素がリーフ要素であるか親要素であるかに応じてsimpleType
またはcomplexType
です。
XSDの要素の型は、simpleType
、complexType
またはanyType
です。 simpleType
型の要素にはテキストのみが含まれます。 属性と要素を持つことはできません。 complexType
型の要素は、テキスト、要素および属性を含むことができます。 complexType
型の要素は、下位のすべての要素と属性の親です。 XSDのany
要素は、XMLインスタンス内の対応する位置に任意の整形式XMLが許容されることを指定します。
InterConnectでは、simpleType
型は親要素について作成されたオブジェクトのメンバーとして格納されます。 このメンバーのデータ型は、XSDのデータ型に対応するInterConnectのデータ型です。 たとえば、Address1
は2つのsimpleType
要素City
およびState
を含むcomplexType
で、myAddress
はAddress1 complexType
の要素であるとします。 InterConnectでは、Address1
はオブジェクトとして格納され、City
およびState
はInterConnectのStringデータ型として格納されます。myaddress
はInterConnectのReference
データ型として格納されます。このデータ型は、complexType
のオブジェクトであるAddress1
の参照を含みます。 any
要素の名前は_any_
形式で格納されます。 any
要素は実行時に文字列として処理されます。
要素にはローカル要素とグローバル要素があります。 XMLスキーマの直接の子として宣言された要素はグローバル要素と呼ばれ、スキーマ全体で使用できます。 複合型定義内で宣言された要素は、ローカル要素です。 そのため、この種の要素をスキーマ内の他の場所で使用することはできません。 XSDをインポートすると、InterConnectには、このXMLスキーマの全グローバル要素と、インポートされたか含まれていたXMLスキーマがすべて表示されます。 これらのグローバル要素は、名前空間に基づいてグループ化されます。 名前空間を参照してグローバル要素を選択できます。 このグローバル要素は、アプリケーション・ビューまたは共通ビューを定義する際にメッセージのルートとして機能します。 また、アプリケーション・データ型または共通データ型を定義する際には、生成される型のルートとして機能します。
ある要素をルート要素として選択すると、選択した要素の構造の最初から最後までの要素がすべてリポジトリに格納されます。 要素には、minOccurs
やmaxOccurs
などの制約を使用できます。 要素のmaxOccurs
制約の値が1よりも大きければ、その要素は配列として格納されます。
XSDの属性は常にsimpleType
型です。 属性定義の構文は、次のとおりです。
<xs:attribute name="myattribute" type="string"/>
この例で、myattribute
はstring
データ型の属性です。 属性には固定値またはデフォルト値を指定できます。 InterConnectでは、属性の固定値またはデフォルト値が格納されます。 属性は、親要素について作成されたオブジェクトのメンバーとして格納されます。 この属性のデータ型は、XSDのベース・データ型に対応するInterConnectのデータ型です。
属性グループでは、属性名と属性宣言セットとの関連付けが定義されます。 属性グループはcomplexType
定義内で再利用できます。 属性グループ定義の構文は、次のとおりです。
<xsd:attributeGroup name="Address"> <xsd:attribute name="Street1" type="xs:string"/> <xsd:attribute name="Street2" type="xs:string"/> <xsd:attribute name="City" type="xs:string"/> <xsd:attribute name="State" type="xs:string"/> </xsd:attributeGroup>
この例で、Address
は、Street1
、Street2
、City
およびState
などの属性を含む属性グループの名前です。 InterConnectでは、属性定義を参照側complexType
にコピーすることで属性グループの参照が解決されます。
any
要素と同様に、anyAttribute
はXMLインスタンス内の対応する場所で任意の属性を使用できることを指定します。 InterConnectでは、anyAttribute
は_anyAttribute_
形式の名前を持つ属性として格納されます。 この属性の型はStringとして格納されます。
不明な情報や適用できない情報を要素で明示的に表すことが必要になる場合があります。 たとえば、リレーショナル・データベースとの間でやりとりされるNULL値を要素で表す必要があるとします。 その場合は、要素のnillable
属性をXMLスキーマ定義内でtrue
として宣言できます。 InterConnectでは、nillable
属性値はXSDのインポート中にリポジトリに格納されます。
XSD型定義は、新規のsimpleType
データ型またはcomplexType
データ型の作成に使用されます。 新しい定義を作成する際にベースとして使用される型定義を、ベース型定義と呼びます。 名前付きまたは無名のsimpleType
型またはcomplexType
型を使用できます。 名前付きのsimpleType
またはcomplexType
は、常にグローバルに定義されます。 名前付きのsimpleType
またはcomplexType
を定義し、スキーマ文書内で要素の型として参照できます。 無名simpleType
型または無名complexType
型には、名前はありません。 そのため、この種のsimpleType
型またはcomplexType
型は参照できません。
XMLスキーマには複数の組込みデータ型があります。 simpleType
型は、XMLスキーマ組込みデータ型から導出されます。 たとえば、値の範囲10000〜99999を持つmyInt
という新規のsimpleType
型を作成するには、myInt
の定義のベースとして組込みデータ型Integer
を使用できます。
各XMLスキーマ組込みデータ型は、InterConnectのデータ型にマップされます。 simpleType
型の要素を持つXSDをインポートすると、InterConnectでは、この要素のマップ先となるInterConnectデータ型が識別されます。 また、要素の元のXSDデータ型が格納されます。 たとえば、XSDのdateTime
データ型の要素を含むXSDをインポートすると、InterConnectのDate
データ型として格納されます。 また、要素のXSDデータ型であるdateTime
データ型とその形式もリポジトリに格納されます。 このパターンは、実行時にDate
オブジェクトから日付文字列への変換に使用されます。
表10-1は、各種XSDデータ型とInterConnectのInterConnectデータ型とのマッピングを示しています。
complexType
型定義には、一連の要素宣言、要素参照および属性宣言が含まれます。最初にスキーマ内でcomplexType
型を定義してから、このcomplexType
型の要素と属性を定義します。
InterConnectでは、complexType
型はオブジェクトとして格納されます。 名前付きまたは無名のcomplexType
型を使用できます。 インポートされたXMLスキーマが無名complexType
型を持つ場合、InterConnectでは要素名に基づいてオブジェクト名が生成されます。 このオブジェクトの型はanonymous
complexType
です。 たとえば、anonymous
complexType
型の要素MyElement
を含むXSDをインポートすると、InterConnectではMyElement_CT
などの型名を持つ要素のオブジェクトが生成され、格納されます。
complexTypes
データ型とsimpleTypes
データ型は、すべてanyType
から導出されます。 そのため、anyType
はすべてのsimpleTypes
およびcomplexTypes
データ型のベース型となります。 anyType
型の要素は、定義でデータ型を指定せずに作成できます。 anyType
要素の内容は制限できません。 anyType
型の要素を含むXSDをインポートすると、InterConnectではこのanyType
がString
として格納されます。 anyType
型の要素は、トランスフォーメーションの実行中にanyType
型の要素にのみマップできます。
XMLスキーマのsimpleTypes
データ型は、すべてanySimpleType
から導出されます。 そのため、anySimpleType
はすべてのsimpleTypes
データ型のベース型となります。 XSDのインポート時に、属性の型が定義されていなければ、InterConnectでは属性の型がanySimpleType
として処理されます。 実行時には、anySimpleType
要素はString
として処理されます。 anySimpleType
要素は、トランスフォーメーション中にanySimpleType
型の要素または属性にのみマップされます。
XSDで要素のグループを定義して名前を付けることができます。 XSDコンテンツ・モデルを使用すると、グループ内の要素の順序を定義できます。 コンテンツ・モデルのインポート時に、InterConnectではモデル・グループの冗長性が自動的に検出されて解決されます。 たとえば、maxOccurs=1
の順序モデル・グループにmaxOccurs=1
の別の順序モデル・グループが直接含まれている場合、InterConnectでは第2のモデル・グループが冗長であることが自動的に検出されます。
選択肢グループでは、グループの複数の要素候補から選択するように記述します。 選択肢グループでは、XMLインスタンスに表示できる要素が1つのみになるように指定します。 たとえば、Address1
が2つの要素OfficeAddress
およびResidenceAddress
を含むcomplexType
データ型であるとします。 XML文書にOfficeAddress
またはResidenceAddress
のいずれか一方を出現させる必要がある場合は、選択肢グループを作成できます。
選択肢グループには、要素のみでなく他のグループも含めることができます。 InterConnectでは、選択肢グループ用に要素が1対1で作成されます。 この要素には選択肢グループのメンバーがすべて含まれ、_Choice_
という名前を持つオブジェクトとしてInterConnectに格納されます。 選択肢グループのmaxOccurs
の値が1よりも大きければ、この選択肢グループのオブジェクトはInterConnectで配列として作成されます。
順序グループは、このグループに定義されている全要素がXML文書に1度出現する必要があることを指定します。 これらの要素は、特定の順序で出現する必要があります。 たとえば、Address1
が2つの要素OfficeAddress
およびResidenceAddress
を含むcomplexType
型であるとします。 XML文書でResidenceAddress
の前にOfficeAddress
を出現させる必要がある場合は、順序グループを作成できます。
順序グループには、要素のみでなく他のグループも含めることができます。 InterConnectでは、順序グループ用に要素が1対1で作成されます。 この要素には順序グループの全メンバーが含まれ、_Sequence_
形式の名前を持つオブジェクトとして格納されます。 順序グループのmaxOccurs
の値が1よりも大きければ、この順序グループのオブジェクトはInterConnectで配列として作成されます。
Allグループは、このグループに定義されている全要素がXML文書に1度出現する必要があることを指定します。 これらの要素は、XML文書に任意の順序で出現できます。
Allグループに他のグループを含めることはできません。 InterConnectでは、Allグループ用の要素が作成されます。 この要素にはAllグループのメンバーがすべて含まれ、_All_
という名前を持つオブジェクトとしてInterConnectに格納されます。 maxOccurs
の値が1よりも大きければ、このAllグループのオブジェクトはInterConnectで配列として作成されます。
XSD名前空間は、要素と属性名および型の集合です。 名前空間は、Uniform Resource Identifier(URI)という一意の名前で識別されます。 名前空間は宣言時に接頭辞に関連付けられ、この接頭辞をローカル名とともに使用してXML文書内で要素が表現されます。 たとえば、Book:Title
の場合、Book
は名前空間接頭辞でTitle
は要素名です。 XSD名前空間は、重複する要素、属性名および型を区別する手段を提供します。 XSDをインポートすると、InterConnectではすべての要素が名前空間名別に表示されます。
スキーマに定義されているターゲット名前空間は、スキーマに定義されているすべてのグローバル要素および属性が常駐する名前空間を指定します。 XSDの要素が名前付き名前空間を持たない場合、この要素はNoNamespace
名前空間に属します。
XSDは、維持と読取りが容易になるように各部に分割できます。 xsd:include
およびxsd:import
文を使用すると、あるXSDファイルのコンテンツを別のXSDファイルに使用できます。 include
文は、同じターゲット名前空間に存在するスキーマまたはターゲット名前空間が定義されていないスキーマ用です。 import
文は、別のターゲット名前空間に存在するスキーマ用です。
XSDのインポート時に、InterConnectではすべての挿入またはインポート済XSDが自動的に考慮されます。 最初に、インポート対象のスキーマが解決されます。 インポートまたは挿入対象となるスキーマの型と要素の参照は、すべて定義で置換されます。
InterConnectでは、選択したXSDとすべての挿入済XSDおよびインポート済XSDが、InterConnectリポジトリにバイナリ・ラージ・オブジェクト(BLOB)として格納されます。 これは、XMLインスタンスを実行時に実際のXSDと対照して検証するためです。 その後、InterConnectでのフロー中にメッセージが次の3つの時点で検証されます。
この検証は、パブリッシュ側アプリケーション・ビューのXSDと対照して実行されます。図10-1は、「XMLの検証」オプションが選択されている状態を示しています。 これは、XMLインスタンスがアプリケーション・ビューのXSDと対照して検証されることを示します。
既存のsimpleTypes
またはcomplexType
データ型を拡張または制限することで、新規のcomplexTypes
データ型を導出できます。 XSDのインポート時に、InterConnectによりベース型と導出型の要素が作成されます。
拡張とは、既存の型をベースとして使用し、そのコンテンツに追加して新規の型を作成することを意味します。 ベースcomplexType
データ型の定義は、新規のcomplexType
データ型の定義に含まれます。新規のcomplexType
データ型に新規の要素と属性を追加できます。 たとえば、complexType
Employee
に2つのsimpleType
要素FirstName
およびLastName
が含まれているとします。 complexType
Employee
を使用して、Permanent
およびContract
という2つの新しいcomplexType
を作成できます。 FirstName
およびLastName
要素に加えて、Permanent
complexType
には、EmpID
やDateOfJoining
などの要素を含めることができ、Contract
complexType
にはContractStartDate
やContractEndDate
などの要素を含めることができます。
InterConnectでXSDをインポートするときに、スキーマ・パーサーによりスキーマが解析され、解決済のスキーマ・モデルが表示されます。 解決済のスキーマ・モデルでは、導出型の定義が導出する型にコピーされ、新規の要素と属性が追加されて、型の定義が解決されます。
ベースのcomplexType
データ型を制限することでcomplexType
データ型を導出できます。 制限は、他に指定する型定義と1対1の関係にある宣言を持つ型定義です。
制限により導出されたcomplexType
型はベース型によく似ていますが、宣言はベース型での対応する宣言よりも限定的です。 導出型に含まれるベース型のコンポーネントはすべて、導出型定義で繰り返される必要があります。 たとえば、complexType
Employee
に8個のsimpleType
要素(EmployeeID
、FirstName
、LastName
、DateOfBirth
、DateOfJoining
、DepartmentNumber
、DepartmentName
およびDepartmentLocation
)が含まれているとします。 従業員の部門関連情報(EmployeeID
、DepartmentNumber
、DepartmentName
およびDepartmentLocation
など)を含む新規のComplexType
EmpDept
を導出できます。
制限により新規の型を導出する場合、導出型の定義は導出する型にコピーされません。 InterConnectでは、選択したルート要素の階層内の要素に使用される定義が格納されます。
OracleAS Integration InterConnectでサポートされていない特定の機能や構成メンバーがあります。 また、XSDの特定の機能には一部の制限があります。 この項では、次の項目について説明します。
XSDでは、次の機能や構成メンバーはサポートされていません。
混合コンテンツ・タイプを持つXSDをインポートしようとすると、InterConnect iStudioでエラーが発生します。
xsi:type
のサポートXMLインスタンスでは、xsi:type
属性を指定すると、ベース型の要素が期待される場所に拡張または制限による導出型が表示されます。 InterConnectではxsi:type
属性がサポートされておらず、要素は元の型であるとみなされます。
any
要素モデル・グループ定義では、any
要素が順序の最後にないと、InterConnectでエラーが発生します。
要素を1つ(any
要素)しか持たないComplexType
要素はすべて、InterConnectでString
とみなされます。 要素に含まれている要素と属性に同じ名前を使用することはできません。
ペイロードが複合構造(XSDベースのフィールドとその他のフィールド)を持つ場合、XSD検証(「XMLの検証」オプション)は使用できません。
|
![]() Copyright © 2006 Oracle Corporation. All Rights Reserved. |
|