②XMLスキーマで文字列長の定義

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


XMLスキーマで、項目値、属性値の文字列長をチェックしてみます。
簡単なサンプルを作ってみます。


■StringLength.xml

<?xml version="1.0"  encoding="UTF-8"?>
<greeting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="StringLength.xsd" attribute="Hello World!!">
  Hello World!!
</greeting>


■StringLength.xsd

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

  <xsd:complexType name="greetingType">
    <xsd:simpleContent>
      <xsd:extension base="greetingString">
        <xsd:attribute name="attribute" type="greetingString" use="required" />
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <xsd:simpleType name="greetingString">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1" />
      <xsd:maxLength value="20" />
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>


文字列長を定義した単純型を追加しました。

  <xsd:simpleType name="greetingString">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1" />
      <xsd:maxLength value="20" />
    </xsd:restriction>
  </xsd:simpleType>

で、1〜20文字までの文字列型「greetingString」を定義しています。


「xsd:string」型で定義していた箇所を「greetingString」型に変更します。

<xsd:extension base="xsd:string">
        <xsd:attribute name="attribute" type="xsd:string" use="required" />

<xsd:extension base="greetingString">
        <xsd:attribute name="attribute" type="greetingString" use="required" />

に変更します。
これで、タグ値とattribute属性値は、1〜20文字までの文字列型「greetingString」になりました。


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


エラーは出ませんね。


StringLength.xmlタグ値とattribute属性値を「Hello World!!!!!!!!!!!!!!!!!!!!!!」に変更して、検証してみます。
■StringLength.xml

<?xml version="1.0"  encoding="UTF-8"?>
<greeting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="StringLength.xsd" attribute="Hello World!!!!!!!!!!!!!!!!!!!!!!">
  Hello World!!!!!!!!!!!!!!!!!!!!!!
</greeting>


「StringLength.xsd」では、タグ値とattribute属性値は1〜20文字までの文字列なので、検証エラーになります。