为DITA Open Toolkit 1.5.2 XSLT样式表强制实施DITA版本

时间:2010-11-19 00:34:25

标签: xml xslt xslt-2.0 docbook dita

我有一个.xsl将xml从docbook转换为DITA。我遇到的一个问题是,创建的.dita文件会破坏外部参照。为了解决这个问题,我想尝试在转换过程中强制执行dita版本(我希望可能)。所以我的问题是:如何转换文档在转换时尊重DITA 1.2。

转换来自使用docbook2dita插件的DITA Open Toolkit 1.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 个答案:

答案 0 :(得分:1)

XSLT 2.0非常适合验证转换为特定XML Schema的结果。不支持DTD验证。

因此,如果您找到DITA的XML架构(并且似乎存在 some DITA schema ),则可以轻松验证它。 这是一个例子,取自Michael Kay的书“XSLT 2.0和XPath 2.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 EE 9.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 Schema验证的摘要:

0.1。导入至少一个架构,例如:

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

0.2。在<xsl:result-document>元素上指定严格验证,如下所示:

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