Обзор популярных форматов конфигурационных файлов и перспективы использования этих форматов в проекте.

Обзор форматов провел: Савенко Д.В.

Дата: 29.06.2005

Требования проекта
1. Древовидная структура желательно с неограниченным числом вложений.
2. Human readable (and writable ;) ).
3. Как можно более простой синтаксис.
4. Наличие библиотеки на Яве, которая позволяет работать с форматом.

1. Sendmail (http://www.sendmail.org/m4/readme.html)

Cложный формат, основанный на множестве макросов и директив. К тому же файл после написания должен обрабатываться специальным транслятором, раскрывающим макросы. Формат не поддается расширению и переработке для использования в других системах кроме sendmail, да и не хочется заниматься его расширением.

Вердикт: абсолютно не подходит для наших целей.

2. Apache (http://httpd.apache.org/docs/configuring.html)

Язык файлов конфигурации Apache представляет собой набор директив, некоторые из которых являются контейнерами для других. В принципе, формат довольно приятный и мощный, если учесть, что модули могут регистрировать свои директивы (в том числе и контейнеры) и практически везде в директивах можно использовать регулярные выражения. Human readable также на высоте. Единственная проблема в том, что имеющиеся директивы абсолютно не подходят для наших целей. Но саму концепцию формата вполне можно использовать.

Вердикт: можно использовать после адаптации

3. BIND (http://www.isc.org/index.pl?/sw/bind/docs/config/)

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

Вердикт: можно использовать после адаптации

4. Samba (http://www.faqs.org/docs/samba/ch06.html)

Формат очень сильно похож на обычные ini-файлы Windows. Я бы даже сказал, это и есть обычный ini-файл. Есть несколько секций, внутри содержащих пары "ключ = значение". Очень простой и понятный формат, однако возможности ограничены. Например, трудно реализовать древовидную структуру.

Вердикт: возможности слишком ограничены для нашего проекта.

Заключение

Из рассмотренных форматов наиболее мощным, пожалуй, является формат сервера Apache, во многом благодаря регулярным выражениям. Однако эта мощь вряд ли понадобиться в нашем проекте. На мой взгляд, из рассмотренных форматов наиболее приближен к нашим целям формат сервера BIND.
И еще насчет четвертого требования проекта. Вчера я как раз весь день занимался поиском нужных библиотек, но ничего не нашел. Скорее всего, не удастся найти библиотек на Яве для работы с вышеописанными форматами или им подобными (возможно, за исключением Samba). На С++ еще есть надежда, но насчет Явы я полон пессимизма. Библиотеки для работы с конфигами есть, но даже наиболее мощная из тех, что мне удалось найти, Jakarta Commons Configuration, не поддерживает того, чего хотелось бы.