ヘッダーをスキップ

Oracle Application Server Integration InterConnect ユーザーズ・ガイド
10g リリース2 (10.1.2)

B15751-02
目次
目次
索引
索引

戻る 次へ

10 XMLスキーマ定義

この章では、XMLスキーマ定義(XSD)の概要とInterConnectによるXSDのサポートについて説明します。項目は次のとおりです。

10.1 XSDの概要

XSDは、XML文書の構造の定義です。 XML文書に表示できる要素と属性、およびこれらの要素と属性に使用できるデータの型が指定されます。 この情報を使用して、XML文書の各要素または属性が記述に従っていることが検証されます。

10.1.1 DTDを上回るXSDのメリット

Document Type Definition(DTD)を上回るXSDのメリットは、次のとおりです。

10.2 XSDの要素と属性

XMLスキーマでは、要素とその構造が定義されます。 また、属性とそのデータ型も定義されます。 要素の構造は、その要素がリーフ要素であるか親要素であるかに応じてsimpleTypeまたはcomplexTypeです。

関連項目:

simpleTypeおよびcomplexTypeの詳細は、「XSD型定義」を参照してください。 

10.2.1 XSDの要素

XSDの要素の型は、simpleTypecomplexTypeまたはanyTypeです。 simpleType型の要素にはテキストのみが含まれます。 属性と要素を持つことはできません。 complexType型の要素は、テキスト、要素および属性を含むことができます。 complexType型の要素は、下位のすべての要素と属性の親です。 XSDのany要素は、XMLインスタンス内の対応する位置に任意の整形式XMLが許容されることを指定します。

InterConnectでは、simpleType型は親要素について作成されたオブジェクトのメンバーとして格納されます。 このメンバーのデータ型は、XSDのデータ型に対応するInterConnectのデータ型です。 たとえば、Address1は2つのsimpleType要素CityおよびStateを含むcomplexTypeで、myAddressAddress1 complexTypeの要素であるとします。 InterConnectでは、Address1はオブジェクトとして格納され、CityおよびStateはInterConnectのStringデータ型として格納されます。myaddressはInterConnectのReferenceデータ型として格納されます。このデータ型は、complexTypeのオブジェクトであるAddress1の参照を含みます。 any要素の名前は_any_形式で格納されます。 any要素は実行時に文字列として処理されます。

要素にはローカル要素とグローバル要素があります。 XMLスキーマの直接の子として宣言された要素はグローバル要素と呼ばれ、スキーマ全体で使用できます。 複合型定義内で宣言された要素は、ローカル要素です。 そのため、この種の要素をスキーマ内の他の場所で使用することはできません。 XSDをインポートすると、InterConnectには、このXMLスキーマの全グローバル要素と、インポートされたか含まれていたXMLスキーマがすべて表示されます。 これらのグローバル要素は、名前空間に基づいてグループ化されます。 名前空間を参照してグローバル要素を選択できます。 このグローバル要素は、アプリケーション・ビューまたは共通ビューを定義する際にメッセージのルートとして機能します。 また、アプリケーション・データ型または共通データ型を定義する際には、生成される型のルートとして機能します。

ある要素をルート要素として選択すると、選択した要素の構造の最初から最後までの要素がすべてリポジトリに格納されます。 要素には、minOccursmaxOccursなどの制約を使用できます。 要素のmaxOccurs制約の値が1よりも大きければ、その要素は配列として格納されます。

10.2.2 XSDの属性

XSDの属性は常にsimpleType型です。 属性定義の構文は、次のとおりです。

<xs:attribute name="myattribute" type="string"/>

この例で、myattributestringデータ型の属性です。 属性には固定値またはデフォルト値を指定できます。 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は、Street1Street2CityおよびStateなどの属性を含む属性グループの名前です。 InterConnectでは、属性定義を参照側complexTypeにコピーすることで属性グループの参照が解決されます。

anyAttribute

any要素と同様に、anyAttributeはXMLインスタンス内の対応する場所で任意の属性を使用できることを指定します。 InterConnectでは、anyAttribute_anyAttribute_形式の名前を持つ属性として格納されます。 この属性の型はStringとして格納されます。

10.2.3 Nillable

