Преобразование файлов конфигурации в XML

У нас есть большое количество устаревших файлов конфигурации различных форматов, обычно что-то вроде KEYWORD DATA KEYWORD DATA KEYWORD DATA.

Формат самих данных уникален в каждом файле конфигурации.

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

Мы думали о том, чтобы определить их как BNF и использовать YACC или его эквивалент, но мучительное чувство состоит в том, что должен быть способ сделать это с помощью XML.

Что потребовалось бы, так это способ определения формата данных файлов конфигурации, предпочтительного в формате XML, а затем использовать этот файл для преобразования устаревшего файла в действительный XML. Предпочтительный способ преобразования XML-файла обратно в устаревший формат файла был бы полезен.


person user64123    schedule 09.02.2009    source источник
comment
Какой язык вы используете в данный момент для разработки?   -  person Ray Booysen    schedule 09.02.2009
comment
Пример или два реальных устаревших файла могут помочь. Действительно ли ключевые слова и данные находятся в одной строке, или это просто StackOverflow переформатирует ваш текст? Также пример того, как вы хотите, чтобы xml выглядел.   -  person Richard A    schedule 10.02.2009


Ответы (4)


Для конвертируемого XML->устаревшего файла XSLT, вероятно, подойдет.

person Touko    schedule 09.02.2009

Именно для таких проблем и был разработан Gelatin. (Также предупреждение о саморекламе.)

person knipknap    schedule 19.01.2010

Взгляните на Altova-Tools, особенно на Mapforce. AFAIR они могут конвертировать из/в формат пользовательского файла, и сопоставление может быть выполнено на экране совершенно естественным образом. (Altova Tools также может генерировать XSD для проверки.)

person Leonidas    schedule 09.02.2009

Попробуйте использовать простой текстовый процессор, такой как awk (или gawk), для генерации XML. Узор будет выглядеть так.

BEGIN { 
    print "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    print "<config-type>"; 
}
 { print "    <" $1 ">" $2 "</" $1 ">"; }
END { print "</config-type>"; }

Убедитесь, что кодировка правильная. Для конфигурационных файлов на английском достаточно "ASCII".

После этого вы можете использовать широкий спектр инструментов для обработки этого XML. Я предлагаю использовать этот формат, потому что его проще всего создавать и обрабатывать:

<config-type>
    <KEYWORD1>DATA1</KEYWORD1>
    <KEYWORD2>DATA2</KEYWORD2>
    <KEYWORD3>DATA3</KEYWORD3>
</config-type>

Используйте разные имена для «типа конфигурации» для каждого типа файла конфигурации, который у вас есть, чтобы их было легко отличить.

Самый простой способ проверить формат XML — определить для него DTD. Многие XML-редакторы могут прочитать существующий XML-файл и создать для него DTD. Это DTD не будет совершенным, но будет очень хорошей отправной точкой.

Затем вы можете указать имя DTD в заголовке XML и указать синтаксическому анализатору XML проверить структуру (но не данные).

Для проверки данных вы можете использовать XML-схему, но XML-схема очень сложна и часто излишня.

person Aaron Digulla    schedule 09.02.2009
comment
Я бы не назвал XML-схему излишеством. Тем более, что это необходимо, если вы хотите сделать что-то серьезное с XML. - person Joachim Sauer; 09.02.2009
comment
lol Не могу не заметить, что вы не возражали, это очень сложно ;) - person Aaron Digulla; 09.02.2009