2015-06-15 4 views
0

Когда я пытаюсь проверить эту XSD:Преобразование XSD 1.1 до 1.0 - Ошибка проверки

<xs:group name="ValidityDateGroup"> 
    <xs:annotation> 
     <xs:documentation>Reusable element group to be used where Valid From/Until needs to be captured in xs:date format</xs:documentation> 
    </xs:annotation> 
    <xs:all> 
     <xs:element minOccurs="0" name="ValidFrom" type="xs:date"/> 
     <xs:element minOccurs="0" name="ValidUntil" type="xs:date"/> 
    </xs:all> 
</xs:group> 

<xs:complexType name="NameType"> 
    <xs:choice maxOccurs="unbounded" minOccurs="0"> 
     <!-- SNIP - many more choices here --> 
     <xs:group ref="ValidityDateGroup"/> <!-- THIS IS WHERE THE ERROR IS --> 
    </xs:choice> 
</xs:complexType> 

Я получаю следующее сообщение об ошибке:

An 'all' model group must appear in a particle with '{'min occurs'}' = '{'max occurs'}' = 1, and that particle must be of a pair which constitutes the '{'content type'}' of a complex type definition.

Единственный способ, которым я был в состоянии получить эту работа как 1,0 XSD является путем изменения «все» в «последовательности»:

<xs:group name="ValidityDateGroup"> 
    <xs:annotation> 
     <xs:documentation>Reusable element group to be used where Valid From/Until needs to be captured in xs:date format</xs:documentation> 
    </xs:annotation> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="ValidFrom" type="xs:date"/> 
     <xs:element minOccurs="0" name="ValidUntil" type="xs:date"/> 
    </xs:sequence> 
</xs:group> 

, но это заставляет конкретный заказ.

Есть ли у кого-нибудь идеи, как заставить XSD работать с XSD 1.0?

ответ

1

Вы не можете заставить это работать с XSD 1.0. «Все» не допускается как часть выбора. Это действительно так и в 1.1.

Но чего вы на самом деле пытаетесь достичь? У вас есть выбор только с одной ветвью, которая явно избыточна, за исключением того, что она задает max = unbounded. Ваша группа «все» говорит, что From и Until являются необязательными и могут отображаться в любом порядке, а ваш max=unbounded говорит, что группа может появляться любое количество раз. Для меня это означает, что ваш контент может содержать любое количество элементов From и любое количество элементов Until, и они могут происходить в любом порядке. То есть, это означает,

<choice maxOccurs="unbounded"> 
    <element name="From"/> 
    <element name="Until"/> 
</choice> 
+0

Извините, я не был достаточно ясен. Этот XSD происходит из WSDL, который должен анализироваться в .NET (поэтому должен быть XSD 1.0). У выбора есть много филиалов - я просто оттолкнул их, поскольку они не были релевантными - теперь это исправлено. –

0

мне удалось получить эту работу на основе от ответа Майкла, но оборачивать выбор в последовательности в ValidityDateGroup:

<xs:group name="ValidityDateGroup"> 
    <xs:sequence> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element minOccurs="0" name="ValidFrom" type="xs:date"/> 
      <xs:element minOccurs="0" name="ValidUntil" type="xs:date"/> 
     </xs:choice> 
    </xs:sequence> 
</xs:group> 

Таким образом, чтобы цитировать Майкл, мое содержание «может содержат любое количество элементов From и любое количество элементов Until, и они могут встречаться в любом порядке ». Это также сохраняет ValidityDateGroup, которая может быть повторно использована в другом месте.

Смежные вопросы