不明な情報や適用できない情報を要素で明示的に表すことが必要になる場合があります。 たとえば、リレーショナル・データベースとの間でやりとりされるNULL値を要素で表す必要があるとします。 その場合は、要素のnillable属性をXMLスキーマ定義内でtrueとして宣言できます。 InterConnectでは、nillable属性値はXSDのインポート中にリポジトリに格納されます。

10.3 XSD型定義

XSD型定義は、新規のsimpleTypeデータ型またはcomplexTypeデータ型の作成に使用されます。 新しい定義を作成する際にベースとして使用される型定義を、ベース型定義と呼びます。 名前付きまたは無名のsimpleType型またはcomplexType型を使用できます。 名前付きのsimpleTypeまたはcomplexTypeは、常にグローバルに定義されます。 名前付きのsimpleTypeまたはcomplexTypeを定義し、スキーマ文書内で要素の型として参照できます。 無名simpleType型または無名complexType型には、名前はありません。 そのため、この種のsimpleType型またはcomplexType型は参照できません。

10.3.1 simpleType

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データ型とのマッピングを示しています。

表 10-1    XSDデータ型とInterConnectデータ型のマッピング 
XSDデータ型  InterConnectデータ型 

xsd:integer、xsd:nonPositiveInteger、xsd:negativeInteger、xsd:long、xsd:int、xsd:short、xsd:byte、xsd:nonNegativeInteger、xsd:unsignedLong、xsd:unsignedInt、xsd:unsignedShort、xsd:unsignedByte、xsd:positiveInteger 

INTEGER 

xsd:double、xsd:decimal 

DOUBLE 

xsd:float 

Float 

xsd:string、xsd:normalizedString、xsd:token、xsd:language、xsd:NMTOKEN、xsd:Name、xsd:NCName、xsd:ID、xsd:IDREF、xsd:ENTITY、xsd:anyURI、xsd:QName、xsd:NOTATION、xsd:NMTOKENS、xsd:IDREFS、xsd:ENTITIES、xsd:duration、xsd:time、xsd:gYearMonth、xsd:gYear、xsd:gMonthDay、xsd:gDay、xsd:gMonth 

STRING 

xsd:binaryおよびxsd:base64binary 

Binary 

xsd:date、xsd:datetime 

DATE 

xsd:boolean 

Boolean 

10.3.2 complexType

complexType型定義には、一連の要素宣言、要素参照および属性宣言が含まれます。最初にスキーマ内でcomplexType型を定義してから、このcomplexType型の要素と属性を定義します。

InterConnectでは、complexType型はオブジェクトとして格納されます。 名前付きまたは無名のcomplexType型を使用できます。 インポートされたXMLスキーマが無名complexType型を持つ場合、InterConnectでは要素名に基づいてオブジェクト名が生成されます。 このオブジェクトの型はanonymous complexTypeです。 たとえば、anonymous complexType型の要素MyElementを含むXSDをインポートすると、InterConnectではMyElement_CTなどの型名を持つ要素のオブジェクトが生成され、格納されます。

10.3.3 anyType

complexTypesデータ型とsimpleTypesデータ型は、すべてanyTypeから導出されます。 そのため、anyTypeはすべてのsimpleTypesおよびcomplexTypesデータ型のベース型となります。 anyType型の要素は、定義でデータ型を指定せずに作成できます。 anyType要素の内容は制限できません。 anyType型の要素を含むXSDをインポートすると、InterConnectではこのanyTypeStringとして格納されます。 anyType型の要素は、トランスフォーメーションの実行中にanyType型の要素にのみマップできます。

10.3.4 anySimpleType

XMLスキーマのsimpleTypesデータ型は、すべてanySimpleTypeから導出されます。 そのため、anySimpleTypeはすべてのsimpleTypesデータ型のベース型となります。 XSDのインポート時に、属性の型が定義されていなければ、InterConnectでは属性の型がanySimpleTypeとして処理されます。 実行時には、anySimpleType要素はStringとして処理されます。 anySimpleType要素は、トランスフォーメーション中にanySimpleType型の要素または属性にのみマップされます。

10.4 XSDコンテンツ・モデル

XSDで要素のグループを定義して名前を付けることができます。 XSDコンテンツ・モデルを使用すると、グループ内の要素の順序を定義できます。 コンテンツ・モデルのインポート時に、InterConnectではモデル・グループの冗長性が自動的に検出されて解決されます。 たとえば、maxOccurs=1の順序モデル・グループにmaxOccurs=1の別の順序モデル・グループが直接含まれている場合、InterConnectでは第2のモデル・グループが冗長であることが自動的に検出されます。

