Как определить последовательность элементов с одинаковыми именами, но разными типами в XML-схеме? - PullRequest
0 голосов
/ 26 января 2010

Просто чтобы быть кратким, я хочу получить что-то вроде этого:

<root>
    <field value="..." text="...">fixed_value1</field>
    <field value="..." text="...">fixed_value2</field>
    <field value="..." text="...">fixed_value3</field>
    <!-- in some cases we can choose the «fixed_value» among different ones -->
    ...
    <field value="..." text="...">fixed_valueN</field>
</root>

Я пробовал разные способы, но, кажется, совершенно невозможно достичь этого, поскольку XML-схема не позволяет задавать список элементов с одинаковыми именами, но разными типами (простой или сложный не имеет значения ...) Это правильно? Нет другого способа определить структуру как выше?

РЕДАКТИРОВАТЬ: может быть, я должен объяснить это немного лучше. Между открывающим и закрывающим тегом элемента «field» должно быть значение, определенное XML-схемой (другими словами, для пользователя невозможно написать что-то отличное от fixed_value). Другой пример:

<root>
    <field value="Ferrari" text="company">Car</field>
    <!-- but it could be Van or Motorcycle or Plane -->
    <field value="12300000" text="euro">Cost</field>
    <!-- here instead it's only possible to choose «Cost» -->
    <field value="Red" text="">Color</field>
    <!-- same as above -->
</root>

Это возможно? Заранее спасибо!

1 Ответ

1 голос
/ 26 января 2010

Попробуйте следующее XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="root" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="field" nillable="true">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="value" type="xs:string" />
                <xs:attribute name="text" type="xs:string" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>
...