コンテンツモデルの定義

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

ホーム >  XMLSpy チュートリアル > XML スキーマ:基本 >

コンテンツモデルの定義

スキーマ概要には、既に作成された Company という名前のグローバル要素が表示されます。この要素は1つの Address 要素と、出現数に制限の無い Person 要素(コンテンツモデル)を持つことになります。グローバルコンポーネントの中の要素、複合型、そして要素グループはコンテンツモデルを持つことができます。

XMLSpy において、グローバルコンポーネントのコンテンツモデルは、スキーマビューのコンテンツモデルビュー内に表示されます(以下のスクリーンショットを参照)。グローバルコンポーネントのコンテンツモデルを編集するには、グローバルコンポーネントの左にあるダイアグラム表示アイコン ic_component  をクリックします。

schema_overview

このセクションでは、Company 要素のコンテンツモデルを作成します。

 

 

基本的なコンテンツモデルの作成

Company 要素のコンテンツモデルを作成するには:

 

1.スキーマ概要にて、要素のダイアグラム表示アイコン ic_component   をクリックします。今のところは空の Company 要素のコンテンツモデルが表示されます(以下のスクリーンショットを参照)。その他に、コンポーネント入力ヘルパーにある Company エントリをダブルクリックしてコンテンツモデルを表示させる方法もあります。

content_model_empty

2.コンテンツモデルはコンポジッターとコンポーネントにより構成されます。コンポジッターは2つのコンポーネントの関係を指定します。Company コンテンツモデルでは、子要素を加えるために子コンポジッターを追加する必要があります。コンポジッターを追加するには、Company 要素を右クリックし、コンテキストメニューから「子を追加 | シーケンス」を選択します。(「シーケンス」、「選択」、そして「全て」は、コンテンツモデルで使用される3つのコンポジッターです)

tut_7a

この操作によりシーケンスが指定され、そこから表示されるコンポーネントを定義するシーケンスコンポジッターが挿入されます。

tut_7b

3.シーケンスコンポジッターを右クリックして、「子を追加 | 要素」 を選択します。名前の無い要素コンポーネントが追加されます。
4.要素の名前に Address と入力して 「Enter」 で確定します。

tut_8a

5.シーケンスコンポジッターを再度右クリックして、「子を追加 | 要素」 を選択します。新たに作成された要素コンポジットの名前を Person にします。

tut_8b

これで1つの会社あたり、1つの住所と1人の人物の記述を許可するスキーマを定義しました。これからさらに Person 要素の数を増やす必要があります。

6.Person 要素を右クリックし、コンテキストメニューから無制限を選択します。ダイアグラムの Person 要素に許された出現回数として1から無限が表示されます。

tut_8c

その他に、詳細入力ヘルパー内から minOcc maxOcc フィールドを編集して、許可された出現回数を指定することができます。この場合なら、それぞれ1と unbounded になります。

 

コンテンツモデル構造に新たな階層を追加

これまでで作成した基本的なコンテンツモデルは、1つのレベル(AddressPerson 要素という company 要素の子レベル)しか持ちませんでした。ここでは Address 要素の内容を定義します。Address 要素以下に Name、 Street、City 要素を配置します。これは第2のレベルです。再度子コンポジッターを Address 要素に加え、要素コンポーネントを加えることになります。

 

やり方:

 

 

1.Address 要素を右クリックしコンテキストメニューを開き、「子を追加 | シーケンス」を選択します。これでシーケンスコンポジッターが追加されます。
2.シーケンスコンポジッターを右クリックし、「子を追加 | 要素」を選択します。新たに作成された要素コンポーネントの名前を Name に変更します。

tut_9a

 

複合型、単純型、スキーマデータ型

ここまで、要素の型を明示的に定義はしませんでした。テキストタブをクリックして、スキーマをテキストビューに表示させてください(下記参照)。シーケンスコンポジッターが挿入された場所には xs:complexType  内に xs:sequence 要素が挿入されているのが分かると思います。簡単に説明すると、Company そして Address 要素は子要素を持っているため複合型になります。複合型要素は属性または要素を持ちます。

 

<xs:element name="Company">

  <xs:annotation>

    <xs:ドキュメント>Root element</xs:ドキュメント>

  </xs:annotation>

  <xs:complexType>

    <xs:sequence>

      <xs:element name="Address">

        <xs:complexType>

          <xs:sequence>

            <xs:element name="Name"/>

          </xs:sequence>

        </xs:complexType>

      </xs:element>

      <xs:element name="Person"/>

    </xs:sequence>

  </xs:complexType>

</xs:element>

 

一方で、単純型要素は属性を持たずテキストだけを含みます。テキストとは、文字列や日付、数値などです。Address の子である Name にはテキストしか入って欲しくありません。つまり文字列だけに制限された単純型ということになります。XML スキーマデータ型を xs:string にすることで、このような設定を行うことができます。

 

Name 要素のデータ型を定義するには:

 

 

1.スキーマタブをクリックし、スキーマビューに戻ります。
2.Name 要素をクリックして選択します。
3.type 詳細入力ヘルパーにて、Name コンボボックスのドロップダウンメニューから xs:string を選択します。

tut_9b

minOccmaxOcc は1の値を持っていて、この要素は1度しか現れないことに注意してください。

 

Name 要素のテキスト表記は以下のようになります:

 

 <xs:element name="Name" type="xs:string"/>

 

注意: 単純型要素は幾つかあるXMLスキーマデータ型のどれでも取ることができます。全ての場合において、要素ボックスにはテキストコンテンツであることを示すアイコンが表示されます。

 


(C) 2018 Altova GmbH