XML模式:复杂类型是否可以包含另一个复杂类型作为元素?

时间:2013-09-27 14:15:21

标签: xml xsd

XML复杂类型是否包含另一种复杂类型的元素?如果是这样,所包含的复杂类型的子元素如何处理?

1 个答案:

答案 0 :(得分:2)

是的,它可以。这是来自某些任意XSD(ACORD)的片段:

   <xsd:complexType name="CovOptionXLat_Type">
      <xsd:sequence>
         <xsd:element ref="Language" minOccurs="0"/>
         <xsd:element ref="ShortName" minOccurs="0"/>
         <xsd:element ref="PlanName" minOccurs="0"/>
         <xsd:element ref="OLifEExtension" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID"/>
      <xsd:attribute name="DataRep" type="DATAREP_TYPES"/>
   </xsd:complexType>
   <xsd:element name="OLifEExtension" type="OLifEExtension_Type"/>
   <xsd:complexType name="OLifEExtension_Type" mixed="true">
      <xsd:sequence>
         <xsd:any processContents="skip" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="VendorCode" use="required" type="xsd:string"/>
      <xsd:attribute name="ExtensionCode" type="xsd:string"/>
      <xsd:attribute name="DataRep" type="DATAREP_TYPES"/>
      <xsd:attribute name="SystemCode" type="xsd:string"/>
   </xsd:complexType>

为了更好地形象化上述内容:

enter image description here

复杂类型可以定义属性,文本节点,与其他元素混合,或只是元素,或者根本没有元素/属性(空)。

子元素可以是简单,复杂或任何类型。它们的处理方式与其他任何元素一样。如果您正在考虑XML文档实例的根元素,那么嵌套元素(在复杂类型中)和文档元素之间的区别在于前者可以根据需要多次发生,并且您可以拥有尽可能多的元素你想要的不同类型和名字;而对于后者,您只能有一个文档元素。

还有与如何命名元素及其可能具有的类型相关的规则(例如,在某些条件下,您可能无法使用相同类型的相同名称),元素如何组合(选项,序列) ,所有),Unique Particle Attribution

如果你正在寻找一般的XSD介绍,互联网上有很多。如果你习惯于更正式的写作,我会发现XSD primer是一个很好的阅读。