2013-07-25 45 views
1

也许我错过了一些东西,但任何人都可以向我解释的意义和XmlSchemaElement类的以下特性的差异:XmlSchemaElement类属性意味着

  1. 什么是X mlSchemaElement.ElementSchemaTypeXmlSchemaElement.ElementType之间的区别是什么?
  2. QualifiedName, SchemaTypeName and RefName有什么区别?
  3. QualifiedName, SchemaTypeName and RefName如何相互关联?当SchemaTypeName.IsEmpty == true,这是否意味着RefName.IsEmpty == false
  4. 是否有可能所有*Names将是Empty,这是什么意思,一个嵌入的ComplexType?

一般来说,我需要解析xsd并将结果映射到内部结构,所以我需要一些规则,它允许我生成不同类型的对象。假设if (SchemaTypeName.IsEmpty)然后在ElementSchemaType我有SimpleType提供的所有限制。

回答

1
  1. XmlSchemaElement.ElementType自2.0以来已过时,否则它们是相同的。
  2. QualifiedName表示元素的实际限定名称,因为XML实例文档中的相应XML元素会拥有它。 SchemaTypeName表示赋予元素的类型的名称(可以是内置的XSD,如int或用户定义类型,如mine)。的RefName表明粒子,而作为一个元件,实际上是在别处在模式到全局定义的元素的引用(见下文)

    <xsd:element name="Global" type="xsd:string"/> 
    <xsd:group name="some"> 
        <xsd:sequence> 
         <xsd:element name="Local" type="xsd:int"/> 
         <xsd:element ref="Global" minOccurs="0"/> 
        </xsd:sequence> 
    </xsd:group> 
    
  3. 不幸的是,不一定是真实的;例如,如果没有与该元素相关联的类型(默认情况下意味着xsd:anyType)。

  4. 不,请参阅上文(anyType)。

此外,事情变得更加复杂。如果在XSD中没有引用的组下面有一个元素粒子,那么有趣的部分是该组下的元素粒子的PSVI属性不会被填充......我从来不打算弄清楚这是否是一个功能或一个bug ......我做的是建立一个使用所有这些属性的访问者,并试图处理它发现的一点信息......对我来说,这种方法也证明了.NET修补程序对年...

相关问题