xsl-list
[Top] [All Lists]

[xsl] Saxon processing problem...

2008-03-29 10:46:52



All of this should work, did work, but doesn't.  The source document
contains an error message table. The stylesheet should simply grab a
group of rows from a table, and write the results to a set of result-
documents based on a group-size parameter. I am using several other
stylesheets that perform similar tasks, and all of them work. This
source document is DITA-based; the others are not. Any help would be
greatly appreciated.

Error #1 -
If use Saxon8 or Saxon9 and try to output to a <result-document> from
the command line, I get a java.lang.StackOverflowError. If I use
Saxon9B in Eclipse (w/oXygenxml), I get an error that says "[Saxon9B]
null    Ant_Doc/xsl     mkpreprocerrs.xsl       Unknown 1206732845515   291"

Error #2
If I comment the <result-document> tags and use Saxon6.5.5 in Oxygen,
the transformations occur, but the title and short description
content in the output appear after the declaration, like this :


<?xml version="1.0" encoding="utf-8"?>Source document titleShort
decription content
<!DOCTYPE reference
   PUBLIC "-//OASIS//DTD DITA Reference//EN" "Reference.dtd">
<reference id="allprocerrs1-ref">
    <title id="allprocerrs1-title">Messages 2601 through 2621</title>

Source Document

<?xml version="1.0"?>
<!DOCTYPE reference PUBLIC "-//OASIS//DTD DITA Reference//EN" "reference.dtd">
   <reference id="allpreprocerrs_ref">
      <title>Source document title</title>
<shortdesc> Short decription content/shortdesc>
      <refbody>
         <table id="allpperrs_tbl">
            <tgroup cols="5">
               <colspec colnum="1" colname="col1" colwidth="1*"/>
               <colspec colnum="2" colname="col2" colwidth="1*"/>
               <colspec colnum="3" colname="col3" colwidth="3*"/>
               <colspec colnum="4" colname="col4" colwidth="3*"/>
               <colspec colnum="5" colname="col5" colwidth="1*"/>
               <thead>
                  <row>
                     <entry colname="col1" align="center">Type</entry>
<entry colname="col2" align="center">Number</ entry> <entry colname="col3" align="center">Message</ entry> <entry colname="col4" align="center">Possible Cause</entry> <entry colname="col5" align="center">UltraLite</ entry>
                  </row>
               </thead>
               <tbody>
                  <row>
                     <entry colname="col1" align="left">
                        <p>Error</p>
                     </entry>
                     <entry colname="col2">
                        <p>2601</p>
                     </entry>
                     <entry colname="col3" align="left">
                        <p>subscript value %1 too large</p>
                     </entry>
                     <entry colname="col4">
<p>You have attempted to index a host variable that is an array with a value too large for the array.</p>
                     </entry>
                     <entry colname="col5">
                        <p>False</p>
                     </entry>
                  </row>
                  <row>
                     <entry colname="col1" align="left">
                        <p>Error</p>
                     </entry>
                     <entry colname="col2">
                        <p>2602</p>
                     </entry>
                     <entry colname="col3" align="left">
<p>combined pointer and arrays not supported for host types</p>
                     </entry>
                     <entry colname="col4">
<p>You have used an array of pointers as a host variable. This is not legal.</p>
                     </entry>
                     <entry colname="col5">
                        <p>False</p>
                     </entry>
                  </row>
                  <row>
                     <entry colname="col1" align="left">
                        <p>Error</p>
                     </entry>
                     <entry colname="col2">
                        <p>2603</p>
                     </entry>
                     <entry colname="col3" align="left">
<p>combined pointer and arrays not supported for host types</p>
                     </entry>
                     <entry colname="col4">
<p>You have attempted to declare a host variable as an array of character arrays. This is not a legal host variable type</p>
                     </entry>
                     <entry colname="col5">
                        <p>False</p>
                     </entry>
                  </row>
                  <row>
                     <entry colname="col1" align="left">
                        <p>Error</p>
                     </entry>
                     <entry colname="col2">
                        <p>2604</p>
                     </entry>
                     <entry colname="col3" align="left">
                        <p>VARCHAR type must have a length</p>
                     </entry>
                     <entry colname="col4">
<p>You have attempted to declare a VARCHAR or BINARY host variable using the DECL_VARCHAR or DECL_BINARY macro but have not specified
                           a size for the array.
                        </p>
                     </entry>
                     <entry colname="col5">
                        <p>False</p>
                     </entry>
                  </row>
                  <row>
                     <entry colname="col1" align="left">
                        <p>Error</p>
                     </entry>
                     <entry colname="col2">
                        <p>2605</p>
                     </entry>
                     <entry colname="col3" align="left">
                        <p>arrays of VARCHAR not supported</p>
                     </entry>
                     <entry colname="col4">
