Элемент XSD не соответствует элементу

Я должен проверить XML с XSD.
XML может выглядеть так:

<content>
  <uuid>1234</uuid>
  <type>group1</type>
  ... some more elements
</content>

XML также может выглядеть так:

<content>
  <uuid>asdf</uuid>
  <type>group2</type>
  ... some other elements which may differ from the first XML
</content>

В первом XML uuid имеет тип xs:integer, Во втором XML UUID имеет тип xs:string,

Чтобы проверить эти XML в XSD, я решил использовать groups в пределах choice,

Мой XSD выглядит так:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1">
  <xs:element name="content">
    <xs:complexType>
        <xs:sequence>
            <xs:choice>
                <xs:group ref="group1"/>
                <xs:group ref="group2"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:group name="group1">
    <xs:sequence>
      <xs:element name="uuid" type="xs:integer"/>
      ... some more elements
    </xs:sequence>
  </xs:group>
  <xs:group name="group2">
    <xs:sequence>
      <xs:element name="uuid" type="xs:string"/>
      ... some more elements which may differ from the first XML
    </xs:sequence>
  </xs:group>
</xs:schema>

С XMLSpy я получаю следующую ошибку:

Element 'uuid' is not consistent with element 'uuid'.

Да, они не соответствуют друг другу, но это именно то, что я хочу иметь:-)
Итак, как мне изменить XSD, чтобы я мог использовать один и тот же элемент (ы) с разными типами в разных группах, но с одинаковым выбором? UUID не единственный элемент, который может отличаться, поэтому я реализовал group-решение.

Спасибо за помощь!

РЕДАКТИРОВАТЬ Чтобы обойти неоднозначность uuid, порядок в этом примере не важен. также может быть последним элементом.

1 ответ

Любые два элемента с одинаковым именем и одним и тем же родителем должны иметь одинаковый тип в XSD. В этом суть ограничения "согласование деклараций элементов". Исходя из формулировки ошибки, я считаю, что XML Spy сообщает вам, что вы нарушили это ограничение. (Вы также нарушили ограничение "Уникальная атрибуция частиц".

Если вы хотите, чтобы ваш uuid элемент, чтобы принять или строки или целые числа, назначьте ему тип, который является объединением целого числа и строки. Порядок важен, так как первое совпадение определяет способ ввода значения элемента в информационном наборе после проверки схемы.

Другие вопросы по тегам