Единственное, что нас не устроило в работе с DocBook — это "хвосты" SGML, которые появились в головном файле для организации ссылок на разделы документа. Во-первых, неправильно, что каждый файл должен быть упомянут дважды (один раз в определении, второй в размещении) — там, где дублирование, появляются ошибки.
Во вторых, это неадекватный способ для работы со сложными структурами. В рассмотренном примере всего два фрагмента, реальные же документы на программные продукты, например, нашей компании состоят из примерно трехсот при глубине вложенности разделов равной четырем. Возникает естественное желание сделать структуру более наглядной. А как наиболее наглядно можно отразить иерархическую структуру, каковой является документ DocBook? Очевидно, иерархией каталогов.
Поэтому мы реализовали следующую схему работы с разветвленными документами DocBook:
под раздел любого уровня создается отдельный каталог.
Контент раздела помещается в XML-файл, лежащий в этом каталоге,
а для вложенных подразделов создаются свои подкаталоги.
Сборка фрагментов осуществляется автоматически несложной программой,
написанной на unix shell и XSLT.
Правильный порядок следования разделов достигается при помощи нестандартного атрибута
nr в тэгах <section>.
SGML-декларации становятся ненужными.
Последнее представляется важным с точки зрения не столько технологической (в конце концов, с дублированием имен разделов можно было бы справиться), сколько концептуальной. Если необходимость разделения контента и дизайна — это более-менее общее место, то мы пошли дальше и добились разделения контента, дизайна и структуры.
Что это означает на практике? Абстрагирование вышележащих разделов от нижележащих и возможность легкого изменения структуры. Раздел верхнего уровня "не знает", какие подразделы окажутся в нем в результате эволюции документа: какие подкаталоги будут, те и включатся. А если у редактора возникла идея перенести какой-то подраздел из одной части документа в другую, переместить его выше или ниже по иерархии, то это делается максимально просто: с помощью проводника Windows.
Небольшое замечание: в DocBook для маркировки разделов
имеются тэги с жестким позиционированием в иерархии:
<sect1>, <sect2> —
разделы соответственно первого и второго уровня —
и рекурсивный тэг <section>.
Для того, чтобы можно было манипулировать структурой описанным выше способом,
мы используем только <section>.