-1

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()が、喜びはありませんでした。

これに何時間も費やした後、私は完全に基本的なものを完全に見逃しているように感じます. 任意のポインタをいただければ幸いです!

4

1 に答える 1

1

これは私の理解ではありませんlax:宣言がある場合

<any
  namespace=". . . " 
  processContents="lax">
</any>

検証される XML 内の対応する要素のコンテンツは、namespace(存在する場合) によって指定された名前空間に対応するスキーマに対して検証されます。使用されている可能性のあるスキーマに対してではありません。の宣言appInfo

<xs:element name="appinfo" id="appinfo">
  <xs:complexType mixed="true">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:any processContents="lax"/>
    </xs:sequence> 
    <xs:attribute name="source" type="xs:anyURI"/> 
    <xs:anyAttribute namespace="##other" processContents="lax"/> 
  </xs:complexType> 
 </xs:element>

namespaceに対応する指定がないnamespace="##any"場合、スキーマに対する検証が行われないことを意味します。

于 2012-04-09T14:38:53.330 に答える