LINUX.ORG.RU

Обработка файлов конфигурации с использованием LibXML2

 , , , ,


0

0

В статье описывается использование языка XML (Extensive Markup Language) при создании приложений для ОС UNIX®. Статья ориентирована на программистов, не знакомых с XML, и описывает библиотеки XML, написанные для проекта GNOME. После краткого описания формата XML даны примеры исходного кода, который может быть использован разработчиками для создания собственных приложений, анализирующих конфигурационные файлы в формате XML с использованием библиотеки LibXML2.

>>> Подробности

★★★

Проверено: maxcom ()

За статью конечно спасибо, но новость - провокация ЛОРовской общественности. :) Кста, на перле libxml2 не такой уродливой кажется.

Bohtvaroh ★★★★
()

Конфиги в XML бесполезны, новость - вдвойне бесполезна.

Не считая хреновой тучи бинарного кода, что приходится тащить за собой ради сомнительной необходимости изобрести велосипед.

Gharik
()

конфиги в YAML красивше смотрятся

anonymous
()

>Статья ориентирована на программистов, не знакомых с XML

Если я не знаю XML, то это моя проблема. Но если описание серьезных вещей рассчитано на дилетантов, то это проблема всех.

anonymous
()
Ответ на: комментарий от anonymous

Лучше уж бинарный конфиг, чем XML.... Хотя большой XML-файл никогда не повредит... Одно удовольствие его на Жабе парсить, сразу чувствуешь себя Ъ-Ынтырпрайз кодером :)

anonymous
()
Ответ на: комментарий от anonymous

> Но если описание серьезных вещей рассчитано на дилетантов, то это проблема всех.

Надо прозомбировать новый поток неокрепших молодых умов.

zenith ★★★
()

А что это там за язычок программирования? Наверное Джава для IBM WebSphere? А где же тогда супер-пупер сервер энтерпрайZe приложений WAS? Видать у бимеров разброс и шатания ("разруха, она в головах" (с)), раз одни манагеры Перл продвидают, другие Джаву, третьи ....

Bioreactor ★★★★★
()

читаю в метро книжку "введение в теорию автоматов, языков и вычислений" меня постигло локальное озрение и вот какое: дело всё в том, что для разбора конкретной строки нужен язык на основе регулятной грамматики(который может представляться например рег. выражением) в силу замкнутости свойств рег. языков объединение этих строк тоже регулярный язык.

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

dimon555 ★★★★★
()
Ответ на: комментарий от Bioreactor

>одни манагеры Перл продвидают, другие Джаву, третьи ....
у них просто департаментов много, одни манагеры с жабы кормятся, а другие с перла, а деньги они не общие

dimon555 ★★★★★
()
Ответ на: комментарий от anonymous

>Лучше уж бинарный конфиг, чем XML.... Хотя большой XML-файл никогда не повредит... Одно удовольствие его на Жабе парсить, сразу чувствуешь себя Ъ-Ынтырпрайз кодером :)

Откройте для себя JAXB наконец :) Проще чем на жаве, по-моему, некуда... в пых-пыхе и то сложнее. :)

anonymous
()
Ответ на: комментарий от anonymous

> Откройте для себя JAXB наконец :)

JAXB в печь, castor проще, понятнее и лучше. ;-)

Bohtvaroh ★★★★
()
Ответ на: комментарий от Bohtvaroh

> Кста, на перле libxml2 не такой уродливой кажется.

+1, я готов жёстко критиковать API для C, но когда парсил xml-ину на Perl, всё шло более-менее гладко.

anonymous
()
Ответ на: комментарий от anonymous

> +1, я готов жёстко критиковать API для C, но когда парсил xml-ину на Perl, всё шло более-менее гладко.

Вообще, вроде для нормального юзания сабжевой либы задумывался gdome2, но что-то где-то не сложилось...

Bohtvaroh ★★★★
()

Линукс должен полностью перейти на XML! Догоним и перегоним Венду по !KISS, и отвяжемся от тупого наследия UNIX.

anonymous
()

Больше всего беспокоит что в парсере такого тупого языка описания как XML умудряются сделать кучу дыр, которые недавно обсуждались. Непонятно чем им YAML/INI/или S-Expression не угодили, это менее человеконенавистнические языки описания. Манагеры в OSS?

Мигелю привет.

alx_me ★★☆
()
Ответ на: комментарий от anonymous

> Линукс должен полно...

Так уже идёт вовсю процесс. Я в шоке hal,xorg, (GNOME,KDE) - не жалко, но базовые вещи хоть не трожь!

alx_me ★★☆
()
Ответ на: комментарий от alx_me

>Больше всего беспокоит что в парсере такого тупого языка описания как XML умудряются сделать кучу дыр, которые недавно обсуждались. Непонятно чем им YAML/INI/или S-Expression не угодили, это менее человеконенавистнические языки описания. Манагеры в OSS?

Мигелю привет. alx_me * (*) (10.12.2008 18:35:29)

