[Devel] uniset и составной configure.xml
Pavel Vaynerman
pv на etersoft.ru
Пт Дек 17 10:46:25 MSK 2010
> Ну, как я понял, XInclude без проблем позволяет включать файлы (как с
> относительными, так и с абсолютными путями).
> <xi:include href="test2.xml"/>
Тут есть тонкость. В такой нотации, он вставляет ВЕСЬ файл. А нам это не
подходит. Потому-что если мы например напишем
<sensors>
<xi:include href="s1.xml"/>
...
</sensors>
а в s1.xml будет
<sensors>
<item ../>
...
</sensors>
То в итоге будет:
<sensors>
<sensors>
<item ../>
...
</sensors>
...
</sensors>
При этом корневые теги в s1.xml обязаны быть. А нам надо без них..
Вообщем я там дальше покопал.. можно использовать нотацию
<xi:include href="s1.xml" parse="xml" xpointer="..."/>
но так сходу у меня не заработало. xpointer как раз ползволяет задать "часть"
документа..
> Мержить дерево никто не будет, да это и не нужно наверное? Как я понимаю,
> чтобы просто разбить на части, это достаточно, ну и для выделения
> хостоспецифичной части — тоже.
Ну не совсем.. у нас "жётская структура" configure.xml. Он состоит из
специальных секций. И тут либо тогда надо для каждого места вставки делать
свой маленький xml.. Но это тогда очень мелкая разюивка будет и не знаю
насколько удобна..(из серии grub2). Либо грамотно "мержить"..
> > Вариант 2.
> > -----------------
> Ну это излишнее усложнение, к тому же ещё одна неявность.
Да.. это я для количества предложил :)
> > Вариант 3.
> > ------------------
> >
> > Пришла ко мне такая идея. Есть мощные(!) внешние парсеры типа
> > xsltproc.
> >
> > А что если генерировать итоговый монолитный configure.xml при помощи них.
> > Т.е. в разработке находится много xml-файлов, а при сборке или на более
> > позднем этапе, это всё "собирается" в один configure.xml.
>
> Тогда нужно собирать не в xml, а в что-то обработанное, приспособленное для
> быстрой загрузки. Например, сохранять бинарное загруженное дерево XML (не
> нашёл средств), или превращать в другой вид данных.
Пытался найти в своё время, тоже не нашёл.. А с вдоичным форматом, есть
такакя тонкость.. вов ремя наладки и сопровождения системы часто приходится
вносить изменения... (по задержкам, фильтрам там каким-нибудь и т.п.).
Поэтому xml был удобнее.. Ну либо надо делать утилиту "прекомпиляции".
Типа "изменил исходные xml" - "перегенерил конф. файл" - "запустил"
> > К плюcам этого способа, отношу то, что:
> > - используются мощные внешние программы (на любом(!) удобном языке
> > програмирования)
> > - не надо переписывать uniset :)
> > - когда система уже установлена и работает (на контроллерах), то
> > configure.xml не меняется и поэтому каждый раз "замедлять" загрузку из-за
> > "парсенья" многих файлов, которые не менялись.. тоже не хорошо.
>
> Не думаю, что количество файлов имеет значение. Время их разбора зависит
> только от объёма.
Тут получиться работа по загрузке каждого файла, обработке и выгрузке..
>
> > P.S. Если кто-то видит другие более удачные варианты.. welcome..
>
> Я бы начал использовать XInclude, для этого одну только строчку нужно
> добавить в Uniset
> xmlXIncludeProcess(xml);
Да я так и сделал... Только запушить не успел :)
--
Pavel Vaynerman
www.etersoft.ru
Подробная информация о списке рассылки Devel