Элементы в случайном порядке и maxOccurs> 1

Мне нужно создать XSD 1.0, который проверяет XML- файл.

Валидация будет использовать lxml.etree из python , и этот инструмент поддерживает только XML Schema 1.0 ( lxml со схемой 1.1 )

Структура, которую мне нужно использовать, имеет тип:

item | owners* | config+ | | config_id | | tests* | | picked? | | capability* | | | name | | | value 

Используемые обозначения:

  • * Элемент может начинаться с нуля или более раз.
  • + Элемент может появляться один или несколько раз.
  • ? Элемент не является обязательным.

Элементы в теге config могут быть в любом порядке, это означает, что я не могу использовать индикатор <sequence> . Индикатор <all> дает мне случайный порядок, но в этом случае maxOccurs – это 1. Индикатор <choice> с maxOccurs="unbounded" даст мне случайный порядок и множество элементов, но не будет нижнего предела для элементов.

Мой XSD-файл выглядит примерно так:

 <?xml version="1.0" encoding="ISO-8859-1" ?> <!--Schema version: 1.0, date: 29-02-2016--> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- definition of complex types --> <xs:complexType name="capability_type"> <xs:sequence> <xs:element name="name" type="xs:string" /> <xs:element name="value" type="xs:string" /> </xs:sequence> </xs:complexType> <xs:complexType name="config_type"> <xs:all> <xs:element name="config_id" type="xs:string" /> <xs:element name="tests" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> <xs:element name="picked" type="xs:string" minOccurs="0" /> <xs:element name="capability" type="capability_type" minOccurs="0" maxOccurs="unbounded" /> </xs:all> </xs:complexType> <xs:complexType name="item_type"> <xs:sequence> <xs:element name="owners" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> <xs:element name="config" type="config_type" minOccurs="1" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> <!-- definition of schema --> <xs:element name="item" type="item_type" /> </xs:schema> 

Используя эту схему, я получаю ошибку:

элемент: ошибка парсера схемы: элемент '{ http://www.w3.org/2001/XMLSchema } element': недопустимое значение для maxOccurs (должно быть 0 или 1).

Есть ли альтернативы для моей проблемы?

One Solution collect form web for “Элементы в случайном порядке и maxOccurs> 1”

Да, есть альтернативы:

  1. Полностью отказаться от требования случайного заказа. Это, как правило, больше проблем, чем того стоит.
  2. Частично отказаться от требования случайного порядка, config_id миграцию config_id и config_id вне xs:all и переместив maxOccurs="unbounded" из дочерних элементов xs:all в xs:all yourself.
  3. Сохраняйте требование случайного порядка, перенесите maxOccurs="unbounded" в xs:all и используйте утверждения XSD 1.1 для принудительного применения других ограничений на появление.
  • Python: добавление атрибутов xml-схемы с помощью lxml
  • python использует неверный префикс пространства имен в запросе SOAP
  • pyxb UnrecognizedDOMRootNodeError
  • Проверка XML (.xsd) на схему
  • Автоматический редактор XML (на основе схемы XSD)
  • JAXB эквивалент для генерации классов c ++ из xsd?
  • После xs: include при анализе XSD как XML с lxml в Python
  • Python - лучший язык программирования в мире.