2010-10-19 6 views
11

В моем XSD я хочу иметь возможность указать, что порядок элементов не имеет значения. Это то, что у меня есть:XML-порядок элементов элементов

<xs:element name="ADT_A08_231_GLO_DEF"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element minOccurs="1" maxOccurs="1" name="EVN_EventTypeSegment" type="xs:string" /> 
     <xs:element minOccurs="1" maxOccurs="1" name="PID_PatientIdentificationSegment" type="xs:string" /> 
     <xs:element minOccurs="0" maxOccurs="1" name="PD1_PatientAdditionalDemographicSegment" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Как я могу сделать это так, чтобы элемент EVN и PID может произойти случайный (первый EVN затем PID или первый PID элемент, а затем элемент EVN) в файле XML?

<EVN_EventTypeSegment>Test</EVN_EventTypeSegment> 
<PID_PatientIdentificationSegment>PIDTest</PID_PatientIdentificationSegment> 

или:

<PID_PatientIdentificationSegment>PIDTest</PID_PatientIdentificationSegment> 
<EVN_EventTypeSegment>Test</EVN_EventTypeSegment> 
+0

Почему вы думаете, что хотите это сделать? Потому что вы, вероятно, не хотите этого делать. –

+2

Что это значит? Я должен быть в состоянии сделать это, я получаю определенные сообщения от клиента, и я должен обработать это. Теперь порядок некоторых полей сообщений может быть другим, поэтому в моей схеме я должен учитывать это. Неужели нет способа добиться этого? –

ответ

-1

Я сделал это возможным с помощью выбора группы: D

+6

пример был бы более полезным – chharvey

+0

Недостатком группы выбора здесь является то, что она не решает описанную проблему: группа выбора должна повторять, чтобы могли произойти как EVN, так и PID, а затем нет что ни EVN, ни PID не могут повториться. –

9

Измените xs:sequence в вашей схеме документа xs:all. Все группы, содержащие ссылки на (или объявления) элементов A, B и C, выполняются тогда и только тогда, когда A, B и C присутствуют в некотором порядке. Элементы могут иметь minOccurs, установленный в 0, чтобы сделать их необязательными (например, ваш элемент PD1_PatientAdditionalDemographicSegment).

В XSD 1.0 дети из группы должны иметь maxOccurs из 1, что некоторые люди считают неудобно ограничительными, но в вашем случае это то, что вы хотите в любом случае. В XSD 1.1 это ограничение отменено.

22

Использовать xs:all вместо xs:sequence.

+0

Нет смысла добавлять новые ответы, которые не добавляют новую информацию к старым сообщениям, однако ваш ответ легче читать, поэтому + 1'd – vdbuilder

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