2012-04-08 51 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",这意味着没有针对任何模式没有验证。