ぽっくるのITざっき

IT関連技術についての覚え書きです。不定期更新です。

【XML Schema】xsd:patternの派生は可能か?

2007-12-15 19:23:33 | Weblog
次のようなXML Schema文書を作成。PatternTestタイプはPatternTestBaseタイプを
派生させているが、それぞれxsd:patternにより文字列パターンによる制限を行っている。

 <?xml version="1.0" encoding="Shift_JIS"?>
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="PatternTest" type="PatternTestType"/>
  <xsd:complexType name="PatternTestType">
   <xsd:sequence>
    <xsd:element name="Pattern" type="PatternType" maxOccurs="unbounded"/>
   </xsd:sequence>
  </xsd:complexType>
  <xsd:simpleType name="PatternTypeBase">
   <xsd:restriction base="xsd:string">
    <xsd:pattern value="[a-g]+"/>
   </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="PatternType">
   <xsd:restriction base="PatternTypeBase">
    <xsd:pattern value="[a-h]+"/>
   </xsd:restriction>
  </xsd:simpleType>
 </xsd:schema>

このスキーマ文書を用いて次のXML文書を検証すると、エラーになる。

 <?xml version="1.0" encoding="Shift_JIS"?>
 <PatternTest>
  <Pattern>abcdefg</Pattern>
  <-- ここでエラー -->
  <Pattern>abcdefgh</Pattern>

 </PatternTest>

どうもパターンで制限をしたタイプからのパターンの派生はできないらしい。
一番もととなる型のパターン制限が有効になるようだ。

【XMLパーサ】Xerces-J 2.9.0
【OS】Windows XP Professional Edition + SP2