Схема XML: как иметь несколько одинаковых элементов? - PullRequest
4 голосов
/ 26 сентября 2010

У меня довольно трудные времена при создании моей первой XML-схемы. Мне нужно, чтобы проверить правильность XML-документа, который формирует анкету.
Итак, вот раздел «не получить»:

Я изменил источник. 1-й ответ относится к этому коду:

<root>
    <values>
        <value>Lorem</value>
        <value>ipsum</value>
        <value>dolor</value>
    </values>
</root>

Теперь моя настоящая цель такова:

<requires>
    <require requires-id="2" type="included">
        <values>  
            <value isRequired="true">Lorem</value>
            <value isRequired="false">Lorem</value>
            <value isRequired="false">Lorem</value>
        </values>
    </require>
    <require requires-id="5" type="excluded">
        <values>  
            <value isRequired="true">Lorem</value>
            <value isRequired="false">Lorem</value>
        </values>
    </require>
</requires>

Может кто-нибудь помочь, пожалуйста, сделать правильную схему? Я использую Sun Multi-Schema XML Validator (MSV) для проверки документа на соответствие схеме.

Заранее спасибо,
Стеф

Ответы [ 2 ]

4 голосов
/ 27 сентября 2010

Это должно сделать это для 1-го XML:

<xs:complexType name="Values">
    <xs:sequence>
        <xs:element name="value" minOccurs="0" maxOccurs="200">
            <xs:complexType>
                <xs:simpleContent>
                    <xs:extension base="xs:string">
                        <xs:attribute name="isOnlyOption" type="xs:boolean"/>
                    </xs:extension>
                </xs:simpleContent>
            </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>
<xs:element name="values" type="Values" minOccurs="0"/>

2-й выглядит следующим образом:

<xs:element name="requires" minOccurs="0">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="require" minOccurs="1" maxOccurs="200">
                <xs:complexType>
                    <xs:attribute name="requires-id" type="xs:IDREF"/>
                    <xs:attribute name="type" type="RequiresType"/>
                    <xs:all>
                        <xs:element name="values" type="Values" minOccurs="0" maxOccurs="1"/>
                    </xs:all>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Обратите внимание на ссылку на пользовательский тип данных «Значения» из1-й фрагмент.

Спасибо,
Steff

2 голосов
/ 26 сентября 2010

Я не знаю, что именно нужно проверять, но следующая XML-схема будет проверяться для трех тегов значений в теге значений в корневом теге. Значения должны быть строками:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://yourSchema">
  <xsd:element name="root">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="values" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="values">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="value" type="xsd:string" minOccurs="3" maxOccurs="3" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
...