<p>You have attempted to declare a host variable as an array of VARCHAR or BINARY. This is not a legal host variable type.</p>
                     </entry>
                     <entry colname="col5">
                        <p>False</p>
                     </entry>
                  </row>
                  <row>
                     <entry colname="col1" align="left">
                        <p>Error</p>
                     </entry>
                     <entry colname="col2">
                        <p>2606</p>
                     </entry>
                     <entry colname="col3" align="left">
<p>VARCHAR host variables cannot be pointers</p>
                     </entry>
                     <entry colname="col4">
<p>You have attempted to declare a host variable as a pointer to a VARCHAR or BINARY. This is not a legal host variable type.</p>
                     </entry>
                     <entry colname="col5">
                        <p>False</p>
                     </entry>
                  </row>
               </tbody>
            </tgroup>
         </table>
      </refbody>
   </reference>

Stylesheet

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="2.0">

        <xsl:output method="text"/>
        <xsl:output method="xml"
                doctype-public="-//OASIS//DTD DITA Composite//EN"
                doctype-system="reference.dtd"
                indent="yes"
                name="xml"/>
                
        <xsl:strip-space elements="*"/>
        <xsl:param name="grp-size" select="number(20)"/>

        <xsl:template match="//table">
<xsl:apply-templates mode="stategroup" select="//tbody/row[position () mod $grp-size=1]"/>
        </xsl:template>

        <xsl:template match="//tbody/row" mode="stategroup">
         <xsl:variable name="num">
                        <xsl:number count="row[position() mod $grp-size=1]"/>
        </xsl:variable>
<xsl:variable name="filename" select="concat('output/preprocerrs/ preprocerr',$num)"/>
                <xsl:result-document href="{$filename}" format="xml">
                
<xsl:variable name ="ref-id" select="concat('preproc', $num,'- ref' )"/> <xsl:variable name ="ttl-id" select="concat('preproc', $num,'- ttl' )"/> <xsl:variable name ="tbl-id" select="concat('preproc', $num,'- tbl' )"/>

                                <reference id="{$ref-id}">
                                        <title id="{$ttl-id}">Preprocessing 
Errors
                                                <xsl:variable name="start" 
select="./entry[(_at_)colname='col2']"/>
<xsl:value-of select="$start[position() mod $grp-size=1]"/> through <xsl:apply-templates mode="varstate" select=". | following- sibling::row[position() &lt; $grp-size]">
                                                </xsl:apply-templates>
                                        </title>
                                        <shortdesc></shortdesc>
                                        <refbody>
                                                <table id="{$ttl-id}">
                                                <tgroup cols="4">
                                                        <colspec column="1" colname="col1" 
colwidth="1*"/>
                                                        <colspec column="2" colname="col2" 
colwidth="2.25*"/>
                                                        <colspec column="3" colname="col3" 
colwidth="1*"/>
                                                        <colspec column="4" colname="col5" 
colwidth="2.25*"/>
                                                <thead>
                                                        <row>
                                                                <entry colname="col1" 
align="center">Error Code</entry>
                                                                <entry colname="col1" 
align="center">Type</entry>
                                                                <entry colname="col1" 
align="center">Message</entry>
                                                                <entry colname="col1" 
align="center">Possible Cause</entry>
                                                        </row>
                                                </thead>
                                        <tbody>
<xsl:apply-templates mode="stateitem" select=". | following-sibling::row[position() &lt; $grp-size]">
                                                </xsl:apply-templates>
                                        </tbody>
                                        </tgroup>
                                </table>
                                </refbody>
                        </reference>
                </xsl:result-document>
        </xsl:template>
        
        
        <xsl:template match="//row" mode="stateitem">
                <xsl:variable name="msg-type" 
select="entry[(_at_)colname='col1']"/>
                <xsl:variable name="errnum" 
select="entry[(_at_)colname='col2']"/>
                <xsl:variable name="errmsg" 
select="entry[(_at_)colname='col3']"/>
                <xsl:variable name="poss-cause" 
select="entry[(_at_)colname='col4']"/>
                
                <row>

                        <entry colname="col1" align="left" valign="top">
                                <xsl:value-of select="$msg-type"/>
                        </entry>
                        <entry colname="col2" align="left" valign="top">
                                <xsl:value-of select="$errnum"/>
                        </entry>
                                <entry colname="col3" align="left" valign="top">
                                <xsl:value-of select="$errmsg"/>
                                </entry>
                        <entry colname="col4" align="left" valign="top">
                                <xsl:value-of select="$poss-cause"/>
                        </entry>
                </row>
        </xsl:template>
        
        
        <xsl:template match="//row" mode="varstate">
                <xsl:choose>
                        <xsl:when test="position()=last()">
                                <xsl:value-of 
select="entry[(_at_)colname='col2']"/>
                        </xsl:when>
                </xsl:choose>
        </xsl:template>
        
        
</xsl:stylesheet>


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--