代码之家  ›  专栏  ›  技术社区  ›  Ace

为DITA Open Toolkit 1.5.2xslt样式表强制使用DITA版本

  •  1
  • Ace  · 技术社区  · 15 年前

    我有一个.xsl,它将xml从docbook转换为DITA。我遇到的一个问题是,创建的.dita文件会破坏外部参照。为了解决这个问题,我想尝试在转换期间强制使用dita版本(我希望这是可能的)。因此,我的问题是:如何使转换后的文档在被转换时尊重DITA1.2。

    转换来自使用docbook2dita插件的ditaopentoolkit1.5.2 下面是当前的.xsl:

    <?xml version="1.0" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" >
    <xsl:import href="./xslt/ditabaseOutput.xsl"/>
    <xsl:import href="./xslt/dbReader.xsl"/>
    
    <xsl:output
        method="xml"
        indent="yes"
        omit-xml-declaration="no"
        standalone="no"
        doctype-public="-//OASIS//DTD DITA Composite//EN"
    />
    <xsl:template match="/">
        <xsl:apply-templates select="." mode="topic.topic.in"/> 
    </xsl:template>
    
    </xsl:stylesheet>
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Dimitre Novatchev    15 年前

    XSLT 2.0非常适合验证转换到特定XML模式的结果 . 不支持DTD验证。

    所以,如果您找到了一个用于DITA的XML模式(而且 some DITA schema 现有的,您可以很容易地验证它。 下面是一个示例,摘自Michael Kay的书“XSLT 2.0和xpath2.0”,如何对结果文档执行验证:

    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="2.0" 
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns="http://www.w3.org/1999/xhtml">
    
    <xsl:import-schema namespace="http://www.w3.org/1999/xhtml" 
       schema-location="http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd"/>
    <xsl:output method="xhtml" indent="yes"/>                   
    <xsl:template match="/">
      <xsl:result-document validation="strict">
        <html>
          <head>
            <title><xsl:value-of select="poem/title"/></title>
          </head>
          <body>
            <h1 align="center"><xsl:value-of select="poem/title"/></h1>
            <p align="center"><i>by </i><xsl:value-of select="poem/author/name"/> 
              (<xsl:value-of select="poem/author/(birth,death)" separator="-"/>)</p>
            <xsl:for-each select="poem/stanza">
              <p>
                <xsl:for-each select="line">
                  <xsl:value-of select="."/>
                  <xsl:if test="position() != last()"><br/></xsl:if>
                </xsl:for-each>
              </p>
            </xsl:for-each>
          </body>
        </html>
      </xsl:result-document>
    </xsl:template>                   
    </xsl:stylesheet>
    

    当此转换应用于以下XML文档时 :

    <?xml version="1.0"?>
    <poem xmlns="http://poetry.org/ns" 
          xsi:schemaLocation="http://poetry.org/ns poem.xsd"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       <author>
         <name>Rupert Brooke</name>
         <birth>1887-08-03</birth>
         <death>1915-04-23</death>
       </author>
       <date>1912</date>
       <title>The Hill</title>
       <stanza>
          <line>Breathless, we flung us on the windy hill,</line>
          <line>Laughed in the sun, and kissed the lovely grass.</line>
          <line>You said "Through glory and ecstasy we pass;</line>
          <line>Wind, sun, and earth remain, and birds sing still,</line>
          <line>When we are old, are old...." "And when we die</line>
          <line>All's over that is ours; and life burns on</line>
          <line>Through other lovers, other lips" said I,</line>
          <line>"Heart of my heart, our heaven is now, is won!"</line>
       </stanza>
       <stanza>
          <line>We are Earth's best, that learnt her lesson here.</line>
          <line>Life is our cry. We have kept the faith!" we said;</line>
          <line>"We shall go down with unreluctant tread</line>
          <line>Rose-crowned into the darkness!".... Proud we were,</line>
          <line>And laughed, that had such brave true things to say.</line>
          <line>-- And then you suddenly cried, and turned away.</line>
      </stanza>
    </poem>
    

    Saxon EE9.2.1.2处理器生成以下错误消息:

    SystemID: C:\Books\XSLT 2.0 and XPath 2.0\Downloads\Chapter4\ch04\poem-to-xhtml.xsl
    Engine name: Saxon-EE 9.2.1.2
    Severity: error
    Description: Failed to compile stylesheet. 1 error detected.
    
    SystemID: C:\Books\XSLT 2.0 and XPath 2.0\Downloads\Chapter4\ch04\poem-to-xhtml.xsl
    Engine name: Saxon-EE 9.2.1.2
    Severity: fatal
    Description: Attribute align is not permitted in the content model of the complex type of element h1
    Start location: 16:0
    URL: http://www.w3.org/TR/xslt20/#err-XTTE1510
    

    下面是如何实现XML模式验证的摘要 结果文件:

    .1条。至少导入一个架构,例如:

    <xsl:import-schema namespace="http://www.w3.org/1999/xhtml" 
       schema-location="http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd"/>
    

    .2条。上 <xsl:result-document> 元素指定严格的验证,如下所示:

      <xsl:result-document validation="strict">