2016-07-11 2 views
1

У меня есть структуру XML, которая выглядит следующим образом:все MaxOccurs неограниченными в XSD версии 1.0

<node> 
    <!-- node contains a lot of optional property nodes, 
     and the order is random. --> 
    <property2>value</property2> 
    <property1>value</property1> 
    <property4>value</property4> 
    <property3>value</property3> 

    <!-- node also contains 0-to-unbounded child elements 
     to simplify things, these are listed after the properties. --> 
    <child> ... </child> 
    <child> ... </child> 
    <child> ... </child> 
</node> 

Я понимаю, что в XSD 1.1 можно проверить это следующим образом:

<xs:all> 
    <xs:element name="property1" minOccurs="0"/> 
    <xs:element name="property2" minOccurs="0"/> 
    <xs:element name="property3" minOccurs="0"/> 
    <xs:element name="property4" minOccurs="0"/> 
    ... 

    <xs:element name="child" minOccurs="0" maxOccurs="unbounded"/> 
</xs:all> 

К сожалению, Я должен сделать это в XSD 1.0. (т. Е. Приложение-потребитель не поддерживает XSD 1.1.) Однако XSD 1.0 не допускает ограничений для элементов, которые определены в узле xs:all, maxOccurs="unbounded".

Не все должно быть проверено строго.

  • Но важно, чтобы узлы свойств были определены только один раз (например, не несколько раз property3).
  • Важно, чтобы внешний вид не был строгим.
  • Важно, чтобы дочерние узлы отображались более одного раза.

ответ

1

Если эти свойства не имеют подструктуры, считайте их атрибутами, а не элементами; то вы можете иметь незначительное количество заказов.

В противном случае укажите порядок расположения элементов собственности и не беспокойтесь об этом. Никогда не видел, чтобы заказ заказывал чрезмерную нагрузку на приложение, генерирующее XML-данные. Вместо этого разработчик XSD всегда не видит в себе неотъемлемой потребности в заказе и страхах, накладывающих одно произвольно. На самом деле, однако, последовательность работает отлично, если сам порядок элементов не используется для передачи информации. Во всех остальных случаях XSD 1.0 xs:sequence будет в порядке.

+0

Это действительно проблема с наследием. Существует не только одно приложение, но есть несколько приложений, которые взаимодействуют с использованием согласованного формата xml (около 20 из этих приложений). Эти приложения поддерживаются разными компаниями, и первоначально, когда они разрабатывались, спецификации формата XML не всегда определяли один и тот же порядок для свойств. (например, иногда они упорядочивались в алфавитном порядке.) Центральная система не возражает против того, в каком порядке расположены узлы. Поэтому мы хотим использовать XSD для проверки имен узлов и обязательных полей. Но мы не хотим применять новые правила. – bvdb

+0

Понял. К сожалению, тогда ситуация разрешилась до такой степени, что ваши «важные» ограничения не могут быть одновременно проверены в XSD 1.0. – kjhughes