Схема плоского файла для BizTalk с несколькими повторяющимися и необязательными записями - PullRequest
0 голосов
/ 23 апреля 2019

Проблема: я получаю сложный плоский файл, структуру которого я не могу изменить.
Это выглядит как следующий пример (хотя оригинальный намного сложнее):

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>

1 Ответ

0 голосов
/ 23 апреля 2019

Итак, это совсем не кажется сложным.

Если в структуре TA_, FRA, AUF и LS_ нет двусмысленности, у вас есть простой структурированный плоский файл.

Ключ при запуске мастера создания плоских файлов, вы выбираете весь цикл, TA_, FRA, AUF, LS_ плюс всех их потомков в качестве повторяющегося элемента.

Затем Мастер вернется назад и позволит вам определить сам цикл.

В этом случае Мастер должен выполнить возврат по крайней мере 4 раза, по одному для каждого из TA_, FRA, AUF и LS_, затем для каждой записи, например, REF.

Запускайте Волшебника столько раз, сколько вам нужно, чтобы все было правильно. В этом нет ничего плохого.

...