Проблема с иерархией элементов XML-схемы - PullRequest
0 голосов
/ 03 апреля 2009

Что не так с этой XML-схемой? Он не анализируется правильно, и я не могу понять иерархию между кластером (элемент) -> хост (элемент) -> Load (элемент).

<?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>

Спасибо, Эмилио

Ответы [ 2 ]

1 голос
/ 03 апреля 2009

Чтобы разрешить что-то подобное (я исправил опечатку в "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>

Из MSDN на <xs:complexType> (потому что спецификация делает мой мозг болит):

Если указано group, sequence, choice или all, элементы должны появляются в следующем порядке:

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

Может быть, кто-то еще может указать на соответствующий раздел в спецификации.

1 голос
/ 03 апреля 2009

В элементе host элемент load не может быть дочерним для complexType, у вас должна быть последовательность и т. Д. Между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...