Генерация XML с мэйнфреймом Cobol

Мне нужно создать XML-файл из сложной структуры COBOL (мейнфрейм). Я не могу использовать функцию XML GENERATE cobol, потому что дерево данных слишком велико, чтобы поместиться в WS (около 8 вложенных массивов, каждый из которых содержит около 75 вхождений по 30 байт), поэтому нет ни одного элемента группы, который можно передать в функцию генерации xml,

Единственный вариант, о котором я могу подумать, - это генерировать xml "вручную", проходя иерархию на уровне необходимых таблиц adabas по уровням и заполняя файл, проблема для меня в том, что я не знаю, как перейти файл снова каждый раз и "Nest" следующий узел.

Есть ли способ лучше?

Данные поступают из таблиц ADABAS, и я также могу работать с естественным, есть ли лучшее решение, использующее естественное? из того, что я знаю, естественный не позволяет вкладывать более 3-х уровней, что является проблемой для меня.

Спасибо!

3 ответа

Не могу дать однозначного ответа; Некоторые комментарии:

  • Является ли одна большая структура XML единственным путем? Большинство утилит Xml будут бороться с этим видом монолитного XML.
  • Решение для потоковой передачи XML будет работать лучше / будет более удобным, чем написание полной структуры XML за один раз.
  • Вы смотрели на коммерческие утилиты, например, XML Thunder, из памяти есть и другие. Я не могу комментировать, насколько они хороши, сколько они стоят.

Я написал утилиту Cobol to XML на Java. Он берет файл данных Cobol + тетрадь Cobol и преобразует его в XM. Утилита позволяет вам определять Иерархию среди различных Cobol-Records, поэтому вместо использования вложенных массивов вы используете "вложенные" Cobol-Records. Моя утилита Cobol to XML может не соответствовать размеру ваших тетрадей. Но такую ​​утилиту довольно легко написать.


Должно быть достаточно легко скопировать мою утилиту Cobol в Xml:

  • Создание программы Cobol для написания Xml (в потоковом режиме) из тетради Cobol
  • Напишите программу общего назначения Cobol File ==> Xml.

Для любого решения я бы использовал отформатированную версию Cobol-Copybook, например

  • Карта полей, созданная компилятором Cobol.
  • Перечень тетрадей File-Aid
  • cb2xml при использовании скриптового языка для генерации программы Cobol

Этот ответ не связан с вашей проблемой, но он демонстрирует, что можно сгенерировать из тетради Cobol. В этом случае он сгенерировал:

  • Текст-Кобол-тетрадь из двоичной тетради
  • Код для преобразования двоичного индексированного файла в плоский текстовый файл
  • Код VBA для генерации баз данных
  • Код VBA для загрузки файла Cobol-Data в БД

Итак, две мысли:

  • Пусть ваш код "сгенерирует" XML вручную, если это необходимо.
  • Разбейте ваше дерево на поддеревья, если это возможно.

Интерфейс Redvers COBOL XML использует точку итерации и множественные вызовы подпрограммы генератора для очень больших и сложных тетрадей. Вы переместили бы исходный набор данных в тетрадь CALL, затем переместили следующий набор данных и снова CALL. Вывод XML, очевидно, будет очень большой строкой, но вы также можете выгружать ее управляемыми кусками.

Я только что сделал что-то подобное для клиента. Очевидно, я не могу опубликовать здесь их код, но, возможно, в общих чертах, что мы сделали...

Во-первых, мы создали структуру, подобную JSON: Natural X-Array Group, содержащую 3 поля:

nson         (1:*)  /* X-Array
level-number (I1)
tag-name     (A) DYNAMIC
tag-value    (A) DYNAMIC

(мы использовали -ve level-number для обозначения - 0:n - XML-атрибутов для предыдущего +ve уровня)

Чтобы заполнить X-массив, мы использовали область глобальных данных из естественной подпрограммы и естественных внешних подпрограмм (с использованием вызова по значению и дополнительных параметров) вместе с несколькими естественными функциями для типичных преобразований данных (например, упакованных переменных или переменных даты нанизывать)

В результате получился Natural Code, напоминающий XML, например:

perform XML-at   2  'node-name'                      /* ABSOLUTE Level
perform XML-this    'tag-name'          'tag-value'  /* Relative Level
perform XML-this    'node-name'                      /* Relative Level
perform XML-next        'tag-name'      'tag-value'  /* Relative Level
perform XML-prev    'tag-name'      P3(<-17.123>)    /* Relative Level & Function for (Pnn.3)

Затем мы отправили это через Natural-RPC в службу Java, которая построила из него XML.
(в нашем случае мы использовали серверную часть XML, но вы можете вернуть ее в Natural в переменной DYNAMIC)

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