XML についての私の理解はまったく驚くべきものではありませんが、annotation/appinfo のコンテンツについての私の理解では、整形式の XML はすべて許可されており、これは十分に検証されていません。緩い検証についての私の理解では、関連するスキーマ情報を取得できれば、要素と属性が検証されるということです。
私の状況では、検証が必要なこのセクションのコンテンツを含む XML スキーマがあります。コンテンツを検証するための関連スキーマがあります。
以下に示すように、完全に単純な XML スキーマに appinfo 要素を追加しました。appinfo の内容は、別のスキーマを参照しないようにするためだけに、別の要素宣言になっています。私が検証しようとしているスキーマは、明らかに別のものを参照しています。
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.demo.org"
xmlns="http://www.demo.org"
elementFormDefault="qualified">
<xsd:annotation>
<xsd:appinfo>
<xsd:element name="Demo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="A" type="xsd:iteger"/>
<xsd:element name="B" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Demo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="A" type="xsd:integer"/>
<xsd:element name="B" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
appinfo セクションで、要素 A の「integer」のスペルを意図的に間違えていることに注意してください。スキーマの本体でこれを行うと、XmlSchemaSet.Compile()
このスキーマが無効であることがわかります。
しかし、上に書かれているスキーマをそのまま使えば問題ありません。最初に使用したより複雑なファイルでは、XmlSchemaSet に外部スキーマを指定しました。XmlSchemaSet.Add()
また、 http://www.w3.org/2001/XMLSchema.xsdから XML スキーマを読み込んで検証するスキーマをロードしてXmlDocument
実行しようとしましたXmlDocument.Validate()
が、喜びはありませんでした。
これに何時間も費やした後、私は完全に基本的なものを完全に見逃しているように感じます. 任意のポインタをいただければ幸いです!