2012-04-08 52 views
0

我對XML的理解並不完全令人驚歎,但我對註解/ appinfo中的內容的理解是您可以使用任何格式良好的XML,並且這種方法的鬆散驗證。我對鬆散驗證的理解是,如果能夠獲得相關的模式信息,元素和屬性將被驗證。驗證XML模式註釋中的XML內容/ appinfo

我的情況是,我有一個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.「整數」如果我這樣做,在該模式中的主體,然後XmlSchemaSet.Compile()會告訴我這個模式無效。

但是,如果我使用上面寫的架構,它告訴我沒有問題。在更復雜的文件,我開始,我通過XmlSchemaSet.Add()

提供的外部架構的XmlSchemaSet我也試着從http://www.w3.org/2001/XMLSchema.xsd加載XML模式和裝載模式被驗證爲XmlDocument和運行XmlDocument.Validate()但沒有喜悅。

我覺得我完全錯過了花費幾個小時後完全基本的東西。任何指針讚賞!

回答

0

這不是我的lax理解:如果你有一個聲明

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

相應的元素在被驗證將針對對應於由指定的命名空間(S)的模式進行驗證的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",這意味着沒有針對任何模式沒有驗證。