Ссылки на пользовательские элементы в DocBook

еще одни выходные и время для дальнейшей игры с DocBook :-)

Я добавил пользовательские элементы в свой документ DocBook и перевожу их в FO, а затем в PDF с помощью XSLT-преобразования. Все это работает довольно хорошо. Например, у меня есть пользовательский элемент главы, например:

<MyChapter xml:id="mychapter">
<title>Test</title>
</MyChapter

Предыстория заключается в том, что я хочу применить определенные структуры в этом документе, и в основном это работает очень хорошо. Есть только одна вещь, которая не работает и с которой я застрял. Мои пользовательские элементы не могут быть целью внешней ссылки. Например. следующее не работает:

<xref linkend="mychapter"/>

Хотя я думаю, что понимаю причину того, что он не работает, я полностью потерялся в исправлении этого. Делал ли кто-нибудь здесь что-нибудь подобное раньше и мог бы дать мне подсказку, как к этому подойти?

РЕДАКТИРОВАТЬ:

Следуя первому ответу, я посмотрел, что произойдет, если будет ссылка на (стандартный) sect3. Кажется, это контролируется следующим шаблоном в этом файл:

<xsl:template match="d:section|d:simplesect
                     |d:sect1|d:sect2|d:sect3|d:sect4|d:sect5
                     |d:refsect1|d:refsect2|d:refsect3|d:refsection" mode="xref-to">
  <xsl:param name="referrer"/>
  <xsl:param name="xrefstyle"/>
  <xsl:param name="verbose" select="1"/>

  <xsl:apply-templates select="." mode="object.xref.markup">
    <xsl:with-param name="purpose" select="'xref'"/>
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
    <xsl:with-param name="referrer" select="$referrer"/>
    <xsl:with-param name="verbose" select="$verbose"/>
  </xsl:apply-templates>
  <!-- FIXME: What about "in Chapter X"? -->
</xsl:template>

Я пытаюсь следовать логике здесь, но я застрял на

<xsl:apply-templates select="." mode="object.xref.markup">

Что делает эта строка?


person Norbert    schedule 03.03.2018    source источник
comment
xml:id не относится к DocBook или XSLT. Также вы не объяснили, что именно происходит, потому что не работает, получаете ли вы какие-либо ошибки, если да, то какие, в каком контексте (проверка XML, выполнение таблицы стилей XSLT). А для DocBook и XSLT помогает, если вы точно объясните, с какими версиями вы работаете.   -  person Martin Honnen    schedule 03.03.2018
comment
Документ обрабатывается, но в результирующем PDF-файле ссылка разрешается как ???. Я использую DocBook версии 5.   -  person Norbert    schedule 03.03.2018
comment
И какая XSLT-версия таблиц стилей DocBook?   -  person Martin Honnen    schedule 03.03.2018
comment
github.com/docbook/xslt10-stylesheets   -  person Norbert    schedule 03.03.2018
comment
Разве атрибут элемента xref не должен называться linkend вместо linked?   -  person Martin Honnen    schedule 03.03.2018
comment
Я исправил атрибут linkend в посте. Однако это не было проблемой.   -  person Norbert    schedule 03.03.2018
comment
Давайте продолжим обсуждение в чате.   -  person Martin Honnen    schedule 03.03.2018


Ответы (1)


Обычно логика ссылок на внешние ссылки в DocBook довольно проста. Если кто-то попытается проиллюстрировать эту логику, используя человеческие слова, это будет что-то вроде: поместите ссылку на object1 с xml:id1 (используя linkend) и получите сгенерированный текст из object2 с xml:id2 (используя endterm) в качестве текста ссылки.

Итак, я предлагаю вам использовать заголовок моей главы в качестве справочного текста. Я бы изменил ваш образец следующим образом:

<MyChapter xml:id="mychapter">
<title xml:id="mychapter_title">Test</title>
</MyChapter>

Фрагмент ссылки:

<xref linkend="mychapter" endterm="mychapter_title"/>

Вы получите ссылку (саму ссылку) на свою главу с текстом ссылки (текстом ссылки) из названия главы.

Эта схема, безусловно, работает с элементами по умолчанию и должна работать с вашими пользовательскими элементами, если вы используете шаблон xsl по умолчанию, адаптированный к вашему пользовательскому mychapter.

Эта логика очень хорошо описана здесь: http://www.sagehill.net/docbookxsl/CrossRefs.html

person Eduard Tibet    schedule 04.03.2018
comment
Это прекрасно работает! Спасибо, что указали мне в этом направлении. Мне интересно, возможно ли, чтобы эти ссылки отображались как гиперссылки в документе PDF, чтобы пользователь мог щелкнуть по ним. Любая идея по этому поводу? - person Norbert; 04.03.2018
comment
@Norbert, пожалуйста, уточните свой вопрос. Существуют различия между: ссылкой ВНУТРИ документа, ссылкой ВНЕ документа и даже самими гиперссылками (uris), которые связаны с самим текстом ссылок, чтобы предоставить офлайн-пользователю любого печатного документа использовать его без компьютера (т.е. вручную распечатать URL-адрес в адресе бар позже). - person Eduard Tibet; 05.03.2018
comment
Исправление TYPO: т. е. вручную введите URL-адрес в адресной строке браузера позже. - person Eduard Tibet; 05.03.2018
comment
Извините за такую ​​неточность. В этом случае ссылка на мои пользовательские элементы заканчивается внутри того же документа. - person Norbert; 05.03.2018
comment
@norbert, он работает из коробки для внешних ссылок по умолчанию. ПРИМЕЧАНИЕ: если цель внешней ссылки находится на одной странице (т. е. источник внешней ссылки и цель внешней ссылки на одной странице) - похоже, ничего не произошло. Но это всего лишь ощущение, потому что программа просмотра PDF не переходит ни на какую другую страницу после нажатия внешней ссылки. - person Eduard Tibet; 05.03.2018
comment
Действительно, я проверил FO-файл, и кажется, что рефы на самом деле встроены в виде ссылок. К несчастью. они не работают в PDF (проверено с несколькими зрителями, ссылка находится на другой странице). Мне придется изучить этот вопрос более подробно, но, похоже, это не связано с преобразованием XSL. - person Norbert; 07.03.2018
comment
@norbet, Несколько идей, что можно сделать дальше. Если это не проблема xsl, возможно, FO-процессор (FOP, XEP, Antenna Formatter) интерпретировал файл fo по-другому. Пробуйте генерировать PDF с разными FO-процессорами - не только просматривать в разных вьюверах. При этом не забывайте про специальный xsl, относящийся к специальному процессору fo - см. соответственно fop1.xsl, xep.xsl, axf.xsl в таблицах стилей DocBook XSL и включите их соответствующим параметром в param.xsl (т.е. fop1 .расширения = 1) - person Eduard Tibet; 07.03.2018
comment
Спасибо. Я учту эти детали. - person Norbert; 07.03.2018