LINUX.ORG.RU

yoctoXML - маленький и быстрый XML парсер

 , , , ,


0

0

Вышла первая версия простой библиотеки для работы с XML -- yoctoXML (yXML). Это очень компактная и простая библиотека, открытая по лицензии "modified BSD" (GPL-совместима). yXML всех возможностей XML не поддерживает, однако достаточна для хранения и обработки конфигурационных данных, к примеру. Очень проста в использовании. Написана на Си и занимает менее 300 строк (комментарии есть, разобраться и модифицировать легко).

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



Проверено: Shaman007 ()
Ответ на: комментарий от hc

>Таки это болезнь. Она называется "я ниасилил взять лёгкую и удобную библиотеку для конфигов".

Может потому что она не легкая и удобная а очередной велосипед с ограниченными возможностями? Подумай об этом.

>Ну вот хотя бы 5% разработчиков пишут XSD к своим конфигам? А если нет, то зачем они используют XML?


Объясни почему бы им не пользоваться.

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

>Но изобрели не для конфигов

Изобрели для структурированной разметки данных. Расскажи в каком месте конфиг не подходит под это определение.

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

> можешь ли ты без единой ошибки набирать отакое

Переписывание того же самого на xml добавить ещё и теги, и, как следствие, увеличит общий объём. Задача станет ещё сложнее.

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

>Объясни почему бы им не пользоваться.

Потому что они не используют и 1% возможностей формата. Значит, на 99% конфиг заполнен мусором. Поэтому для них "велосипеда с ограниченными возможностями" хватит

И так за весь тред мы и не дождались примера программы, которой жизненно необходимы хотя бы 60% возможностей именно формата XML

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

Эта, напомню, что мы всё ещё говорим про конфиги, которые пишутся с помощью CLI, а не всяческими GUI-конфигурялками

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

> Только хорошо присмотрись к уровню абстракции который они сделали.

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

Поэтому очень странно видеть это утверждение, когда ты пытаешься обосновать невозможность записи этого конфига без xml.

И да, аналог тривиален. Поэтому у меня есть большое подозрение, что ты просто валяешь дурака.

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

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

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

> Расскажи в каком месте конфиг не подходит под это определение.

Гвозди и правда можно забивать микроскопом. Я пробовал ;)

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

>Переписывание того же самого на xml добавить ещё и теги, и, как следствие, увеличит общий объём. Задача станет ещё сложнее.

В каком месте из объема проистекает сложность?

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

>Потому что они не используют и 1% возможностей формата. Значит, на 99% конфиг заполнен мусором.

С какой это радости? Это во первых. Сколькими возможностями твоего линукса ты пользуешься? Или хотя бы ядра линукса? Это причина не пользоваться им?

>И так за весь тред мы и не дождались примера программы, которой жизненно необходимы хотя бы 60% возможностей именно формата XML


А не 61? Или 59? Откуда цифры - такраканы принесли?

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

>Данными оперирует машина. Конфигом оперирует человек. Разница очевидна

Человек тоже оперирует данными а машина - конфигом. Никогда не задумывался почему _text_/xml? Для машины бинарные данные и побыстрее и попроще.

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

Ну и, как дополнительный бонус - большее время на написание конфига, ага ;)

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

Я использую ядро линукса и GNU-обвязку ровно потому, что они выполняют мои задачи и выполняют лучше, чем другие _доступные_ инструменты. Ну и, естественно, потому что использование их ещё и удобно. Чего не могу сказать о конфиге в XML. И ты не на циферки отвлекайся, а пример приведи. А то уже второй человек примера привести не может

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

>Чем выше уровень абстракции, тем ближе оно к человеческому языку. Я говорю это совершенно серьёзно, если что.

Неверно.

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


Любой сомневающийся пускай попробует описать квадратное решение квадратного уравнения на родном языке.

>Поэтому очень странно видеть это утверждение, когда ты пытаешься обосновать невозможность записи этого конфига без xml.


Я не пытаюсь обосновать невозможность, я пытаюсь показать незначительность разницы. Давай libconfig в руки и покажи как это сделать проще.

>И да, аналог тривиален. Поэтому у меня есть большое подозрение, что ты просто валяешь дурака.


Аналог этот будет иметь преймущество только в случае разработки спецформата - а это обозначает лишнюю работу. А в любой json/libxml нотации он нихрена не выиграет. Только скобочки сменятся.