10.4.1 選択肢グループ

選択肢グループでは、グループの複数の要素候補から選択するように記述します。 選択肢グループでは、XMLインスタンスに表示できる要素が1つのみになるように指定します。 たとえば、Address1が2つの要素OfficeAddressおよびResidenceAddressを含むcomplexTypeデータ型であるとします。 XML文書にOfficeAddressまたはResidenceAddressのいずれか一方を出現させる必要がある場合は、選択肢グループを作成できます。

選択肢グループには、要素のみでなく他のグループも含めることができます。 InterConnectでは、選択肢グループ用に要素が1対1で作成されます。 この要素には選択肢グループのメンバーがすべて含まれ、_Choice_という名前を持つオブジェクトとしてInterConnectに格納されます。 選択肢グループのmaxOccursの値が1よりも大きければ、この選択肢グループのオブジェクトはInterConnectで配列として作成されます。

10.4.2 順序グループ

順序グループは、このグループに定義されている全要素がXML文書に1度出現する必要があることを指定します。 これらの要素は、特定の順序で出現する必要があります。 たとえば、Address1が2つの要素OfficeAddressおよびResidenceAddressを含むcomplexType型であるとします。 XML文書でResidenceAddressの前にOfficeAddressを出現させる必要がある場合は、順序グループを作成できます。

順序グループには、要素のみでなく他のグループも含めることができます。 InterConnectでは、順序グループ用に要素が1対1で作成されます。 この要素には順序グループの全メンバーが含まれ、_Sequence_形式の名前を持つオブジェクトとして格納されます。 順序グループのmaxOccursの値が1よりも大きければ、この順序グループのオブジェクトはInterConnectで配列として作成されます。

10.4.3 Allグループ

Allグループは、このグループに定義されている全要素がXML文書に1度出現する必要があることを指定します。 これらの要素は、XML文書に任意の順序で出現できます。

Allグループに他のグループを含めることはできません。 InterConnectでは、Allグループ用の要素が作成されます。 この要素にはAllグループのメンバーがすべて含まれ、_All_という名前を持つオブジェクトとしてInterConnectに格納されます。 maxOccursの値が1よりも大きければ、このAllグループのオブジェクトはInterConnectで配列として作成されます。

10.5 XSD名前空間

XSD名前空間は、要素と属性名および型の集合です。 名前空間は、Uniform Resource Identifier(URI)という一意の名前で識別されます。 名前空間は宣言時に接頭辞に関連付けられ、この接頭辞をローカル名とともに使用してXML文書内で要素が表現されます。 たとえば、Book:Titleの場合、Bookは名前空間接頭辞でTitleは要素名です。 XSD名前空間は、重複する要素、属性名および型を区別する手段を提供します。 XSDをインポートすると、InterConnectではすべての要素が名前空間名別に表示されます。

スキーマに定義されているターゲット名前空間は、スキーマに定義されているすべてのグローバル要素および属性が常駐する名前空間を指定します。 XSDの要素が名前付き名前空間を持たない場合、この要素はNoNamespace名前空間に属します。

10.5.1 スキーマの挿入とインポート

XSDは、維持と読取りが容易になるように各部に分割できます。 xsd:includeおよびxsd:import文を使用すると、あるXSDファイルのコンテンツを別のXSDファイルに使用できます。 include文は、同じターゲット名前空間に存在するスキーマまたはターゲット名前空間が定義されていないスキーマ用です。 import文は、別のターゲット名前空間に存在するスキーマ用です。

XSDのインポート時に、InterConnectではすべての挿入またはインポート済XSDが自動的に考慮されます。 最初に、インポート対象のスキーマが解決されます。 インポートまたは挿入対象となるスキーマの型と要素の参照は、すべて定義で置換されます。

10.5.2 InterConnectによる検証

