特定のルールを検証するスキーマを持つ方法を見つけようとしていますが、xs:all、xs:choice、xs:group、および xs:sequence のさまざまな組み合わせを試しましたが、成功しませんでした。ルールは基本的に次のとおりです。
- LICAPPIN01 要素は 1 回だけ出現する必要があります。
- LICAPPIN99 要素は 1 回だけ出現する必要があります。
- LICAPPIN30 と LICAPPIN31 の数は同じでなければなりません。
- LICAPPIN40 と LICAPPIN41 の数は同じでなければなりません。
- LICAPPIN30/31 または LICAPPIN40/41 の少なくとも 1 つのセットが必要です (両方が存在する場合もあります)。
- 上記のすべてについて、順序は重要ではありません。どの順序でもかまいません。
私たちが試した最も単純なスキーマは次のとおりです。
<?xml version="1.0" standalone="yes"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="NewDataSet">
<xs:complexType>
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="LICAPPIN01" minOccurs="1" maxOccurs="1">
</xs:element>
<xs:element name="LICAPPIN30" minOccurs="1" maxOccurs="unbounded">
</xs:element>
<xs:element name="LICAPPIN31" minOccurs="1" maxOccurs="unbounded">
</xs:element>
<xs:element name="LICAPPIN40" minOccurs="1" maxOccurs="unbounded">
</xs:element>
<xs:element name="LICAPPIN41" minOccurs="1" maxOccurs="unbounded">
</xs:element>
<xs:element name="LICAPPIN99" minOccurs="1" maxOccurs="1">
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
これにはいくつかの問題があります。
- 複数の LICAPPIN01 と LICAPPIN99 を許可します (xs:all に置き換えると、これが修正される可能性があります?)
- ルール 3 と 4 は適用されません。
- ルール 5 では、2 つのセットのうち 1 つしか持てないはずなのに、LICAPPIN30/31 と LICAPPIN40/41 の両方を強制するようです。
また、LICAPPIN30/31 と LICAPPIN40/41 に対して xs:group を使用してより複雑なアプローチを試みましたが、ルール 6 に違反しました。
これが私たちの基本的なルールをすべて満たすことができるかどうか、何か考えはありますか? 比較的単純なスキーマで。上記の例では、各 LICAPPINnn 要素内のすべての詳細を削除しました。それらにはそれぞれ複雑な型が含まれており、理想的にはこれらを複数の場所で複製する必要はありません。
ありがとう、デニス