⑦XMLスキーマで階層構造の定義(出現順番が決まっていない場合)

XMLスキーマの書き方について、学んだ事を書いていきます。


XMLスキーマで階層構造を定義してみます。(出現順番が決まっていない場合)
簡単なサンプルを作ってみます。


■All.xml

<?xml version="1.0"  encoding="UTF-8"?>
<nameList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="All.xsd">
  <id>1</id>
  <name>hogehoge</name>
</nameList>


■All.xsd

<?xml version="1.0"  encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="nameList" type="nameListType" />

  <xsd:complexType name="nameListType">
    <xsd:all>
      <xsd:element name="id" type="xsd:string"/>
      <xsd:element name="name" type="xsd:string"/>
    </xsd:all>
  </xsd:complexType>

</xsd:schema>


「nameListType」を定義しました。
タグの子要素は、タグとタグです。
「xsd:all」で定義しているので、タグ、タグの出現順番に決まりはありません。

<xsd:complexType name="nameListType">
    <xsd:all>
      <xsd:element name="id" type="xsd:string"/>
      <xsd:element name="name" type="xsd:string"/>
    </xsd:all>
  </xsd:complexType>


Eclipseで、XMLスキーマ検証してみます。
XMLファイルを開いて、右クリックメニューの「検証」で、XMLスキーマ検証します。


エラーは出ませんね。


All.xmlタグ、タグの順番を入れ替えて、検証してみます。
■All.xml

<?xml version="1.0"  encoding="UTF-8"?>
<nameList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="All.xsd">
  <name>hogehoge</name>
  <id>1</id>
</nameList>


「All.xsd」では、タグ、タグの出現順番に決まりはないので、検証OKになります。(「xsd:sequence」と違い、検証エラーになりません)