[Devel] uniset и составной configure.xml

Vitaly Lipatov lav на etersoft.ru
Пт Дек 17 03:01:49 MSK 2010


В сообщении от Четверг 16 декабря 2010 Pavel Vaynerman написал(a):
...
> Вариант 1.
> ------------------
> Идеальным вариантом конечно является использовать для загрузки внешних xml-
> файлов средства самой библиотеки. Типа прозрачным образом вообще
> и ничего делать не надо.
>     В libxml2 сходу не нашёл такого. По краней мере без специальной
> реализации... Так что если кто знает.. прошу..
>
Ну, как я понял, XInclude без проблем позволяет включать файлы (как с 
относительными, так и с абсолютными путями).
<xi:include href="test2.xml"/>
Мержить дерево никто не будет, да это и не нужно наверное? Как я понимаю, 
чтобы просто разбить на части, это достаточно, ну и для выделения 
хостоспецифичной части — тоже.

> Вариант 2.
> -----------------
> Могу (это не сложно) встроить в uniset загрузку многих xml например в
> следующем виде:
> В главном файле (configure.xml) объявляется секция
...
>  При этом эти файлы имеют такую же структуру как и configure.xml и парсер
> "забирает" из них заранее(!) известные секции. Типа
> <settings>,<sensors>,<objects> и т.п.  Ну и "вставляет" их в основной файл.
> Проверку на дубли и корректность, пока держим за скобками.
> 
> Вообщем вариант собственно простой реализации "склеивания".
> Плюсы: реализовать не сложно.
> Минусы: жёсткая завязка на структуру...
> (ну и замедление загрузки.. см. вариант 3)
Ну это излишнее усложнение, к тому же ещё одна неявность.

 
> Вариант 3.
> ------------------
>    Пришла ко мне такая идея. Есть мощные(!) внешние парсеры типа xsltproc.
> А что если генерировать итоговый монолитный configure.xml при помощи них.
> Т.е. в разработке находится много xml-файлов, а при сборке или на более
> позднем этапе, это всё "собирается" в один configure.xml.
Тогда нужно собирать не в xml, а в что-то обработанное, приспособленное для 
быстрой загрузки. Например, сохранять бинарное загруженное дерево XML (не 
нашёл средств), или превращать в другой вид данных.

> К плюcам этого способа, отношу  то, что:
> - используются мощные внешние программы (на любом(!) удобном языке
> програмирования)
> - не надо переписывать uniset :)
> - когда система уже установлена и работает (на контроллерах), то
> configure.xml не меняется и поэтому каждый раз "замедлять" загрузку из-за
> "парсенья" многих файлов, которые не менялись.. тоже не хорошо.
Не думаю, что количество файлов имеет значение. Время их разбора зависит 
только от объёма.
 
> P.S. Если кто-то видит другие более удачные варианты.. welcome..
Я бы начал использовать XInclude, для этого одну только строчку нужно добавить 
в Uniset
xmlXIncludeProcess(xml);

http://bugs.etersoft.ru/show_bug.cgi?id=6304

-- 
С уважением,
Виталий Липатов
Россия, Санкт-Петербург. www.etersoft.ru
GNU! ALT Linux Team! WINE! WIKI! LaTeX! LyX!


Подробная информация о списке рассылки Devel