2016-11-09 69 views
1

我已經建立了一個XProc管道,其中我有一個<p:xslt>步驟。 Amoung這個樣式表的參數,我有一個參數,它是一個文檔()節點:將文檔()參數傳遞給XProc管道中的xslt

這是km_to_dita.xsl樣式表:

<?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" xmlns:dctm="http://www.documentum.com" xmlns:ale="http://www.amplexor.com/alcatel" 
    exclude-result-prefixes="xs dctm ale" version="2.0"> 

    <xsl:param name="conf-base" select="'file:/D:/Temp/ALE_config/'" /> 

    <xsl:param name="output-base" select="''"/> 

    <xsl:param name="lang" select="/element()[1]/@language"/> 

    <xsl:param name="graphics-reference-names" as="document-node()*" /> 

    <!-- my templates stuff... --> 
</xsl:stylesheet> 

因此,我調用這個XSLT在我與管道接下來的步驟(用於演示目的,可以設定一個<p:inline>,但它旨在綁定到一個步驟的結果端口):

<p:xslt name="km-dm-to-dita"> 
    <p:input port="source"> 
     <p:pipe port="list-dm" step="list-csv"/> 
    </p:input> 
    <p:input port="stylesheet"> 
     <p:document href="km_to_dita.xsl"/> 
    </p:input> 
    <p:with-param name="output-base" select="$dita.data-dir"/> 
    <p:with-param name="conf-base" select="$config-dir"/> 
    <!--<p:with-param name="graphics-reference-names"> 
     <p:pipe port="result" step="get-figure-references"/> 
    </p:with-param>--> 
    <p:with-param name="graphics-reference-names"> 
     <p:inline> 
      <graphic-ids> 
       <reference type="symbol" document="dm09011b0281121ef3.xml#G4" filename="g09011b0281d9c449.gif"/> 
       <reference type="symbol" document="dm09011b0281121ef3.xml#G3" filename="g09011b0281d9c449.gif"/> 
       <reference type="figure" document="dm09011b0281121ef3.xml#F33" filename="g09011b0281d9c44d.gif"/> 
       <reference type="symbol" document="dm09011b0281121ef3.xml#G5" filename="g09011b0281d9c451.gif"/> 
       <reference type="figure" document="dm09011b0281121ef5.xml#F116" filename="g09011b0281d9c458.gif"/> 
      </graphic-ids> 
     </p:inline> 
    </p:with-param> 

    <p:with-option name="output-base-uri" select="$dita.data-dir"/> 
</p:xslt> 

但隨着XML葫蘆(在oXygenXML)運行時,它失敗了,被提出錯誤的是(對不起鄉親這是我曾經的所有信息),但是已經確定,這是導致此錯誤)的<p:with-param name="graphics-reference-names">

任何想法?

回答

1

我終於找到了做什麼用它去錯了......首先,在<p:with-param>缺少必要的@select屬性,如提及in the XProc,但奇怪的是氧氣沒有提出任何驗證錯誤我的管道。

因此,管道可以是固定的那種方式:

必需項類型的變量$的值:

<p:with-param name="graphics-reference-names" select="/"> 
    <p:inline> 
     <graphic-ids> 
      <reference type="symbol" document="dm09011b0281121ef3.xml#G4" filename="g09011b0281d9c449.gif"/> 
      <reference type="symbol" document="dm09011b0281121ef3.xml#G3" filename="g09011b0281d9c449.gif"/> 
      <reference type="figure" document="dm09011b0281121ef3.xml#F33" filename="g09011b0281d9c44d.gif"/> 
      <reference type="symbol" document="dm09011b0281121ef3.xml#G5" filename="g09011b0281d9c451.gif"/> 
      <reference type="figure" document="dm09011b0281121ef5.xml#F116" filename="g09011b0281d9c458.gif"/> 
     </graphic-ids> 
    </p:inline> 
</p:with-param> 

通過上面的解決方案,因爲該參數被鑄造成一個字符串XSLT失敗graphics-reference-names是document-node();提供的值具有項目類型的xs:串

這是另一個問題,使不可解問題:XPROC只允許參數將被設置爲基本值,如在XSLT with XProc - parameter binding in the required type說明。