xml架构元素层次结构的问题

时间:2009-04-03 08:57:01

标签: xsd

这个xml架构出了什么问题?它没有正确解析,我无法实现cluster(element) - > host(element) - > Load(element)之间的层次结构。

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="cluster">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="host"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="host">
    <xs:complexType>
      <xs:element ref="Load"/>
      <xs:attribute name="name" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="Load">
    <xs:complexType>
      <xs:attribute name="usedPhisicalMemory" type="xs:integer"/>
    </xs:complexType>
  </xs:element>

</xs:schema>

谢谢你,Emilio

2 个答案:

答案 0 :(得分:1)

在host元素中,load元素不能是complexType的子元素,中间必须有序列等。

             

答案 1 :(得分:1)

允许这样的事情(我纠正了"usedPhysicalMemory"中的拼写错误):

<cluster>
  <host name="foo">
    <Load usedPhysicalMemory="500" />
  </host>
  <host name="bar">
    <Load usedPhysicalMemory="500" />
  </host>
</cluster>

这个架构会这样做:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="cluster">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="host" maxOccurs="unbounded" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="host">    
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Load" />
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" use="required" />
    </xs:complexType>
  </xs:element>

  <xs:element name="Load">
    <xs:complexType>
      <xs:attribute name="usedPhysicalMemory" type="xs:integer" />
    </xs:complexType>
  </xs:element>    

</xs:schema>

From the MSDN on <xs:complexType>(因为the spec让我的大脑受伤):

  

如果指定groupsequencechoiceall,则元素必须   按以下顺序显示:

     
      
  1. group | sequence | choice | all
  2.   
  3. attribute | attributeGroup
  4.   
  5. anyAttribute
  6.   

也许其他人可以指出规范中的相关部分。