Конвертировать Cobol тетрадь в XSD
Кто-нибудь знает инструмент для конвертации Cobol Copybook в XSD? Или XML.
5 ответов
Создание полноценного парсера для тетрадей COBOL имеет несколько проблем:
Тетради включаются в программы на языке COBOL на этапе компиляции текста. Сам по себе источник тетради может быть неполным. Единственный способ получить полный исходный код для синтаксического анализа - это предварительно обработать его, как если бы он был введен в программу COBOL souce. Обычно тетради вносятся в программу COBOL через директиву COPY. Поднимать это может показаться немного бессмысленным, но учтите следующее:
1) Директива COPY поставляется с опцией ЗАМЕНА. На первый взгляд это может показаться достаточно простым, но когда вы углубляетесь в детали, это становится очень "интересным". Смотрите: КОПИЯ ДИРЕКТИВ
2) Директива ЗАМЕНА. Эта директива может также манипулировать исходным текстом после того, как директива COPY сделала свое дело. Смотрите: ЗАМЕНИТЕ ДИРЕКТИВ
3) Вложенные тетради. Этот, возможно, не такой неприятный, как предыдущие два, но имейте в виду и гнездование.
4) Синтаксис строк изображений на языке COBOL также не вызывает смеха. Взгляните на: Картинки Строка Символы
5) Вашему парсеру также придется иметь дело с правилами продолжения COBOL. См. " Линии продолжения" и, в частности, продолжение PSEUDO TEXT.
Я не хочу вас обескураживать, но разбор COBOL не является тривиальной задачей.
С другой стороны, если ваши тетради имеют очень простую структуру, как это делают многие, возможно, это можно сделать с помощью каскада регулярных выражений. Этот подход довольно распространен среди тех, кому необходимо анализировать программы (и тетради) COBOL по проектам обновления программного обеспечения. Может быть, посмотрите на: RegReg
Приветствия...
Давным-давно я создал некоторый код для анализа тетради COBOL и создания файлов XSD.
Поскольку структура языка COBOL довольно регулярна, я создал регулярное выражение для получения имен переменных и определения длины полей. С помощью этой проанализированной структуры я мог бы также создавать тестовые данные XML, код MSXML DOM для управления этой структурой и HTML-формы для тестирования этих транзакций IMS.
Итог: регулярные выражения могут быть действительно полезны для этого.
Вы можете попробовать мой проект парсера Koopa Cobol. Хотя он не выполняет предварительную обработку, я обнаружил, что для большинства тетрадей в этом нет необходимости. Он должен охватывать большую часть того, что вы ожидаете от стандартной тетради, и если нет, то вы всегда можете расширить парсер. Он может экспортировать дерево разбора в XML, который затем можно обработать любым способом.
Тогда есть REDEFINES
пункт, который используется для переопределения заданного набора смежных байтов различными способами. Тогда OCCURS
пункт, который является реализацией фиксированной длины массивов и OCCURS DEPENDING ON
предложение для массивов переменной длины.
Итак, NealB прав; это не тривиальная задача.
Rational Developer для Z, XML Thunder, Syncsort ETL... есть много продуктов, которые будут делать это.
На самом деле, если вы изучите правила типов данных схемы, вы можете сделать это очень легко вручную. В основном вы будете иметь дело с xsd: string, xsd: decimal, xsd: integer и некоторыми разновидностями xsd: date, соответствующими вашей тетради Cobol.