Проверка XSD для несортированного и только одного неограниченного элемента - PullRequest
0 голосов
/ 26 ноября 2008

У меня есть XML-файл, подобный этому:

<customer>
  <field1 />
  <field2 />
  <field3>
    <item1 />
  </field3>
  <field3>
    <item1 />
  </field3>
</customer>

поле * может появляться в любом порядке, и только поле3 может появляться более одного раза.

Как создать XSD-файл для проверки этого?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 26 ноября 2008

Попробуйте это

Я не гуру, но это похоже на работу.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="customer" type="customerType"/>
  <xs:complexType name="customerType">
    <xs:sequence>
      <xs:element name="field1" minOccurs="1" maxOccurs="1">
      </xs:element>
      <xs:element name="field2" minOccurs="1" maxOccurs="1">
      </xs:element>
      <xs:element name="field3" type="field3Type"
                  minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="field3Type">
    <xs:sequence>
      <xs:element name="item1">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

инструменты

Я использовал XML Copy Editor , но есть множество редакторов, которые будут проверять XML.

ссылки

Возможно, вас также заинтересует эта статья о создании XSD из файла XML.

0 голосов
/ 27 ноября 2008

Хм, это такая работа, для которой xsd действительно не подходит. Во всяком случае, это должно сработать, если я не ошибся:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/NewXMLSchema"
xmlns:tns="http://www.example.org/NewXMLSchema" elementFormDefault="qualified">

  <element name="customer" type="tns:customerType"/>
  <complexType name="customerType">
    <sequence>
      <element>
        <complexType>
          <all>
            <element>
              <complexType>
                <sequence>
                  <element ref="tns:field3" maxOccurs="unbounded"/>
                  <element ref="tns:field1" maxOccurs="1"/>
                </sequence>
              </complexType>
            </element>
            <element>
              <complexType>
                <sequence>
                  <element ref="tns:field3" maxOccurs="unbounded"/>
                  <element ref="tns:field2" maxOccurs="1"/>
                </sequence>
              </complexType>
            </element>
            <element>
              <complexType>
                <sequence>
                  <element ref="tns:field3" maxOccurs="unbounded"/>
                  <element ref="tns:field4" maxOccurs="1"/>
                </sequence>
              </complexType>
            </element>
          </all>
        </complexType>
      </element>
      <element ref="tns:field3" maxOccurs="unbounded" />
    </sequence>
  </complexType>
  <complexType name="field1Container"/>
  <complexType name="field2Container"/>
  <complexType name="field3Type">
    <sequence>
      <element name="item1"/>
    </sequence>
  </complexType>
  <complexType name="field4Container"/>
  <element name="field3" type="tns:field3Type"/>
  <element name="field1"/>
  <element name="field2"/>
  <element name="field4"/>
</schema>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...