私が理解している質問を要約すると、要素車の可能な値のリストを維持し、その境界リストの外側に表示される値も受け入れたいということです。これは、を使用してXSDで実現できますUNION
。以下の例で説明しました。
サンプルXML:
<?xml version="1.0" encoding="utf-8"?>
<cars>ssd</cars>
XSD:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="cars" type="carsType"/>
<xs:simpleType name="carsType">
<xs:union memberTypes="carsEnum carsAnyString"/>
</xs:simpleType>
<xs:simpleType name="carsEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="Seat"/>
<xs:enumeration value="Opel"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="carsAnyString">
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:schema>
上記のXSDでは、CARの複数の定義を使用しています。1つは列挙型リストとして、もう1つは任意の文字列として使用しています。これら2つを組み合わせたUNIONタイプを定義すると、type
自動車用になります。
したがって<cars
、Seat、Opel、anyOtherCar、AnyString2のような値を持つことができます。
また、の値を制御する方法についても説明しますANY STRING
。上記のXSDは、特別な文字や数字を意味する任意の文字列を受け入れることができます。restriction pattern
アルファ文字のみに追加することで、これを制限できます。以下はXSDコードです。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="cars" type="carsType"/>
<xs:simpleType name="carsType">
<xs:union memberTypes="carsEnum carsAnyAlphaString"/>
</xs:simpleType>
<xs:simpleType name="carsEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="Seat"/>
<xs:enumeration value="Opel"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="carsAnyAlphaString">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Za-z]*"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
したがって、可能な値はSeat, Opel, "Any string but no Number", "Any string but no special char"
交換
`<xs:pattern value="[A-Za-z]*"/>`
に
<xs:pattern value="[A-Za-z]+"/>
null文字列は許可されません。これは、要素を再定義する方法です。列挙リストに固執するだけではありません。
これで、列挙リストもあるパターンができました。それが役に立てば幸い。