Не веришь - попробуй fvwm описать на JSON или libconfig. И поймешь почему там велосипед.



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

>Валидность xml документа никоим образом не гарантирует валидность конфига в целом.

Точно так же как и компилируемость программы не гарантирует ее правильности. Надо отменить эту похабную практику - компилять программы.

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

Когда человек оперирует данными, ему удобно, чтобы данные были записаны в удобном для оперирования виде. Машине как-то всё равно, 5 или 15 тактов процессора затратить на парсинг. Человеку - есть разница. Более того, человек прекрасно сам умеет отличать стору от числа (это к вопросу о :String и :Integer) и проверять валидность конфига с помощью или тестового запуска утилиты (nagios -v), или специального режима работы утилиты (httpd -M). XML создаёт дополнительные сложности по поддержанию корректности структуры конфига (давайте случайно пропустим закрывающую скобочку где-нибудь в середине текста). Сложнее (в плане комплексности, количества вариантов, а не понятности) структура - больше вариантов, больше вероятность сделать ошибку при ручном редактировании. Внимание, вопрос: какая необходимость должна заставить человека создать себе лишние проблемы?

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

>Если допустить, что в среднем человек делает одну опечатку на 50 слов, то чем больше слов - тем больше будет ошибок.

Это в рамках набора текста по единым принципам. Спорим что длинные регэкспы набирать сложнее несмотря на то что в стихах пушкина символов больше? Не веришь - найди профессиональную секретаршу и подиктуй.

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

> Неверно.

Математика - это тоже язык, созданный человеком.

> Аналог этот будет иметь преймущество только в случае разработки спецформата

Гм. У меня появилась другая мысль - возможно ты просто не осилил прочитать и осознать приведённый конфиг?

На всякий случай сообщаю - там ровно одна настройка

"The following shows how to hint gnome-volume-manager and other programs that honor the storage.automount_enabled_hint to not mount non-removable media."

Это легко и быстро пишется с помощью чего угодно.

Заодно можешь заценить, сколько ненужного хлама ушло на оформление одной строки вида param=value

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

>Я использую ядро линукса и GNU-обвязку ровно потому, что они выполняют мои задачи и выполняют лучше, чем другие _доступные_ инструменты.

Не надо отклонятся от темы. С спрашиваю почему ты не машешь флагами чтобы из ядра выкинули все что тебе не нужно, или на этом основании им не пользуешься.

>И ты не на циферки отвлекайся, а пример приведи.


Пример чего? Любой либконфигный или jsonовый пример аналогично делается на XML со сравнимыми даже по размеру характеристиками. Любой специфичный конфиг требует затрат на велосипедостроение. А то что специфичный формат делает универсальный по оптимальности формата - никто не спорил.

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

> Это в рамках набора текста по единым принципам

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

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

>Машине как-то всё равно, 5 или 15 тактов процессора затратить на парсинг. Человеку - есть разница.

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

>и проверять валидность конфига с помощью или тестового запуска утилиты


Которую написал все тот же программист. Ага - да.

>XML создаёт дополнительные сложности по поддержанию корректности структуры конфига


ДАвайте пропустим скобочку в libconfig или json.

>Сложнее - больше вариантов,


Структура простая как валенок - теги, атрибуты.

>Внимание, вопрос: какая необходимость должна заставить человека создать себе лишние проблемы?


Ты пока не привел не одной проблемы которая специфична для XML по сравнению например с libconfig.

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

Ты говоришь, что xml сможет обеспечить валидность конфига, я тебе говорю, что это неверно.

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

Поэтому валидация в конфигах - мимо кассы.

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

Флагами не машу, потому что избыточная функциональность не мешает мне, не заставляет делать основу для работы дополнительных функций. Например, если мне не нужны сети X.25, а только IP - то интерфейсу я даю только адрес сети IP, а не настраиваю полную обвязку для X.25 на случай, если кто-то когда-то решит внедрять X.25 (читай "если кто-то когда-то соберётся сделать XSD", например)

А ещё ты всё время забываешь про param=value. А ведь это до сих пор популярнейший (по моим прикидкам) формат

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

>Математика - это тоже язык, созданный человеком.

А XML к нам пришел из царства грибов?