InterConnectでは、選択したXSDとすべての挿入済XSDおよびインポート済XSDが、InterConnectリポジトリにバイナリ・ラージ・オブジェクト(BLOB)として格納されます。 これは、XMLインスタンスを実行時に実際のXSDと対照して検証するためです。 その後、InterConnectでのフロー中にメッセージが次の3つの時点で検証されます。

  1. InterConnectがアプリケーションからメッセージを受信したとき

    この検証は、パブリッシュ側アプリケーション・ビューのXSDと対照して実行されます。図10-1は、「XMLの検証」オプションが選択されている状態を示しています。 これは、XMLインスタンスがアプリケーション・ビューのXSDと対照して検証されることを示します。

    図 10-1    アプリケーション・ビューに対する検証の有効化


    画像の説明

  2. InterConnectがアプリケーション・ビューから共通ビューへとメッセージを変換した後、この検証は、共通ビューのXSDと対照して実行されます。図10-2は、「XMLの検証」オプションが選択されている状態を示しています。 これは、XMLインスタンスが共通ビューのXSDと対照して検証されることを示します。

    図 10-2    共通ビューに対する検証の有効化


    画像の説明

  3. InterConnectが共通ビューからアプリケーション・ビューへとメッセージを変換した後、この検証は、サブスクライブ側アプリケーション・ビューのXSDと対照して実行されます。


    注意:

    XMLインスタンスは、検証オプションを選択した場合にのみ実際のXSDと対照して検証されます。 これらの検証点は、iStudioで設計時に有効化または無効化できます。  


10.6 XSD型の導出

既存のsimpleTypesまたはcomplexTypeデータ型を拡張または制限することで、新規のcomplexTypesデータ型を導出できます。 XSDのインポート時に、InterConnectによりベース型と導出型の要素が作成されます。

10.6.1 拡張によるcomplexTypesの導出

拡張とは、既存の型をベースとして使用し、そのコンテンツに追加して新規の型を作成することを意味します。 ベースcomplexTypeデータ型の定義は、新規のcomplexTypeデータ型の定義に含まれます。新規のcomplexTypeデータ型に新規の要素と属性を追加できます。 たとえば、complexType Employeeに2つのsimpleType要素FirstNameおよびLastNameが含まれているとします。 complexType Employeeを使用して、PermanentおよびContractという2つの新しいcomplexTypeを作成できます。 FirstNameおよびLastName要素に加えて、Permanent complexTypeには、EmpIDDateOfJoiningなどの要素を含めることができ、Contract complexTypeにはContractStartDateContractEndDateなどの要素を含めることができます。

InterConnectでXSDをインポートするときに、スキーマ・パーサーによりスキーマが解析され、解決済のスキーマ・モデルが表示されます。 解決済のスキーマ・モデルでは、導出型の定義が導出する型にコピーされ、新規の要素と属性が追加されて、型の定義が解決されます。

10.6.2 制限によるcomplexTypesの導出

ベースのcomplexTypeデータ型を制限することでcomplexTypeデータ型を導出できます。 制限は、他に指定する型定義と1対1の関係にある宣言を持つ型定義です。

制限により導出されたcomplexType型はベース型によく似ていますが、宣言はベース型での対応する宣言よりも限定的です。 導出型に含まれるベース型のコンポーネントはすべて、導出型定義で繰り返される必要があります。 たとえば、complexType Employeeに8個のsimpleType要素(EmployeeIDFirstNameLastNameDateOfBirthDateOfJoiningDepartmentNumberDepartmentNameおよびDepartmentLocation)が含まれているとします。 従業員の部門関連情報(EmployeeIDDepartmentNumberDepartmentNameおよびDepartmentLocationなど)を含む新規のComplexType EmpDeptを導出できます。

制限により新規の型を導出する場合、導出型の定義は導出する型にコピーされません。 InterConnectでは、選択したルート要素の階層内の要素に使用される定義が格納されます。

10.7 サポート対象外の機能とXSDの制限

OracleAS Integration InterConnectでサポートされていない特定の機能や構成メンバーがあります。 また、XSDの特定の機能には一部の制限があります。 この項では、次の項目について説明します。

10.7.1 サポート対象外の機能

XSDでは、次の機能や構成メンバーはサポートされていません。

10.7.2 XSDの制限

要素を1つ(any要素)しか持たないComplexType要素はすべて、InterConnectでStringとみなされます。 要素に含まれている要素と属性に同じ名前を使用することはできません。

ペイロードが複合構造(XSDベースのフィールドとその他のフィールド)を持つ場合、XSD検証(「XMLの検証」オプション)は使用できません。


戻る 次へ
Oracle
Copyright © 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引