Проблема: я получаю сложный плоский файл, структуру которого я не могу изменить.
Это выглядит как следующий пример (хотя оригинальный намного сложнее):
VER123456
TA_ExampleContent
REFExampleReference
FRAExampleContent
REFExampleReference
AUFExampleContent
REFExampleReference
LS_ExampleContent
REFExampleReference
Каждая запись состоит из тега и данных. Возможно, что один и тот же тег может использоваться на разных уровнях структуры данных, например REF. Используется для TA_, FRA, AUF и LS_. В приведенном выше примере создается впечатление, что все теги находятся на одном уровне, но это не так. Структура выглядит следующим образом:
VER123456
TA_ExampleContent
REFExampleReference
FRAExampleContent
REFExampleReference
AUFExampleContent
REFExampleReference
LS_ExampleContent
REFExampleReference
Когда я использую последовательность или группу выбора, данные будут находиться на одном уровне в выходном XML-файле.
Например, записи REF имеют настроенное минимальное вхождение 0 и максимальное вхождение неограниченное. Пока существует хотя бы одна запись REF, проверка успешна. Если нет записи REF, которая является допустимой опцией, проверка .xsd завершается неудачно с сообщением «Элемент xyz имеет неполное содержимое.»
Что бы я хотел иметь:
Описание того, как создать схему, которая может обрабатывать такой сложный плоский файл, как приведенный выше. Также я ищу правильный способ справиться с необязательными записями.
<VER>
<TA_>
<Field01></Field01>
<Field02></Field02>
<FRA>
<Field01></Field01>
<Field02></Field02>
<REF>
<Field01></Field01>
<Field02></Field02>
</REF>
<REF>
<Field01></Field01>
<Field02></Field02>
</REF>
<AUF>
<Field01></Field01>
<Field02></Field02>
<REF> -- could be not available
<Field01></Field01>
<Field02></Field02>
</REF>
<LS_>
<Field01></Field01>
<Field02></Field02>
<REF>
<Field01></Field01>
<Field02></Field02>
</REF>
</LS_>
</AUF>
</FRA>
<REF>
<Field01></Field01>
<Field02></Field02>
</REF>
</TA_>
</VER>