既存の XML ドキュメントの XSD を作成しようとしています。XML を実際に変更することはできないため、XSD を適合させる必要があります (これはやや逆であることはわかっています)。
XML には、Group と呼ばれる要素があります。この要素には 1 つ以上の機能があります。約 40 の有効な機能名があります。そこで、それらを Enum としてモデル化することにしました。列挙型は次のようになります。
<xs:simpleType name="FeatureNamesEnumType">
<xs:restriction base="xs:normalizedString">
<xs:enumeration value="Feature1"/>
<xs:enumeration value="Feature2"/>
<xs:enumeration value="Feature3"/>
</xs:restriction>
</xs:simpleType>
次に、グループには次のものがあります。
<xs:complexType name="groupType">
<xs:attribute type="FeatureNamesEnumType" name="features" use="required"/>
</xs:complexType>
私がよく遭遇する問題は、XML ファイルで、属性が機能のコンマ区切りリストに設定されている可能性があることです。例えば:
<group name="Group1"
features="Feature1,Feature2"
</group>
このコンマ区切りのリストは列挙に含まれていないため、これは XSD に対して検証されません。
グループに一連のフィーチャを含めるのが最善であることはわかっていますが、XML ファイルを変更できないため、それはオプションではありません。
私の目標は、機能が列挙値と一致しない場合に検証を失敗させることです。したがって、たとえば、次を無効にしたいと思います。
<group name="Group1"
features="Feature1,Featur2"
</group>
スペルミスにより、これが無効になるはずです。Group の features 属性が、有効な列挙値のみで構成されたコンマ区切りのリストを受け入れることを XSD で示す方法はありますか?