ぺーぺーSEのブログ

備忘録・メモ用サイト。

XML Schema(スキーマ)作成

XML Schemaの基本構造

XML Schemaはxsdファイルで作成する。
XML例1】のスキーマXML Schemaで表すと【XMLスキーマ1】のようになる。

XML例1】

<greet>Hello World</greet>

XMLスキーマ1】

<?xml version="1.0"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="greet" type="xsd:string"/>
</xsd:schema>
  • 1行目はXML宣言。
  • 2行目は名前空間「xsd」で「"http://www.w3.org/2001/XMLSchema"で定義された要素を使用する」という意味になる。
    • 以降、「」という形で使用する。(このタグでもすでに使われているが。。。)
  • 3行目は、文字列型で「greet」という名前の要素を定義している。
■ element要素

要素の定義を行う。

  • 「name」属性で要素の名前を定義
  • 「type」属性で要素の型を定義

単純型と複雑型

  • 単純型 
    • 子要素および属性を持たない要素のデータ型、あるいは属性値のデータ型
    • XMLスキーマ1】はこれにあたる
  • 複雑型 
    • 子要素または属性を持つ要素のデータ型
    • XMLスキーマ2】はこれにあたる

XML例2】のスキーマXML Schemaで表すと【XMLスキーマ2】のようになる。 

XML例2】

<user id="123">
  <name>ほげほげ</name>
  <age>30</age>
</user>

XMLスキーマ2】

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="user">
   <xsd:complexType>
     <xsd:sequence>
       <xsd:element name="name" type="xsd:string"/>
       <xsd:element name="age" type="xsd:integer" />
     </xsd:sequence>
     <xsd:attribute name="id" type="xsd:string"/>
   </xsd:complexType>
  </xsd:element>
</xsd:schema>
  • 4行目()で子要素を定義。
  • 5行目()は子要素の順番を指定。
  • 9行目(
■ complexType要素

開始タグと終了タグの間に、親要素(ここではuser)がどのような子要素を持つのか記述。

■ sequence要素

子要素の順番を指定する。
記述した順番となる。ここではname、ageの順となる。
子要素を持たない場合は、sequenceの定義を空にする。

■ attribute要素

属性も、子要素と同じようにxsd:complexType要素内で宣言する。
属性は、子要素について記述した後で宣言する。

要素の参照

XMLスキーマ3】

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="use">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="name" type="xsd:string"/>
        <xsd:element ref="address"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="address">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="zipCode" type="xsd:string"/>
        <xsd:element name="city" type="xsd:string" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>
  • 8行目()は13行目以降で定義した「address」を参照している。
■ ref属性

ref属性を記述した場合、要素の構造については別の場所で宣言する。
そして、ref属性の値に記されている要素を参照する。

要素の数

要素の数の指定について。
XML例4】のスキーマXML Schemaで表すと【XMLスキーマ4】のようになる。

XML例4】

<items>
  <item>アイテム1</item>
  <item>アイテム2</item>
  <comment>コメント</comment>
</items>

XMLスキーマ4】

<xsd:element name="items">
 <xsd:complexType>
   <xsd:sequence>
     <xsd:element name="item" type="xsd:string" minOccurs="2" maxOccurs="5"/>
     <xsd:element name="comment" type="xsd:string" minOccurs="0"/>
   </xsd:sequence>
 </xsd:complexType>
</xsd:element>
  • 4行目(
■ maxOccurs属性

要素を指定できる最大数を定義する。
デフォルト1。無制限にしたいときは「unbounded」を指定。

■ minOccurs属性

要素を指定できる最少数を定義する。
デフォルト1。

要素の選択

XMLスキーマ5】

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="items">
   <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="item" maxOccurs="10"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="item">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice>
          <xsd:element name="name" type="xsd:string"/>
          <xsd:element name="id" type="xsd:string"/>
        </xsd:choice>
        <xsd:element name="price" type="xsd:integer" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>
  • 15〜18行目にかけて、name要素かid要素のどちらかを選択することを定義している。