>У меня появилась другая мысль - возможно ты просто не осилил прочитать и осознать приведённый конфиг?


возможно ты просто путаешь специфичный формат и универсальный. И расхваля специфичные форматы (fvwm) ты одновременно подменяешь их универсальными либами. ТАк вот ничего красивого в json или libconfig там не будет. Не веришь - попробуй напиши.

>Это легко и быстро пишется с помощью чего угодно.


Вперед. libconfig в руки и вперед.

>Заодно можешь заценить, сколько ненужного хлама ушло на оформление одной строки вида param=value


А во тут ты просто не осознал то на что я просил тебя обратить внимание. На match и merge. Который так сделан из-за внутреннего механизма интерпретации. ДАвай с сохранением этого механизма сделай на libconfig. Покажи экибану.

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

>Ему не все равно возьмет он готовую либу и будет делать работу или будет изобретать велосипед.

Либы есть только для XML? То, что о них не пишут здесь, не значит, что их нет

>Которую написал все тот же программист. Ага - да.

Не понял, к чему ты это сказал

>Структура простая как валенок - теги, атрибуты

А также :Type, xmlns и т.д. Да, структура проста, ваще пипец проста. И вариантов ваще минимум. Особенно с неймспейсами

>Ты пока не привел не одной проблемы которая специфична для XML по сравнению например с libconfig.

param=value покрывает 90% необходимой функциональности для конфига. Возможностями конфигов в XML почти никто не пользуется, при этом они значительно усложняют структуру для человека. Сравнение ясно?

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

>Вполне работает, даже если принципы разные.

Ты уже нашел секретаршу чтобы диктовать ей регэкспы? Хочу послушать куда она тебя пошлет и с какой скоростью будет набирать такой текст.

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

>Ты говоришь, что xml сможет обеспечить валидность конфига, я тебе говорю, что это неверно.

Она проеверит валидность формата.

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


Ты утверждаешь что статический анализ программы не нужен. Он же не гарантирует правильность исполнения?

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

>Флагами не машу, потому что избыточная функциональность не мешает мне,

Фточку. Она никому не мешает.

>А ещё ты всё время забываешь про param=value. А ведь это до сих пор популярнейший (по моим прикидкам) формат


Флаг ему в руки. XML применяют там где его не хватает.

PS: У меня param=value осиливает списки мапы и мультимапы.

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

> возможно ты просто путаешь специфичный формат и универсальный.

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

> ДАвай с сохранением этого механизма сделай на libconfig.

Ты немного не в теме. Все уже согласились с тем, что hal (и udev) - фигня и переписывают их.

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

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

>XML применяют там где его не хватает.

Если бы всё было так радужно... В HAL XML - излишество. Вот udev-девелоперы же осилили нормальный конфиг. А эти выпендрились. А ещё есть много гламурных кодеришек, которым некогда думать - им надо писать, писать, строгать код! Быстрее, толще, длиннее!

>PS: У меня param=value осиливает списки мапы и мультимапы.

Может, имеет смысл в конфиге хранить путь до файла со структурированными данными, нэ? :)

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

>Либы есть только для XML? То, что о них не пишут здесь, не значит, что их нет

Либы не для XML не обладают преймуществами специфичных форматов про которые вы тут распинаетесь. Другие скобки те же яйца. Некоторое время назад был тред где с легкость было показано что JSON проигрывает по размеру XML кроме единственного случая - списка примитивных значений.


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

> Хочу послушать куда она тебя пошлет и с какой скоростью будет набирать такой текст.

Введение xml никоим образом не отменяет возможных регэкспов в конфиге, а только добавляет теги.

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

> Она проеверит валидность формата.

Неа. Всё что оно может - проверить чтобы в поле для число было введено число. Перемещения объектов между ветками не изменят результат проверки, но почти наверняка сделают конфиг нерабочим.

> Ты утверждаешь что статический анализ программы не нужен. Он же не гарантирует правильность исполнения?

Статический анализ (если он возможен) как раз гарантирует.

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

>Не понял, к чему ты это сказал

К тому что валидацию конфига писал программист. И это тоже работа. Он наверное очень радовался что твои тараканы успокоились. Когда сидел и писал парсер и валидатор на коленке.

>А также :Type, xmlns и т.д. Да, структура проста, ваще пипец проста. И вариантов ваще минимум. Особенно с неймспейсами


