| <?xml version="1.0" standalone="no"?> |
| <!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd"[ |
| <!ENTITY xsltcdone SYSTEM "XSLTCDONE"> |
| <!ENTITY xsltc_history SYSTEM "xsltc_history.xml">]> |
| |
| <s1 title="XSLTC Release Notes"> |
| <p>For this release, please note the following changes, additions, omissions, problems, procedures for running demos, |
| and new support for the TrAX API.</p> |
| <p>For an introduction to XSLTC, see <link idref="xsltc_usage">Using XSLTC</link>.</p> |
| <ul> |
| <li><link anchor="xsltcnew">Changes and New Features</link></li> |
| <li><link anchor="xsltcconf">Conformance</link></li> |
| <li><link anchor="xsltcknownproblems">Known Problems</link></li> |
| <li><link anchor="xsltcsmart">Smart Transformer Switch</link></li> |
| <li><link idref="samples" anchor="translets">Sample Translets</link></li> |
| <li><link idref="xsltc_history">History of XSLTC software changes</link></li> |
| </ul> |
| <anchor name="xsltcnew"/> |
| <s2 title="Global changes since &xslt4j; 2.2.D14"> |
| <note>For a list of &xslt4j; commits, see xalan-cvs@xml.apache.org in the |
| <jump href="http://nagoya.apache.org/eyebrowse/index.html">Apache mailing list archive index</jump>.</note> |
| <p><em>Fix to &xslt4j; 2.3.0.</em> Beginning with release 2.3.0, regexp.jar is required to compile translets and use the XSLTC API (see <link idref="xsltc_usage" anchor="classpath">Setting the system classpath for XSLTC</link>). For release 2.3.0, we posted regexp.jar to the Apache CVS repository, but we failed to update the Ant build process to include regexp.jar in the distribution files. As soon as a user alerted us to this error, we fixed build.xml to include regexp.jar in the distribution files. Accordingly, regexp.jar is in the 2.3.x binary and source distribution files.</p> |
| |
| </s2> |
| <anchor name="xsltcconf"/> |
| <s2 title="XSLT 1.0 Conformance and Extensions"> |
| <p>XSLTC does not yet support the following features of the XSL Transformations |
| (XSLT) Version 1.0:</p> |
| <ul> |
| <li>The case-order option to the sort element is not supported, because XSLTC |
| relies on the underlying Java sorting classes (bugzilla 1396).</li> |
| </ul> |
| <p>XSLTC supports a number of features that are not required by the XSLT 1.0 specification, |
| but which are supported by a number of other XSLT processors:</p> |
| <ul> |
| <li><em>Calling external Java methods from a Translet.</em><br/> |
| At the time of writing, only static methods are supported. A call to a function |
| whose namespace is either <code><http://xml.apache.org/xslt/Java</code> |
| or <code><http://xml.apache.org/xalan/xsltc/Java</code> |
| is resolved by loading the appropriate class and calling a static method that |
| matches the signature of the function. The class can be specified as part |
| of the namespace URI or as part of the function call as shown in the following |
| example:<br/> |
| <source> <xsl:stylesheet version="1.0" |
| xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
| xmlns:Java="http://xml.apache.org/xslt/Java" |
| xmlns:Java-system="http://xml.apache.org/xslt/Java/java.lang.System"> |
| <xsl:template match="/"> |
| <xsl:value-of select="Java:java.lang.System.currentTimeMillis()"/> |
| <xsl:value-of select="Java-system:currentTimeMillis()"/> |
| </xsl:template> |
| </xsl:stylesheet></source><br/></li> |
| <li><em>Result Tree Fragments as Node Sets</em><br/> |
| Result Tree Fragments (RTFs) can be captured as the template content of a |
| variable or parameter and then the variable can be passed to a for-each or |
| an apply-templates as a node set.<br/><br/></li> |
| <li><em>nodeset() Function</em><br/> |
| XSLTC also supports the nodeset() function for transforming an RTF (result |
| tree fragment) into a node set. It can be used as an xsltc-extension function or as a standard |
| XPATH function as shown in the following example:<br/> |
| <source><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
| xmlns:xsltc-extension="http://xml.apache.org/xalan/xsltc" |
| xmlns:some-extension="http://some-extension" |
| version="1.0"> |
| <xsl:template match="/"> |
| <xsl:variable name="rtf"> |
| <docelem> |
| <elem1>elem1</elem1> |
| <elem2>elem2</elem2> |
| </docelem> |
| </xsl:variable> |
| <!-- Use nodeset as XSLTC extension --> |
| <xsl:value-of select="xsltc-extension:nodeset($rtf)/docelem/elem1"/> |
| <!-- Use nodeset as standard function --> |
| <xsl:value-of select="nodeset($rtf)/docelem/elem1"/> |
| </xsl:template> |
| </xsl:stylesheet> |
| </source><br/></li> |
| <li><em>Output Redirection</em><br/> |
| Output can be redirected to one or more files, using code like the following:<br/> |
| <source> <xsl:stylesheet |
| xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
| xmlns:xsltc="http://xml.apache.org/xalan/xsltc" |
| xsl:version="1.0"> |
| <xsl:template match="/"> |
| <xsl:text>This goes to standard output</xsl:text> |
| <xsltc:output file="blob.xml"> |
| <xsl:text>This ends up in the file 'blob.xml'</xsl:text> |
| </xsltc:output> |
| </xsl:template> |
| </xsl:stylesheet></source><br/></li> |
| </ul> |
| </s2> |
| <anchor name="xsltcknownproblems"/> |
| <s2 title="Known Problems"> |
| <ul> |
| <li>The strip space element does not work with copy-of. For example, with <code><xsl:strip-space |
| elements="*"/></code>, if you do an identity transform by matching on |
| the root node (/) and then do a <code>copy-of select="."</code>, the whitespace-only |
| nodes are not stripped out. <code>xsl:strip-space</code> works when you do not do a copy-of.<br/><br/></li> |
| <li>In some cases, XSLTC can generate methods that are too long (<em>> 64K length</em>) |
| to run, or contain jump offsets that are too large for the JVM to handle. |
| You can minimize this by breaking up large templates into smaller templates. |
| XSLTC has a new compile option to disable template inlining, compiling each |
| template in a separate method. From the command line, you would use <code>"-n"</code> |
| to turn off inlining, or with TrAX set the "disable-inlining" attribute to the TransformationFactory. |
| For example, |
| <source>TransformationFactory tfac = new TransformationFactory(); |
| tfac.setAttribute("disable-inlining", new Boolean(true))</source><br/></li> |
| <li>XSLTC tries to determine the order in which global variables are initialized |
| by tracking the dependencies between them. In some cases, the value of a variable |
| may depend on a template, e.g., if <code>xsl:call-template</code> is used to initialized |
| a variable whose type is RTF. If this happens, a NPE may be thrown at runtime |
| when the translet attempts to access a variable that has not been properly |
| initialized. In most cases, this problem can be avoided by reordering the |
| variable declarations.<br/></li> |
| </ul> |
| <p>To check on the open bugs in the current Apache xml-xalan/java repository, |
| follow the instructions below:</p> |
| <ol> |
| <li>Go to <jump href="http://nagoya.apache.org/bugzilla">http://nagoya.apache.org/bugzilla</jump>.</li> |
| <li>Select <em>Query Existing Bug Reports</em>.</li> |
| <li>Choose:<br/> |
| Program: <em>XalanJ2</em><br/> |
| Component: <em>org.apache.xalan.xsltc</em> (and) <em>Xalan-Xsltc</em></li> |
| <li>Submit the query.</li> |
| </ol> |
| </s2> |
| <anchor name="xsltcsmart"/> |
| <s2 title="Smart Transformer Switch"> |
| <p>As part of the TrAX API, a "Smart Transformer Switch" enables automatic switching between Xalan and XSLTC |
| processors within your application. It uses Xalan to create your |
| <code>Transformer</code> objects, and uses XSLTC to create your <code>Templates</code> objects.</p> |
| <p>To use the switch, you set the TrAX system property, |
| <code>javax.xml.transform.TransformerFactory</code>, to <code>org.apache.xalan.xsltc.trax.SmartTransformerFactoryImpl</code>. |
| For one-time transformations or transformations that require extensions supported by Xalan, and not XSLTC, |
| you would use Transformer objects. For a repeated transformation where performance is critical, you would |
| use Templates objects.</p> |
| </s2> |
| </s1> |