Edit online

How to Convert Definition Lists into Tables

Suppose you want your definitions lists (<dl>) to be displayed as tables in your PDF output.

To add this functionality using an Oxygen Publishing Template, follow these steps:
  1. If you have not already created a Publishing Template, you need to create one. For details, see How to Create a Publishing Template.
  2. Link the folder associated with the publishing template to your current project in the Project Explorer view.
  3. Using the Project Explorer view, create an xslt folder inside the project root folder.
  4. In this folder, create an XSL file (for example, named merged2html5Extension.xsl) with the following content:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      exclude-result-prefixes="xs"
      version="2.0">
    
      <xsl:template match="*[contains(@class, ' topic/dl ')]">
        <xsl:call-template name="setaname"/>
        <xsl:apply-templates select="
          *[contains(@class,
          ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
        <!-- Wrap in a table -->
        <table>
          <xsl:call-template name="commonattributes"/>
          <xsl:call-template name="setid"/>
          <xsl:apply-templates/>
        </table>
        <xsl:apply-templates select="
          *[contains(@class,
          ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
      </xsl:template>
    
      <xsl:template match="*[contains(@class, ' topic/dlentry ')]">
        <!-- Wrap in a table row -->
        <tr>
          <xsl:call-template name="commonattributes"/>
          <xsl:call-template name="setidaname"/>
          <xsl:apply-templates/>
        </tr>
      </xsl:template>
    
      <xsl:template match="
        *[contains(@class, ' topic/dd ')] |
        *[contains(@class, ' topic/dt ')]">
        <!-- Wrap in a cell -->
        <td>
          <xsl:call-template name="commonattributes"/>
          <xsl:call-template name="setidaname"/>
          <xsl:apply-templates select="
            ../*[contains(@class,
            ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
          <xsl:apply-templates/>
          <xsl:apply-templates select="
            ../*[contains(@class,
            ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
        </td>
      </xsl:template>
    
    </xsl:stylesheet>
  5. Open the template descriptor file associated with your publishing template (the .opt file) and set the XSLT stylesheet created in the previous step with the com.oxygenxml.pdf.css.xsl.merged2html5 XSLT extension point:
    <publishing-template>
      ...
      <pdf>
        ...        
        <xslt>
          <extension 
            id="com.oxygenxml.pdf.css.xsl.merged2html5"
            file="xslt/merged2html5Extension.xsl"/>
        </xslt>
  6. Edit the DITA Map PDF - based on HTML5 & CSS transformation scenario.
  7. In the Templates tab, click the Choose Custom Publishing Template link and select your template.
  8. Click OK to save the changes and run the transformation scenario.