Каких вариантов?

>param=value покрывает 90% необходимой функциональности для конфига.


Для очень примитивного конфига. Как только там появляюстя зависимые атрибуты - он пролетает мимо XML даже по размеру, или возрастает "импликативная" слжность.

Давай param=value на:

<windows>
<window width="100" height="100" url="http://google.com"/>
<window width="100" height="100" url="http://linux.org.ru"/>
<window width="100" height="100" url="http://whatever.com"/>
</windows>

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

# vi /etc/nagios/nagios.conf # nagios -v /etc/nagios/nagios.conf Alarm! Error! Вы прослушали миниатюру "правка и валидация конфига системы мониторинга nagios". Таким образом мы получаем match, который не только проверит синтаксис, но и грамматику вместе с семантикой. То есть даже лучше XML. А разработчику не пришлось даже ухом шевельнуть, чтобы добавить ключ -v - просто тупо убрать исполнение кода с этим конфигом, дать отработать только парсеру. Конфиг там С-подобный, если кто не знает, вида: param { param1 value1 } Да, похоже на XML. Но насколько компактнее и насколько чётче видно сам конфиг P.S. не думаю, что разработчики нагиоса сами писали парсер структуры конфига

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

>Возможностями конфигов в XML почти никто не пользуется, при этом они значительно усложняют структуру для человека. Сравнение ясно?

Нет. "значительно усложняют" - нигде не было доказано - субьективное мнение.

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

Ай, не ignore line breaks, а user line breaks...

# vi /etc/nagios/nagios.conf
# nagios -v /etc/nagios/nagios.conf
Alarm! Error!

Вы прослушали миниатюру "правка и валидация конфига системы мониторинга nagios". Таким образом мы получаем match, который не только проверит синтаксис, но и грамматику вместе с семантикой. То есть даже лучше XML. А разработчику не пришлось даже ухом шевельнуть, чтобы добавить ключ -v - просто тупо убрать исполнение кода с этим конфигом, дать отработать только парсеру. Конфиг там С-подобный, если кто не знает, вида:

param {
param1 value1
}

Да, похоже на XML. Но насколько компактнее и насколько чётче видно сам конфиг

P.S. не думаю, что разработчики нагиоса сами писали парсер структуры конфига

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

>Введение xml никоим образом не отменяет возможных регэкспов в конфиге, а только добавляет теги.

Не отклоняйся от темы. Ты утверждал что "близость к естественному языку " рулит или это как его - повышает уровень абстракции. Не рулит. И не повышает. Не разу. Ни по сложности ни по скорости. Как пример я тебе показал регэкспы и предложение описать корни квадратного уроанение на "естественном" языке.

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

>Статический анализ (если он возможен) как раз гарантирует.

Ты либо не знаешь что такое статический анализ либо одно из двух.

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

>Таким образом мы получаем match, который не только проверит синтаксис, но и грамматику вместе с семантикой.

Абсолютно нереальная вещь для XML. Боже мой - фантастика.

>А разработчику не пришлось даже ухом шевельнуть, чтобы добавить ключ -v - просто тупо убрать исполнение кода с этим конфигом, дать отработать только парсеру


Серьезно? Можно тогда раскрытие слова семантика в студию плз и как это парсер ака синтаксический анализатор проверил семантику.

>Но насколько компактнее и насколько чётче видно сам конфиг


На уровне тараканов в голове.

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

Да, в высоту - потому что я люблю лесенку и инденты, как в питоне. Никто не мешает просто убрать лишние скобочки и кавычки. Разделитель - whitespace. Чем не разделитель? И в глазах не рябит

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

>И т.д. Длиннее, но чётче

Не аналог. Я как парсер говорю "window1" - unknown token.

И где тут ключ=значение? Вижу много фигурных скобок.

Это у вас мода такая - говорить ключ значение рулит а приводить фигуноскобочные конфиги? Утверждать что "текстовые конфиги рулят" приводя в пример специфичные, а на аргумент про либы приводить libconfig которые совсем неспецифичен и такая же скобочная фигня?

Если тебе нравится С -подобный синтаксис - это только таракан. Иди послушай что про скобки тебе раскажут питонщики.

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

>Докладываю, что переписывание конфига в xml повышает количество ошибок.

Пока не получается. Пока ты не доказал что возрастание объема повышает сложность.

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