次のようなスキーマがあります。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="MyDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Leaf" />
<xs:complexType name = "Leaf" mixed="true">
<xs:attribute name="ID" type="xs:string" />
</xs:complexType>
<xs:element name="Frame" />
<xs:complexType name="Frame" mixed="true">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Leaf" type ="Leaf" nillable="true"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Frame" type="Frame" nillable="true"/>
</xs:sequence>
<xs:attribute name="ID" type="xs:string" />
</xs:complexType>
<xs:element name="Document">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="Version" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="MetaData1" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="MetaData2" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="unbounded" name="Page" nillable="false">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Frame" type="Frame" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
基本的に再帰的な構造です。ドキュメントには、ページのリストを含めることができます。少なくとも 1 ページが含まれている必要があります。ページは、フレームのリストで構成されます。フレームには、サブフレームまたはリーフを含めることができます (つまり、サブフレームを含めることはできません)。MetaData1 と MetaData2 はオプションであり、どこにでも使用できます。
サンプル XML は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<Document>
<Version>1.1</Version>
<MetaData1>Somemetadata</MetaData1>
<Page>Page1
<Frame ID="1">Frame1
<Frame ID="2">SubFrame1
<Frame ID="3">SubFrame2
<Leaf ID="1">Alone</Leaf>
</Frame>
<Leaf ID="2">Alone2</Leaf>
</Frame>
</Frame>
<Frame ID="3">SubFrame3
</Frame>
</Page>
<MetaData2 />
</Document>
XmlReaderSettings と XmlSchemaSet を使用して、スキーマに対して XML 検証を行っています。何らかの理由で、次の 2 つのエラーが発生します。
1) {"要素 'Document' には無効な子要素 'Metadata2' があります。予想される可能な要素のリスト: 'Page'."}
私の場合、これらの要素は任意の順序で表示されるのに対し、順番に読み取っているためだと思います。xs:all 属性を実行しようとしましたが、maxoccurs=unbounded では機能しません。その他の方法で ?
2) {"要素 'Frame' には無効な子要素 'Leaf' があります。予想される可能な要素のリスト: 'Frame'."}
これは (1) と同じでしょうか? リーフID=2でエラー発生
どんな助けでも大歓迎です。ありがとう