[docs] Re: makefile rework intro

Vitaly Ostanin vyt на vzljot.ru
Ср Окт 29 11:34:55 MSK 2003


On Tue, 28 Oct 2003 21:44:49 +0300
Oleg A.Paraschenko <olpa на xmlhack.ru> wrote:

>   Привет!
> 
> On Tue, 28 Oct 2003 12:34:02 +0300
> Vitaly Ostanin <vyt на vzljot.ru> wrote:
> 
> ...
> > 
> > > > Сразу добавлю, что сейчас в Makefiles разброд с
> > > > переменными - они могут быть "параметр значение", а могут
> > > > быть просто"значение".
> > > > 
> > > > Лучше в новых Makefiles использовать только "параметр
> > > > значение", чтобы можно было использовать переменную, даже
> > > > если "значение" не определено.
> > > 
> > >   Не понял. Нужны пояснения. Можно в jabber.
> > 
> > Например, есть два варианта:
> > 
> > 1.
> > ULINK_LEAVE = 1
> > xsltproc --param ulink.leave.duplicates.after $(ULINK_LEAVE)
> > 
> > 2.
> > ULINK_PARAMS = --param ulink.leave.duplicates.after 1
> > xsltproc $(ULINK_PARAMS)
> > 
> > Первый вариант неудачен, поскольку при неопределённом
> > ULINK_LEAVE стили не отработают. Второй вариант
> > самодостаточен, поскольку при неопределённом ULINK_PARAMS
> > просто будут использованы параметры по умолчанию из стилей.
> 
>   Насколько я вижу, от первого варианта быстро избавиться не
>   получится, так как надо править все make-файлы. А я
>   предпочитаю менять понемногу.

Для перехода к схеме сборки по зависимостям и так придётся
править все файлы... В принципе, первый вариант не сложно сделать
и потом.

>   Чтобы не забыть вычистить такие штуки -- можно записать на
>   меня задачу в bugzill'e.

Я не забуду :)

<skipped/>

> > > > > Цепочка преобразований.
> > > > > 
> > > > > Общее начало:
> > > > > .xml -> xinclude -> profiling+tuning (A)
> > > > 
> > > > XInclude незачем выделять в отдельный этап, IMHO.
> > > 
> > >   Пусть всё-таки будет. Интуиция советует, не хочу ей
> > >   противоречить.
> > 
> > Лучше всё-таки аргументировать. 
> > 
> > XInclude должен выполняться перед любой обработкой. 
> 
>   Да.
> 
> > 
> > XInclude выполняется для всех документов, поскольку это
> > проще, чем выполнение в зависимости от наличия включений. 
> 
>   Да.
> 
> > 
> > XInclude может выполняться в один проход с другими ключами
> > обработки и не конфликтует ни с одним из них.
> 
>   То есть XInclude никак не связан с обработкой. А как пишет
>   Ален Голуб: "Сущность программирования: без сюрпризов,
>   минимум сцепления и максимум согласованности.". Объединение
>   независимых сущностей до добра не доводит. Другое дело, что
>   надо показать, что Xinclude -- это отдельная сущность.

XInclude - это не отдельная сущность. Это прослойка объединения
модульных документов, она находится уровнем ниже DocBook. 

И она не отделима от документов, поскольку без XInclude документы
невалидны и не могут быть обработаны стилями DocBook. Поэтому я и
возражаю против отдельной обработки XInclude - IMHO, это и есть
лишнее умножение сущностей.

Единственная потребность в обработке документов _до_ XInclude -
поиск зависимостей конечного документа от исходных. И то для
этого в последних libxml2/libxslt есть встроенное средство (не
помню название параметра).

> > Отдельное выполнение XInclude потребует дополнительного
> > запуска xmllint и дополнительной обработки как всего дерева
> > документов, так и всех external entities, DTD и т.п. - то
> > есть, накладно по ресурсам.
> > 
> > А вот зачем это нужно, пока не ясно... К тому же отдельный
> > этап с XInclude всегда можно добавить.
> 
>   Или убрать ;-)
> 
>   Поясняю, зачем это нужно мне. Я хочу, чтобы при некоторых
>   условиях "make" не пересобирал XInclude. Это желание
>   естественным образом разделяет xinclude+profiling+tuning на
>   xinclude и profiling+tuning, и, таким образом, xinclude
>   становится отдельной сущностью.

Я не делал точных замеров, но субъективно я не заметил разницы в
скорости между обработкой документа с XInclude и уже собранного
документа. Это справедливо для libxml2 >= 2.4.25, тогда код
включений был полностью переписан.

>   Про ресурсы. Xinclude, "external entities, DTD и т.п."
>   выполняются только на первом шаге, больше их не будет.
>   Ресурсы, потраченные на это, скорее всего, очень велики. По
>   сравнению с ними, ещё один запуск xsltproc незаметен. А если
>   делается парочка profiling, то выделение xinclude в отдельный
>   шаг явно выгодно.
> 
>   Далее. Отладка. Результат Xinclude - важный промежуточный
>   файл. Если tuning+profiling работает не так как ожидалось,
>   что делать? Кто виноват -- неправильный XSLT или неправильный
>   XPointer?

Отладка - это серьёзно. Даже убедительно :) Помню, как для этого
приходилось запускать xmllint --xinclude...

Хорошо, пусть будет отдельный XInclude.

На всякий случай параметры, с которыми я собирал итоговый
документ:

xmllint --nonet --xinclude --loaddtd --noent file.xml

<skipped/>

-- 
Regards, Vyt
mailto:  vyt на vzljot.ru
JID:     vyt на vzljot.ru
----------- следущая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: отсутствует
Url     : /pipermail/docs/attachments/20031029/f44110fe/attachment.bin


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