Можно ли передать пользовательские параметры ANT в пользовательский плагин с помощью DITA-OT?

Я создал плагин DITA-OT PDF, который хорошо работает и должен работать. Следующий шаг — передать параметры ANT в XSLT-файлы моего пользовательского плагина, переопределяющие их. Как видите, это расширяет возможности обработки плагинов pdf2, и у меня есть работающие пользовательские таблицы стилей.

Вот документация о том, как это сделать. Это работает для плагинов по умолчанию (pdf2, xhtml и т. д.) http://dita-ot.github.io/1.8/dev_ref/plugin-xsltparams.html

Но когда я пытаюсь проделать тот же трюк для своего собственного плагина, я никогда не могу запустить интеграцию. Я добавил следующую строку в "plugin.xml"

<?xml version='1.0' encoding='UTF-8'?>
<plugin id="com.mymods.pdf">
  <require plugin="org.dita.pdf2" />
  <feature extension="dita.conductor.transtype.check" value="com.mymods.pdf" />
  <feature extension="dita.transtype.print" value="com.mymods.pdf" />
  <feature extension="dita.conductor.target.relative" file="integrator.xml" />
  <feature extension="dita.conductor.com.mymods.pdf.param" file="insertParameters.xml"/>
<template file="build_mymods_pdf_template.xml"/>
</plugin>

И мой "insertParameters.xml" выглядит так:

<?xml version='1.0' encoding='UTF-8'?>
<dummy>
  <!-- EXAMPLE: <param name="paramNameinXSLT" expression="${antProperty}" if="antProperty"/> -->
  <param name="custom.data1" expression="${custom.data1}" if="custom.data1"/>
  <param name="custom.data2" expression="${custom.data2}" if="custom.data2"/>
</dummy>

Затем, когда я пытаюсь интегрировать изменения в DITA-OT, я получаю следующее:

BUILD FAILED
DITA-OT1.8.4\integrator.xml:59: The following error occurred while executing this line:
DITA-OT1.8.4\integrator.xml:49: Integration failed: Plug-in com.mymods.pdf uses an undefined extension point dita.conductor.com.mymods.pdf.param

Еще одна дополнительная информация: я попытался изменить в «plugin.xml» одну строку, чтобы указать на оригинальный плагин pdf2 вместо моего собственного плагина:

<feature extension="dita.conductor.pdf2.param" file="insertParameters.xsl"/>

Затем интеграция проходит успешно, но затем, когда я пытаюсь обработать вывод в формате PDF с помощью моего плагина, я получаю сообщение об ошибке, которое вызывает BUILD FAILED:

mycustom.xsl Fatal Error! Variable custom.data1 has not been declared (or its declaration is not in scope)
mycustom.xsl Fatal Error! Variable custom.data2 has not been declared (or its declaration is not in scope)

Можно ли вообще передавать параметры ANT в пользовательский плагин XSLT-обработку или можно использовать только сценарии преобразования DITA-OT по умолчанию (например, pdf2, xhtml)? Что я делаю неправильно?


person sailfish    schedule 28.03.2014    source источник


Ответы (1)


Вам нужно добавить точку расширения для dita.conductor.com.mymods.pdf.param:

<extension-point id="dita.conductor.com.mymods.pdf.param"
                 name="Custom parameters"/>

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

<xsl:param name="custom.data1"/>
<xsl:param name="custom.data2"/>
person jelovirt    schedule 29.03.2014
comment
Теперь он проходит и создает PDF. По какой-то причине я не могу правильно передать значение из ANT-скрипта в mycustom.xsl. Поэтому custom.data1 и custom.data2 пусты. Дополнительная информация: значения параметров задаются прямо из командной строки. Спасибо, что помогли мне так далеко! - person sailfish; 31.03.2014
comment
У вас есть обработка для dita.conductor.com.mymods.pdf.param в вашем Ant? Обратите внимание, что ваша пользовательская точка расширения не обрабатывает параметры автоматически, вы должны явно реализовать ее в своем скрипте Ant с помощью чего-то вроде <dita:extension id="dita.conductor.com.mymods.pdf.param" behavior="org.dita.dost.platform.InsertAction"/>. - person jelovirt; 31.03.2014
comment
Какой ANT-скрипт вы имеете в виду? Каталог плагинов build_mymods_pdf_template.xml, а там <target name="dita2com.mymods.pdf.init">? Затем я должен добавить задачу XSLT, которая включает <param> элементов, как в insertParameters.xml? - person sailfish; 02.04.2014
comment
Да, в build_mymods_pdf_template.xml. В имени расширения dita.conductor.com.mymods.pdf.param нет ничего, что делало бы его используемым для передачи параметров, это просто имя точки расширения. Таким образом, вы должны точно сказать DITA-OT, что с ним делать. В этом случае используется обработка InsertAction. - person jelovirt; 03.04.2014
comment
Добавлено в build_my_mods_pdf_template.xml в: <target name="dita2com.mymods.pdf" depends="dita2com.mymods.pdf.init, dita2pdf2" dita:extension="depends org.dita.dost.platform.InsertDependsAction" dita:depends="transform.fo2pdf.xep, transform.fo2pdf.ah, transform.fo2pdf.fop, {depend.org.dita.pdf2.format}"/> И я продолжаю получать эту ошибку: xslt не поддерживает вложенный элемент расширения. Кажется, мне нужно что-то сделать с атрибутом точки расширения, но я не могу понять, как в этом случае. - person sailfish; 07.04.2014
comment
Вы пытаетесь использовать build_mymods_pdf_template.xml как есть в качестве сценария Ant? DITA-OT не обрабатывает расширения динамически, поэтому вам нужно объявить build_mymods_pdf_template.xml в качестве шаблона в вашем plugin.xml и использовать сгенерированный build_mymods_pdf.xml в качестве сценария Ant. - person jelovirt; 07.04.2014
comment
да. Я забыл добавить его сюда, но да, он был там для последних попыток, прежде чем ответить на мой собственный вопрос. Я также изменил build.xml, чтобы импортировать сгенерированный build_mymods_pdf.xml, а затем столкнулся с той же проблемой, что и в моем предыдущем комментарии. - person sailfish; 08.04.2014