いくつかのタイプの複数の要素を含む xml ドキュメントからスキーマを作成していますが、シリアル化してから逆シリアル化すると維持する必要があるランダムな順序になっています (私は VB.NET でプログラミングしていますが、C# の回答は問題ないので、言語は指定していません)。
<xml version="1.0" encoding="utf-8">
<sample:ABC>
<sample:DEF></sample:DEF>
<sample:XYZ></sample:XYZ>
<sample:DEF></sample:DEF>
<sample:PNQ></sample:PNQ>
<sample:DEF></sample:DEF>
<sample:DEF></sample:DEF>
</sample:ABC>
これまでのところ、xsd.exe によって作成された次のスキーマがあります。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ABC">
<xs:complexType>
<xs:sequence>
<xs:element name="DEF" minOccurs="0" />
<xs:element name="XYZ" minOccurs="0" />
<xs:element name="PNQ" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
ただし、これは xml が入ってくる可能性のあるすべての方法と一致するわけではありません。明らかに、xml とスキーマを大幅に単純化し、問題を簡単に説明できるように 1 つのサンプルのみを示しました。
この要素を使用するという提案を見てきましたall
が、それは各子の 1 つしか許可しません。また、重複する子要素 (たとえば 2 つの DEF 要素) を追加しようとしましたが、「あいまいな」スキーマが作成されます。また、一連の選択要素を使用してみましたが、スキーマから生成されたコードはオブジェクトを使用する必要があるため、タイプ セーフではありません。これを解決するために継承を使用することは可能かもしれないと思いますが、私のスキーマ スキルではそれができません。
問題は、xml に正しく一致させるために使用できるスキーマ要素があるかどうかです。そうでない場合、少なくともxmlの有効性をチェックするために使用できるスキーマを作成できますか?