2015-12-04 5 views
0

Этот вопрос является частью XSL-FO, части XSLT и части DITA. В общем, этот вопрос является попыткой устранить то, что я делаю неправильно, с fo:marker и понять, возможно ли то, что я пытаюсь.XSL-FO: Можно ли использовать маркер для хранения чего-либо?

Я пытаюсь использовать fo: marker для хранения текста из определенного элемента, а затем извлекать этот текст в заголовке, как вы могли бы ожидать. Я делаю это как часть пользовательской таблицы стилей, которая является частью плагина DITA. Идея заключается в том, что плагин предназначен для документа, в котором перечислены последовательности шагов для процедур. Шаги к этим процедурам обычно включают кучу изображений. Таким образом, требование состоит в том, что когда шаг разбивается на страницу, первое предложение этого шага действует как заголовок заголовка. В DITA первое предложение этапа фиксируется в элементе cmd. Итак, я думал, что смогу настроить шаблон, который обрабатывает элементы cmd с fo:marker.

Вот что шаблон для cmd выглядит с маркером я добавил:

<xsl:template match="*[contains(@class, ' task/cmd ')]" priority="1"> 
    <fo:block xsl:use-attribute-sets="cmd">      
     <xsl:call-template name="commonattributes"/>    
     <xsl:if test="../@importance='optional'"> 
      <xsl:call-template name="insertVariable"> 
       <xsl:with-param name="theVariableID" select="'Optional Step'"/> 
      </xsl:call-template> 
      <xsl:text> </xsl:text> 
     </xsl:if> 
     <fo:inline> 
      <fo:marker marker-class-name="current-step"/> 
     </fo:inline> 
     <xsl:apply-templates/>    
    </fo:block> 
</xsl:template> 

Это не работает. Я играл с этим немного и только был в состоянии получить эту работу на info элементов, что является родственный к cmd, когда я изменял шаблон:

<xsl:template match="*[contains(@class, ' task/info ')]"> 
    <fo:block xsl:use-attribute-sets="info">  
     <fo:inline> 
      <fo:marker marker-class-name="current-step"> 
       <xsl:apply-templates/> 
      </fo:marker> 
     </fo:inline> 
     <xsl:call-template name="commonattributes"/>    
     <xsl:apply-templates/> 
    </fo:block> 
</xsl:template> 

Дело в том, я попробовал эту конструкцию с элементом cmd (т. е. включать инструкцию apply-templates), и он все равно ничего не производит.

Является ли это возможным и почему мой маркер работает только, когда я включаю инструкцию apply-templates и только для элемента info?

ответ

2

Вам нужно что-то внутри fo:marker, потому что это содержимое fo:marker, которое «может быть извлечено и отформатировано из fo: static-content ... с помощью fo: retrieve-marker». См. http://www.w3.org/TR/xsl11/#fo_marker

Я не знаю, почему fo:marker с содержимым и с тем же именем класса маркеров не работает в обоих контекстах. Вы используете retrieve-position="first-including-carryover" на fo:retrieve-marker? Вы отправились в fo:marker для info так, чтобы он маскировал fo:marker для cmd?

Совершенно отдельной альтернативой может быть включение каждого шага в таблицу с одним столбцом без границ и размещение содержимого cmd в заголовке таблицы.

+0

Спасибо за отзыв @tony. Сначала я попробовал это как заголовок таблицы, но это было сложно, потому что я уже использую таблицы в том, как сами шаги создаются. Одним из других требований является то, что изображения для шага должны существовать бок о бок с соответствующей инструкцией. Я полагал, что использование маркеров выполнило бы то, что я хочу, не слишком усложняя структуру шагов. В общем, скажете ли вы, что использование заголовка или маркера - единственный реальный способ, которым я могу выполнить то, что я пытаюсь сделать? –

+0

Вы можете поместить 'fo: table' внутри' fo: table-cell', но поскольку вы уже используете таблицы, вы могли бы, по-видимому, комбинировать маркеры и таблицы и использовать 'fo: retrieve-table-marker (http: // www .w3.org/TR/xsl11/# fo_retrieve-table-marker), чтобы получить маркер, установленный в текущей таблице. –

+0

Спасибо Тони. Основываясь на ваших отзывах, мне удалось выяснить, как я неправильно использовал fo: marker. –

 Смежные вопросы

  • Нет связанных вопросов^_^