Сори, но о ваших языках знает не больше чем пара гуру. Для широкой общественности ссылку в студию плиз!

anonymous
()
Ответ на: комментарий от alx_me

> hal,xorg, (GNOME,KDE) - не жалко, но базовые вещи хоть не трожь!

hal и xorg - это как раз базовые вещи :/ XML - для жабакодеров.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

> Сори, но о ваших языках знает не больше чем пара гуру.

Это про YAML и INI? И вам ещё ссылку? На лоре? Вы, должно быть, шутите?

sv75 ★★★★★
()
Ответ на: комментарий от sv75

>Это про YAML и INI? И вам ещё ссылку? На лоре? Вы, должно быть, шутите? >sv75 (*) (10.12.2008 19:27:28)

Первый раз слышу про YAML.

Насколько я знаю, в ini нельзя делать иерархическую структура данных.

anonymous
()
Ответ на: комментарий от anonymous_num_0

>Скажите, а чего такого сверх неимоверно крутого в XML? К чему все эти горы книг? >anonymous_num_0 (*) (10.12.2008 19:33:21)

Иерархические структуры данных, деревья.

anonymous
()
Ответ на: комментарий от anonymous

>Насколько я знаю, в ini нельзя делать иерархическую структура данных.
можно любую сделать, непонятно зачем тебе эта иерархия сдалась?

dimon555 ★★★★★
()
Ответ на: комментарий от anonymous

>Первый раз слышу про YAML.

http://yaml.org/

http://en.wikipedia.org/wiki/YAML

Библиотеки для популярных языков в наличии.

Вот пример очень простого YAML(он на самом деле довольно мощный, а щас я из пушки по воробьям :)


FirstField: 65 
SecondField: John 
ThirdField: 
    - Uli 
    - Benno 
    - 88


а вот парсинг на питоне:


Python 2.6 (r26:66714, Oct 27 2008, 10:50:31) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. 
>>> import yaml 
>>> fdesk=open('conf.yaml','r') 
>>> config=yaml.load(fdesk) 
>>> print config 
{'ThirdField': ['Uli', 'Benno', 88], 'FirstField': 65, 'SecondField': 'John'} 
>>> exit()

Brainerazer
()
Ответ на: комментарий от dimon555

> для разбора же xml нужно использовать нерегулярный язык, а это в мозгу и на компьютере и вообще сложнее... при этом неизвестно зачем аткое делать, если и без этих нехилых усложнений всё работало

Как правило парсится не произвольный xml. а некое его подмножество, документы которые well-formed относительно некоторой схемы.

* если это подмножество регулярно - о чем вопрос? теория регулярных языков расширяется на теорию регулярных деревьев, за реализациями посмотри на RELAX NG.

* это подмножество нерегулярно - то regexp'ы и не конкрент.

> для разбора же xml нужно использовать нерегулярный язык, а это в мозгу и на компьютере и вообще сложнее...

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

gods-little-toy ★★★
()

Конфиги в xml как-то неудобно писать.. Сильно много лишнего приходится писать. А какими библиотеками удобно парсить конфиги в виде например "параметр=значение" ?

Vorb
()

Спасибо переводчику и автору!

srgaz
()
Ответ на: комментарий от gods-little-toy

>регулярные выражения их описывающие
(допустимая строка = допустимое значение)*

в xml есть сбалансированные скобки(теги) для их анализа потребуется нерегулярная грамматика

dimon555 ★★★★★
()
Ответ на: комментарий от Vorb

>А какими библиотеками удобно парсить конфиги в виде например "параметр=значение" ?
может регулярными выражениями?

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

>можно любую сделать, непонятно зачем тебе эта иерархия сдалась? >dimon555 (*) (10.12.2008 20:49:19)

Такая струкура данных. Если в ini можно сделать иерархическую структуру данных, деревья, ссылку в студию на либу плиз.

anonymous
()
Ответ на: комментарий от Brainerazer

>http://yaml.org/

http://en.wikipedia.org/wiki/YAML

Библиотеки для популярных языков в наличии.

Вот пример очень простого YAML(он на самом деле довольно мощный, а щас я из пушки по воробьям :)


FirstField: 65 
SecondField: John 
ThirdField: 
    - Uli 
    - Benno 
    - 88


а вот парсинг на питоне:


Python 2.6 (r26:66714, Oct 27 2008, 10:50:31) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. 
>>> import yaml 
>>> fdesk=open('conf.yaml','r') 
>>> config=yaml.load(fdesk) 
>>> print config 
{'ThirdField': ['Uli', 'Benno', 88], 'FirstField': 65, 'SecondField': 'John'} 
>>> exit()
Brainerazer (*) (10.12.2008 21:46:26)


Спасибо, буду изучать...

anonymous
()
Ответ на: комментарий от dimon555

> в xml есть сбалансированные скобки(теги) для их анализа потребуется нерегулярная грамматика

только если требуется неограниченная глубина, иначе можно устроить конструкцию напоминающую вот такой regexp:

'(\(\)) | (\(\(\)\)) |...'

которая будет регулярна.

А если у вас в языке есть конструкции неограниченной глубины, то тогда regexp'ы для их парсинга все равно использовать не получится...

gods-little-toy ★★★
()
Ответ на: комментарий от Vorb

http://sourceforge.net/project/showfiles.php?group_id=124759&package_id=1...

usage:
------8<------
params_init(); /* once */

key = "prop1";
printf("value for key %s: %s", key, params_get(key));
------8<------


Иерархия, причём индексированная! (за-так):

panel1.label1=xml_is_bad
panel1.label2 = xml is slow
panel1.label3 = xml is a danger for your eyes
panel1.panel2.panel3=I can do hierachies without problems too. My file is smaller and it is more robust (even redundant)
panel1.label4 = conserve energy - do not overload processor by unnecessary xml!

anonymous
()
Ответ на: комментарий от anonymous

предыдущий пост был Vorb'у, на:

>Конфиги в xml как-то неудобно писать.. Сильно много лишнего приходится писать. А какими библиотеками удобно парсить конфиги в виде например "параметр=значение" ?

anonymous
()
Ответ на: комментарий от anonymous

да, забыл добавить что комменты - тоже в хеше, но они не мешают (просто не вытаскиваем).
Если надо - можно легко почистить (за функциональность не пинать - написано за пару вечеров).
Т.е. и расширить можно тоже быстро и легко - по задаче (регекспы справа или парсинг списков).

Я придерживаюсь стойкого мнения что писать надо "снизу", наиболее эффективно и наименьшим фунтпринтом (приведённый конфиг - порядка 6.5К после strip, 16K - без)

anonymous
()
Ответ на: комментарий от dimon555

>а уж если хочется иерархических структур, то нужно использовать LDAP

почему такие стереотипы - если иерархия - то обязательно чтобы древесные структуры типа хмлей или лдап.
иерархические базы и их потомок файловая система не иерархична?
вы на всё бьёте
%cd /; cd var; cd spool; cd mail;

или всё-таки короче:
%cd /var/spool/mail
?

Откройте для себя другие представлания иерархий (записанные в том числе и как список строк, ini-like), отличные от ХМЛей, в конце концов!

anonymous
()
Ответ на: комментарий от dimon555

> в xml есть сбалансированные скобки(теги) для их анализа потребуется нерегулярная грамматика

во-во, о чём и говорится: технологии ради технологий...
сначала придумываем себе проблему (хмл), а потом решаем (как делать grep/sed/awk/cut etc)

XML - не Unix-way, XML - Windows-way (parsing and showing through GUI, no command-line, no pipelines, no fast automation)

anonymous
()
Ответ на: комментарий от anonymous

У кого много мелких данных разбросанных по иерархии (более 2 уровней), и облом писать парсер - уж лучше использовать JSON (есть куча библиотек на всех языках)

но ещё лучше - не ломать корневые ключ-значение и строки (иметь возможность для посков и замен ключей юних-веем как то /^бла/) а класть те мелкие/сложные иерархии как значение справа.

То-есть выбрать и приятный глазу конфиг, и юних-вей, и не тащащий за собой библиотек, кроме нескольких Ц-файликов.

Но конечно, на вкус и цвет...

anonymous
()
Ответ на: комментарий от anonymous

> Насколько я знаю, в ini нельзя...

Да что вы тут за люди? Этоже просто файл с заранее оговорённым синтаксисом. просто в XML набор избыточен (ублюбочен по ДНК). Ну не надо "ТЕХНОЛОГИЙ" в хранении конфигов!

[node1] Parname=Value

[node1.subnode] parname=FuckYou

[subnode.subtree] level=10

что здесь не парсится, или не дай бог умного? Да деревья в лиспе красивее, да и встроенные процедуры как-то изящнее, но это всё то о чём говорить хочеться в последнюю очередь. Это просто конфиги. Конфиги должны быть читабельны. Технологии не нужны, нужна простота и красота логики. Да книжек на этом не понапишашь. И бабла не настрижёшь - это правда.

alx_me ★★☆
()

XML ещё не закопали?? Сколько можно насиловать труп!

matumba ★★★★★
()
Ответ на: комментарий от Bohtvaroh

> новость - провокация ЛОРовской общественности. :)

Естественно. Потому что здесь сидят люди, РЕАЛЬНО пишущие код и не делающие денег из написания книг по XML :)
У меня тоже заняло около года, чтобы понять, что ХУЕМЭЛ не нужен, но до этого пришлось дойти своими шишками - босс раздал хмл-грабли и сказал искать суслика. Сейчас конфиги сидят в JSON - просто и быстро.

matumba ★★★★★
()
Ответ на: комментарий от anonymous

>Но конечно, на вкус и цвет... anonymous (*) (11.12.2008 6:06:01)

Если б какойнить гуру сделала обзор парсеров...

anonymous
()
Ответ на: комментарий от anonymous

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

Vorb
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.