複合型と単純型を扱う

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  XMLSpy チュートリアル > XML スキーマ: 高度な機能 >

複合型と単純型を扱う

要素のコンテンツモデルの定義を行ったので、それをスキーマのどこか別の場所で再利用することにします。そのためには要素の定義をグローバル複合型、またはグローバル要素として作成する必要があります。このセクションではグローバル複合型を扱います。まずは複合型をグローバルなレベルで作成し、それをコンテンツモデル内で使用できるように拡張します。グローバル要素については後ほど学習します。

 

グローバル複合型の作成

既に定義した(Name、Street、 City 要素を含む)基本的な Address 要素は住所の書式として色々な場所で利用できます。そこで、これら要素の再利用をすることができる複合型を定義することにします。

 

グローバル複合型を作成するには、以下を行います:

 

1.コンテンツモデルビューにて Address 要素を右クリックする。
2.現れたコンテキストメニューで「グローバル化 | 複合型」を選択します。AddressType という名前のグローバル複合型が作成され、Company コンテンツモデルの Address 要素がこの型に割り当てられます。Address 要素の内容は、黄色のボックスで表示されている AddressType のコンテンツモデルになります。Address 要素のデータ型が AddressType になっていることに注目してください。

tut_17a

3.全てのグローバルを表示アイコン ic_back2global をクリックします。メインウィンドウの表示が、スキーマ内の全てのグローバルコンポーネントを表示するスキーマ概要に移動します。
4.コンポーネント入力ヘルパーにて(+で示される)要素複合型エントリの展開アイコンをクリックして、対応するスキーマが表示されることを確認します。

スキーマ概要は2つのグローバルコンポーネント( Company 要素と複合型の AddressType)を表示しています。コンポーネント入力ヘルパーにも AddressType 複合型は表示されます。

complextypes_schema_ovw

 

 

5.AddressType のコンテンツモデルビュー表示アイコン ic_component をクリックして、(下のスクリーンショットにあるような)コンテンツモデルを表示します。複合型コンテナーの形に注目してください。

tut_18a

6.全てのグローバルを表示アイコン ic_back2global をクリックして、スキーマ概要に戻ります。

 

複合型の定義の拡張

それでは、2つの国に特化した住所を表す為に、グローバル AddressType コンポーネントを使用したいと思います。このために、AddressType をベースにした新たな複合型を作成し、その定義を拡張します。

 

以下を行います:

1.スキーマ概要に移動します(コンテンツモデルビューにいる場合、全てのグローバルを表示アイコン ic_back2global をクリックします)。
2. コンポーネントウィンドウの左上にある追加アイコン ic_tbl_append_row をクリックします。以下のメニューが開きます:

tut_18b

3. メニューから複合型を選択します。コンポーネントリストに新しいレコードが現れ、コンポーネントの名前を入力するようにカーソルがセットされます。
4. US-Address と入力し、「Enter」で確定します。(ハイフン(-)を入力する代わりに空白(スペース)を入力した場合、要素名が赤くなり、不正な文字であることが示されます)

complextypes_ext_schema_ovw

5.US-Address のコンテンツモデルビューアイコン ic_component をクリックし、新しい複合型のコンテンツモデルを表示します。コンテンツモデルは(以下のスクリーンショットにあるように)空です。
6.詳細入力ヘルパーにて、base コンボボックスをクリックし、 AddressType エントリを選択します。

complextypes_ext_contmod_view

コンテンツモデルビューには US-Address のコンテンツモデルとして AddressType が表示されます。 (下のスクリーンショット)。

complextypes_ext_contmod_view_2

7.これで US-Address 複合型のコンテンツモデルを、郵便番号(ZIP Code)を持つように拡張することができます。US-Address コンポーネントを右クリックして、現れたコンテキストメニューから「子を追加 | シーケンス」を選択します。シーケンスコンポジッターが AddressType ボックスの外に表示されます(下のスクリーンショットを参照)。これは要素に対する拡張であることを表わしています。

tut_20a

8.新しいシーケンスコンポジッターを右クリックして、「子を追加 | 要素」を選択します。
9.新たに作成された要素に Zip という名前を付け、「タブ」 キーを押下し、カーソルを type フィールドに移動させます。
10.ドロップダウンメニューから xs:positiveInteger を選択し、「Enter」 キーにより確定します。

tut_20b

これで、複合型 AddressType をもとにした郵便番号(ZIP Code)の拡張を持つ複合型 US-Address が作成されました。

 

グローバル単純型

複合型の US-Address が複合型の AddressType をベースにしたように、単純型をベースにすることもできます。その利点はグローバル複合型の場合と同じで、単純型が再利用されることにあります。単純型を再利用するためには、その単純型をグローバルに定義しなければなりません。このチュートリアルではアメリカの州のコンテンツモデルを単純型として定義することにします。この単純型は他の要素のベースとして使用されることになります。

 

グローバル 単純型の作成

グローバル 単純型の作成は、グローバルコンポーネントのリストに新しい単純型を追加し、名前を与え、データ型を定義することから構成されています。

 

グローバル 単純型を作成するには以下をおこないます:

 

1.スキーマ概要に切り替えます。(コンテンツモデルビュー内で作業している場合は、 すべてのグローバルアイコンの表示 ic_back2global をクリックします。)
2.アイコンの追加をクリックします。表示される コンテキストメニューから SimpleType を選択します。
3.新しく作成された simpleType の名前として US-State を入力します。
4.「Enter」 を押して確認します。 単純型 US-State が作成され、コンポーネント 入力ヘルパー内の単純型のリストに表示されます。 (simpleType エントリのアイコンの展開をクリックして確認してください)。

simpletypes_schema_ovw

5.詳細入力ヘルパー (下のスクリーンショット)内では、 restr  の値フィールドにカーソルをポイントして、 xs:string を入力、または restr 値フィールドのドロップダウンメニューから xs:string を選択します。

simpletypes_details_eh

xs:string のデータ型である、US-State という名前の単純型が作成されます。このグローバル コンポーネントは、 US-Address のコンテンツモデル内で使用することができます。

 

コンテンツモデル内でグローバル 単純型を使用する

グローバル 単純型 は、コンテンツモデル内で、コンポーネントの型を定義するために使用することができます。 State という名前の要素を定義するためにの US-Address コンテンツモデル内の US-State を使用します。

 

次を行います:

 

1.スキーマ概要内の US-Address のコンポーネント モデルビューアイコン ic_component をクリックします。
2.下のシーケンスコンポジターを右クリックして、 「子の追加 | 要素 」を選択します。
3.要素名のために、 State を入力します。
4.「タブ」 キーを押して、カーソルを型詳細ラインの値フィールドにポイントします。
5.コンボボックスのドロップダウンメニューから、 US-State を選択します。

tut_21b

State 要素は、 US-State 単純型をベースにします。

 

第 2 の複合型を AddressType をベースにして作成する

UK の住所が入力できるように、グローバル 複合型を作成します。  複合型は、 AddressType をベースにして、 UK アドレスのフォーマットに一致するように拡張されています。

 

次を行います:

 

1.スキーマ概要内に AddressType (base=AddressType) をベースにする、UK-Address という名前のグローバル 複合型を作成します。
2.UK-Address の コンテンツモデルビュー 内に、 Postcode 要素を作成し、 xs:string の型を与えます。UK-Address コンテンツモデルは以下のようになります :

complextypes_ext_contmod_view_3

メモ: このセクションでは、 コンテンツモデル定義で使用されるグローバル 単純型 および 複合型を作成しました。 グローバル型の利点は、複数の定義で再利用できることです。

 


(C) 2018 Altova GmbH