[docs] Re: on olinking

Oleg A. Paraschenko olpa на xmlhack.ru
Пн Ноя 17 20:39:59 MSK 2003


  Привет,

On Mon, 17 Nov 2003 15:31:31 +0300
Vitaly Ostanin <vyt на vzljot.ru> wrote:

> On Mon, 17 Nov 2003 14:39:11 +0300
> "Oleg A. Paraschenko" <olpa на xmlhack.ru> wrote:
> 
> <skipped/>
> 
> >   Я правильно понимаю, что docs.xml должен выглядеть так:
> > 
> > ---------
> > <!DOCTYPE targetset SYSTEM 
> > "/usr/share/xml/docbook/xsl-stylesheets/common/targetdatabase.
> > dtd"
> > >
> > 
> > <targetset>
> >   <document targetdoc="admin">
> >     <xi:include 
> >       href="target.db"  
> >       xmlns:xi="http://www.w3.org/2001/XInclude"/>
> >   </document>
> >   <document targetdoc="devel">
> >     <xi:include 
> >       href="../devel/target.db"  
> >       xmlns:xi="http://www.w3.org/2001/XInclude"/>
> >   </document>
> > </targetset>
> > --------
> > 
> >   ?
> 
> Примерно так.

  Продолжаем мысленный эксперимент. Теперь у нас есть
"DOCS_ROOT/devel/make/make.xml", имеющий внутреннюю olink-ссылку
(обозначим её "O") на "devel.make.install". Оба файла, "admin.xml" и
"devel.xml" через xinclude подхватывают "make.xml", а это значит, что и в
"admin.xml", и в "devel.xml" есть один и тот же элемент "O" с одним и тем
же значением "targetdoc".

  Если в "targetdoc" написано "devel", то обиженным получается "admin";
если в "targetdoc" написано "admin", то обиженным получается "devel".

...

> 
> > > Наличие битых ссылок нужно проверять в любом случае.
> > > 
> > > olink не обязательно преобразовывается в xref - это может
> > > быть и link, а дублировать логику работы с olink из
> > > оригинальных стилей- лишняя работа.
> > 
> >   А ведь действительно -- лишняя работа. Замечание принято. Эта
> > функциональность должна быть непосредственно в
> > docbook-style-xsl. Надо будет Бобу написать.
> 
> Скепсис - раньше DocBook V5 такой функциональности не будет, и
> скорее всего, что не будет вообще. Она не вписывается в идеологию
> DocBook, а локальные фичи предлагается делать через customization
> layers.

  Тут, кажется, дело интереснее, чем локальная фича. Надо доосмыслить, что
происходит и расписать наш use case для olink. Думаю, другим тоже будет
интересно.

...

> > > 
> > > Стремительно, конечно, не будет. Но мне бы не хотелось
> > > допускать то, что потом может оказаться ошибкой дизайна.
> > 
> >   Именно поэтому предлагаю устроить развлечение: я буду
> >   придумывать противоречия и проблемы, а ты объяснять, почему
> >   их нет.
> 
> У меня это развлечение каждый день с 9.30 до 20.00 :) Предлагаю
> лучше снова выбраться в Морфей.

  Не, это далеко и надолго.

> 
> <skipped/>
> 
> > > > > Чтобы менять семантику olink, нужны веские причины.
> > > > 
> > > >   В данном случае семантика уже поменена, ибо сейчас база
> > > >   olink-ссылок
> > > > создаётся не из тех документов, в которые ведут ссылки, а
> > > > из самого документа, из которого ведут ссылки.
> > > 
> > > Это не так. База создаётся (должна создаваться) для каждого
> > > раздела независимо.
> > 
> >   Я правильно понимаю, что на самом деле "для каждого раздела"
> >   -- это "для каждой бумажной книжки"?
> 
> Я имею в виду, что в $CVSROOT есть несколько каталогов с
> документами, разбитыми по тематике - admin, user, install,
> junior. Каждый из них я называю отдельным разделом.
> 
> Готовые книги (бумажные и html-версии) собираются (должны
> собираться) из фрагментов одного или нескольких разделов. Отсюда
> и books/junior-2.2 и т.п.

  Понятно, но возникает другой вопрос. Как будет выглядеть физическое
проявление разделов? Вот имею я книжку, которая в xml ссылается куда-то в
devel. Куда будет указывать эта ссылка из pdf?


> 
> > > > * Это несколько неочевидно, так как собирать надо не так
> > > > как сейчас.* Предложенная замена "olink" на "xref" делает
> > > > явным и понятным, что происходит на самом деле.
> > > 
> > > Хорошо, пусть будет замена, но не вместо, а дополнительно к
> > > текущей схеме - они не конфликтуют. Идёт?
> > 
> >   Нет, ни в коем случае. Две похожие "гениальные" идеи
> >   одновременно --
> > это ужасно. 
> 
> Это совершенно нормально. Просто надо сделать две реализации, тем
> более, что это несложно и бесконфликтно. А потом посмотреть,
> какая выживет :)

  На самом деле, я понял решение задачи. Оба подхода замечательно
состыковываются. И получается именно так, как должно быть.

> 
> > Кроме того, я уже понял, что замену на "xref" надо
> > вводить в родные стили docbook.
> 
> Они слишком консервативны. Но попробовать можно :)
> 
> В общем, итог - я против убийства текущей схемы, но не против
> добавления новой.

  Переработанный подход:

* На этапе тюнинга olink-ссылки по возможности заменяются
  на xref или ulink.
* Если теги "olink" остались, то это значит, что в документе есть внешние
  ссылки. Тогда:

+ Документ module-targetset.xml стандартным образом подключает базы данных
  ссылок внешних модулей.

+ В Makefile установлена переменная OLINK_DATABASES, в которой перечислены
  базы данных ссылок внешних модулей, от которых зависит
  "module-targetset.xml", например:

    OLINK_DATABASES := ../devel/devel-targets.olinkdb \
         ../some/where/where-targets.olinkdb

+ make, прежде чем преобразовывать документ в html, fo или ещё что-то,
  проверяет список OLINK_DATABASES и пересоздаёт базы ссылок, если они
  устарели.

  Теперь, вроде бы, всё сходится. Делаю?


  И ещё комментарии.

--

  Если убрать переписывание ссылок во время тюнинга, а в OLINK_DATABASES
добавить базу ссылок собираемого документа (самого себя), то получится в
точности то, что было раньше.

--

  Изначально мне хотелось убрать возню с olink-ссылками когда они все в
действительности являются внутренними. (Кстати, на моём домашнем
компьютере это даёт существенное убыстрение сборки)

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

> 
> <skipped/>
> 
> -- 
> Regards, Vyt
> mailto:  vyt на vzljot.ru
> JID:     vyt на vzljot.ru


-- 
Oleg 



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