XSL is a language for expressing stylesheets and other types of transformations.
It consists of two parts:
- XSLT is a
language for transforming XML documents into HTML,
XML, Text, or other type of document. It is composed of
the XML XSLT vocabulary, and XPath,
a language for addressing
parts of an XML document, designed to be used by both XSLT and XPointer.
- An XML vocabulary for specifying formatting semantics (called
Formatting Objects).
LotusXSL implements at this time only the first part of
XSL, the W3C Working Draft 13 August 1999 XSL Transformations (XSLT).
An XSLT stylesheet specifies the transformation of a class of XML
documents by describing how an instance of the class is transformed into
another XML tree of nodes.
LotusXSL uses
Version 2.0.15 (preferred) or 1.1.16 of IBM's XML for Java (called "XML4J") to parse an input XML
document, or it can be adapted to other DOM-producing mechanisms. LotusXSL
produces SAX events, an output DOM, or XML result document based on the
transformations specified in the XSL stylesheet.
The processor can be used from the command line, from a servlet, or
from a wrapper applet.
Version 0.18.0 is a radical rearchitecture of LotusXSL. In addition to
support for the new draft, the old QueryEngine has been re-written and broken
into an XPath package, the liaisons and formatters have been moved to a
com.lotus.xml package, the Stylesheet classes have been separated from the main
processor and are reusable and serializable, and the XSL instruction handlers
have been moved into separate classes. In addition, we are working on an XML
Query API, and a driver interface for data providers. In general, this release
should perform much faster.
LotusXSL is now thread-safe with an instance per thread. You can not run
the same instance in multiple threads.
Note that stylesheets can now be compiled (into an internal format) and serialized
to disk. The resulting disk files are *big* (I mean really big),
but this feature might be useful to someone.
See XQuery Overview for information
about the XML query architecture.
In the SQL directory is an implementation of a XLocator object that
interfaces with JDBC databases to return a canonical row-set XML. This will
allow transformation of SQL data to any XML or HTML. The rows try to be lazily
evaluated, though I have some more work to do for making this work well.
Code provides base servlet support to apply XSL stylesheets
(retrieved from various sources) to XML (also retrieved from various sources).
See the DefaultApplyXSL class. (Many thanks to the
WebSphere folks for this.)
Stylesheets that worked with the previous version of LotusXSL will
have to be upgraded to match the new draft. Watch for stylesheets that declared
<xsl:stylesheet> with the xmlns:xsl="http://www.w3.org/TR/WD-xsl"
namespace declaration. The namespace should now be
xmlns:xsl="http://www.w3.org/XSL/Transform/1.0".
LotusXSL contains a DTD for XSL when used for HTML. (Thanks be to
Henrique M. Holschuh for this). This DTD should not be used for run-time
production when performance is a concern, but is useful during the development
stages. It is used in the readme XSL.
A local copy of the
IBM LotusXSL Comercial License Agreement is included.
Special thanks goes to Sanjiva Weerawarana of IBM Research,
who has implemented the extension
mechanism of LotusXSL, and has helped me in countless other ways with this software.
Thanks goes to Thomas Rowe, Don Day, David
Marston, David A Epstein, Noah Mendelsohn, Dean Burson, Joseph Kesselman, Pat
O'Connor, Mike Pogue, Chip Faulkner, Paul Dick, Adam Peller, David Bertoni, the
XSL WG, and others, for the support, help, and feedback they have given! Also,
many thanks for all the folks who have downloaded LotusXSL so far, and given me
feedback, whether good or bad, and bug reports! Special thanks to Dan,
Henrique, Adam, and Craig!
Need to run the following command to extract the files
tar xvf lotusxsl_0_18_1.tar
These commands create a lotusxsl_0_18_1 sub-directory in the current directory containing all the files.
Make sure to have XML4J on the system class path
To test, you can type run -in test.xml -xsl test.xsl. You should see a
bunch of HTML output.
In the LotusXSL root directory there is a 'run' batch file, which you
pass command line parameters. These instructions use version 2.0.15 of XML4J
with the DOM classes. To use XML4J 1.1.16 you'll need to change the batch files
to call com.lotus.xsl.Process or, to use the 2.0.15 version with the TX
classes, call com.lotus.xsl.xml4j2tx.XML4JLiaison.
The command line utility is com.lotus.xsl.Process. It can
take the following command line switches:
-IN inputXMLURL
-XSL XSLTransformationURL
-OUT outputFileName
-LXCIN compiledStylesheetFileNameIn
-LXCOUT compiledStylesheetFileNameOutOut (it will be big!)
-PARSER fully qualified class name of parser liaison
-E (Do not expand entity refs)
-V (Version info)
-QC (Quiet Pattern Conflicts Warnings)
-Q (Quiet Mode)
-LF (Use linefeeds only on output {default is CR/LF})
-CR (Use carriage returns only on output {default is CR/LF})
-ESCAPE (Which characters to escape {default is <>&"'\r\n}
-INDENT (Control how many spaces to indent {default is 0})
-TT (Trace the templates as they are being called)
-TG (Trace each result tree generation event.)
-TS (Trace each selection event.)
-TTC (Trace the template children as they are being processed)
-VALIDATE (Set whether validation occurs. Validation is off by default)
-EDUMP (Do stackdump on error)
-XML (Use XML formatter and add XML header)
-TEXT (Use simple Text formatter)
-HTML (Use HTML formatter)
-PARAM name expression (Set a stylesheet parameter)
This section will give you an idea of what I haven't implemented
yet.
- For number formatting, I don't yet handle the letter-value,
digit-group-sep, and n-digits-per-group, and sequence-src attributes. Also, I
suspect my internationalization support for number is not all that hot.
- xsl:locale is not yet implemented.
Bugs I haven't been able to fix yet for one reason or the other.
There are lots of potential features that will be going into the
draft. Rather than trying to enumerate these, I'll enumerate what I plan to do
that is not driven by the draft.
- Performance is an ongoing task....
- Work on incremental rendering via transformations as the
source tree is arriving.
- XSL Tutorial!
- I want to put in an editor's interface, for use by XML/XSL
editors. This would (1) allow a stream interface on the result-tree DOM, and
(2) allow structural changes in the source tree to be incrementally updated in
the result tree, with proper events thrown, etc.
- Directly related to the above item, a Rule Locator (for want
of better term). This needs to be able to locate closest matching rules for
actions when a given source node changes, for editing situations. This is easy
when only patterns are used, but harder when selects and modes are used. May
require some special interfacing to the output DOM.
- Better internationalization.
- Better documentation.
September 2, 1999 (Version 0.18.1)
- Added getStylesheet() accessor for the stylesheet root to the XSLProcessor class.
- Added processStylesheet(Reader xslReader, String styleBaseURI) to XSLProcessor class.
- Added processStylesheet(Document styleTree, String styleBaseURI) to XSLProcessor class.
- Added WINDOWS-1250 encoding to FormatterToXML.
- Test for ISO prefix handling for ISO8859_X encodings.
- If the doctype-public attribute of xsl:output starts with "-//W3C//DTD XHTML",
put a space before the closing '/>'.
- Go to default encoding if encoding is not supported.
- Pass "Accept-Language" from HTTP request header to processor,
when liaison does connect, do a setRequestProperty on the connection.
August 28, 1999 (Version 0.18.0d14)
- Now allow XSLT elements to have attributes from non-XSLT namespaces.
- Fixed bug with passing modes through the default rule.
- Ripped old dispatchers out.
- Made template names and modes QNames.
- Fixed encoding so that it properly puts out system encoding instead of UTF-8.
- Removed escape for \' in attributes, since attributes are always put out with \".
- Removed escape for > in attributes.
- Fixed exception when processing-instruction had no arguments.
- Upped the maximum token queue size to 500.
- Fixed cdata handling of ']]<'.
- Fixed '//' whe using psuedo document fragments.
August 26, 1999 (Version 0.18.0d13)
- lotusxsl.jar is now uncompressed for better load performance.
- Merged in updates to ApplyXSL.java and DefaultApplyXSL.java.
- Fixed bug where as error was flagged when parameters were passed via
setStylesheetParam that weren't declared in the stylesheet.
- Added XObject creation methods to the XSLProcessor so that simple clients
who want to push params won't have to know about liaisons.
- Added simple example program to show how to push stylesheet parameters.
- Integrated Sanjiva code that lets you use simple extensions without
declaring a lxslt:component element.
- Bug in translate function fixed.
- Implemented the unparsed-entity-url function, but this will have to
wait 'till after V0.18.0 for a fully robust implementation. URLs are not
resolved to absolute URLs, as is specified in the draft, and, if the SYSTEM
identifier is not present, it is resolved to the PUBLIC identifier.
- Flag early error when the ".[predicate]" syntax is attempted.
- Finished work on cdata-section-elements for xsl:output.
- BSF stuff updated to do avoid security exceptions in browser.
- Client browser demos now work.
- Added dummy transform in start method in applet to get the classes loaded and JITed.
- Query stuff sort of fixed... still need to fix '//' from doc fragment.
- Added make files, thanks to Sanjiva!.
- Fixed simple template stylesheets.
August 24, 1999 (Version 0.18.0d11)
-
bsf.jar and xpath.jar have been merged into lotusxsl.jar.
If you have bsf.jar and/or xpath.jar on your classpath they
should be removed.
- Default namespaces for attributes fixed.
- Bug with testing for SCRIPT and STYLE tags for CDATA stripping fixed.
- Output encoding finished up (to the extent I'll take it for 0.18.0).
- cdata-section-elements for xsl:output implemented. I still hava a bit more work to do on this.
- Extensions finished, but not heavily tested yet.
- Multiple output documents implemented. See Redirect class.
- Fixed errors on all functions that take optional args when arg is not present.
- Fixed serialization (but the serialization files are WAY too big!).
- Hopefully fixed diagnostics for xpath exceptions.
- Merged new servlet code.
- Added a bunch of servlet publishing of request/response & query params to param variables.
Probably too much. Will have to be reviewed.
August 19, 1999 (Version 0.18.0d10)
- The W3C Working Draft 13 August 1999 XSL Transformations (XSLT) should be used as the syntax reference.
- The substring function is now complient with the spec.
- Extensions are mostly implemented... we have some cleaning up to do.
- The -indent switch now works again. You can specify it with or without an argument.
- DTDs are now handled properly... it -validate is used, a derived DOM
parser validates documents based on the presence
(or absence) of a DOCTYPE line in the file.
- Problem with infinate loops with XLocators fixed.
- Fixed local-part() and local-name() throwing ArrayIndexOutOfBoundsException if no arg.
- The namespace and local-part functions have been renamed to namespace-uri and local-name
as per the draft.
- Attribute sets should work again.
- Better error reporting when XML4J returns SAX errors without a message.
August 16, 1999 (Version 0.18.0d9)
- The W3C Working Draft 13 August 1999 XSL Transformations (XSLT) should be used as the syntax reference.
- xsl:output mostly implemented, except for the cdata-section-elements attribute. result-ns
and indent-result no longer work and will generate an error.
- Character encoding implemented. Need to do more work on what get's escaped in the formatters.
- Made XPath functions table driven. Added installFunction(String name, Function func)
API, so callers can install their own built-in functions. This is mainly for
use by the XSLT engine.
- Added handling of disable-output-escaping attribute for xsl:text and xsl:value-of.
- Removed default space attribute on xsl:stylesheet.
- Fixed lots of problems with whitespace stripping.
- xsl:strip-space and xsl:preserve-space should now work properly
and allow use of WildcardName patterns (in fact, you can use full
match patterns as long as they don't contain whitespace, but this
should be considered a bug).
- Implemented current() function.
- Potentially nasty bug with apply templates selecting twice fixed.
- Implemented debugger interface SelectionEvent for select events.
- Whitespace tweaked so that it better matches XT.
- URL and filename handling is MUCH improved.
- I believe I fixed XML relative DTD URLs.
- Fixed problems with base URLs for included stylesheets.
- Fixed problem with top-level params not being reset.
- Sanjiva's BSF stuff partly integrated.
- Auto reset removed. You now need to call this again when using
the processor multiple times. I need to add good error handling
for when you don't.
August 08, 1999 (Version 0.18.0d8)
- Attribute sets now fully implemented to July (August) specification.
- Stylesheet parameters fixed. Also only allow parameters if declared.
- Added SAX DocumentHandler process() APIs.
- Fixed a bunch of bugs that occured when using various process() api calls.
- Fixed some bugs to be threadsafe.
- Optimized Attribute Value Templates.
- Somewhat reduced memory usage.
- Fixed Literal Result Element as Stylesheet so that it now works (section 2.3).
- Now allow you to not have to specify a XML file when running on the command line.
- Experemental implementation of XML4J 1.1.16-specific XLocator class.
August 02, 1999 (Version 0.18.0d7)
- Namespaced names for templates, modes, attr sets, keys,
locales, variables, parameters)
- per-mill on xsl:locale renamed to per-mille
- Make XSLProcessor class reuseable.
- Added debugging interface.
- Fixed key() traversal of attributes.
- Fixed document-relative use of key().
- Made StylesheetRoot and Stylesheet classes serializable.
- Made it an error to create illegal name with xsl:element or
xsl:attribute
- Implemented line number support for stylesheet.
- Made number applied to string that's not a number return a
NaN.
- Moved handleXXX functions to classes, implemented compiling stylesheet into
proprietary tree structure.
July 18, 1999 (Version 0.18.0d6)
- Fixed "//a" in match patterns.
- Fixed apply-imports.
- Fixed problems with import/include cacheing.
- Made recursive include/import an error.
- Fixed RTF copy to result tree.
- Made setParam take object instead of expression string.
- Error to make PI with illegal target name
- pi() renamed to processing-instruction()
- quo operator removed
- qname renamed to name()
- second argument for document() function
- xsl:param-variable has been renamed to xsl:param
- xsl:param renamed to xsl:set-param
July 14, 1999 (Version 0.18.0d5)
- Fixed problem with namespaces with NodeTest.
July 14, 1999 (Version 0.18.0d4)
- Implementation of com.lotus.locators.RowSetLocator extension
object.
July 13, 1999 (Version 0.18.0d3)
- element extension mechanism
- function-available renamed to
extension-function-available
- Rename xsl:functions to lxsl:functions
July 12, 1999 (Version 0.18.0d2)
- Rearchitecture for XPath. XPath is now in a separate package
and jar, the old QueryEngine class is gone, and the XML Liaison stuff and the
Formatter stuff is broken into the com.lotus.xml package.
- Moved Stylesheet class from XSLProcessor to it's own file, and
added a StylesheetRoot class.
- Consolidated functionality behind process functions into a
single function (thank god).
- Made xsl-stylesheet PI robust (I hope).
- HTML Formatter now puts out HTML-style name-only attributes for
'disabled', etc.
- Fixed whitespace stripping so that it only counts #x20, #x9,
#xD or #xA.
- New draft support: != operator.
- New draft support: Added built-in template rule for attribute
nodes
- New draft support: Embedded Stylesheets
- New draft support: Default rules for modes (modes are sticky
again).
- New draft support: Arg to boolean no longer optional
- New draft support: digit-group-sep has been renamed to
grouping-seperator
- New draft support: expr attribute on xsl:number, xsl:variable,
xsl:param, and xsl:set-param renamed to select.
- New draft support: Following axis excludes descendants, and
preceding excludes ancestors.
- New draft support: idref functionality moved to id()
- New draft support: merge doc and docref functions to
document
- New draft support: merge key and keyref functions
- New draft support: n-digits-per-group has been renamed to
grouping size
- New draft support: sequence-src attr on xsl:number has been
removed (well, it was never supported).
- New draft support: xml:lang on xsl:number renamed to
lang
June 24, 1999 (Version 0.17.3)
- New code provides base servlet support to apply XSL stylesheets
(retrieved from various sources) to XML (also retrieved from various sources).
- Fixed: rather nasty bug having to do with union with match
patterns that are non-simple.
- Fixed: casting of variables in equality expressons had some
problems, leading to fatal errors for valid syntax.
- Fixed: when duplicate attributes were being added, this was not
checked.
- Fixed: when attributes were added after a child of the element
had been added, the attributes were being added to the next occuring
element.
- Fixed: idref() was working incorrectly -- it didn't parse
multiple IDs in the same attribute.
- Fixed: With system paths meant for Unix, the direction of the
slashes could cause hard to diagnose problems. The slashes are now
normalized.
June 15, 1999 (Version 0.17.2)
- Fixed nasty problem with equality expressions, where the cast
wasn't being done correctly, which would yeald incorrect results.
- Fixed problem with using full path expressions (including '.')
after a '//'. (The problem is the differences of handling '//' vs.
from-descendents(), which are similar enough to share code, yet their arguments
turn out to be different).
- Made NOREPORTPARSEERROR, etc., public.
- Added hack for IMG tag for HTML FormatterListener so it doesn't
add extra linefeeds around this tag.
- Fixed being able to turn indenting off via use of
indent-result="no" (this still will not work if result-ns is not set and the
-HTML flag is used, unfortunately).
- Fixed problem with copying result-tree fragments from variables
to the result tree
- Fixed problem with param context being wrong.
- Override getNamespaceOfNode when using XML4JLiaison4dom and
make namespace prefix resolution not work with attributes, since the DOM (and
the XML4J DOM) is broken in regards to getting the parent of an
attribute.
- Fixed problem with attributes being propagated up when used
with result tree fragments.
- Fixed problem with parameters being passed to
extensions.
- Fixed several parsing problems.
- Fixed problem with optimization of simple queries, where it
would select the wrong thing.
- Hopefully fixed problem with using JavaScript in threaded
situations.
- Fixed whitespace stripping problems.
- Fixed substring-after bug.
May 24, 1999 (Version 0.17.1)
- Carriage return/linefeed normalization is now off by
default.
- Added -STRIPCDATA and -ESCAPECDATA command line
switches.
- No longer force case change when in HTML mode.
- Only escape "\n\r" for HTML attributes.
- Fixed several defects with xsl:copy-of.
- Fixed several defects with expression parsing when using
predicates with axes identifiers.
- Several low-hanging-fruit performance enhancements.
- Fixed bug where non-elements that were named the same as
elements would match on element nodetests. The primary manifestation of this
was the doc rule firing twice when a DOCTYPE declaration was present.
- Updated the xsl-html DTD (Thanks Henrique!).
- Added run.ksh (Thanks Bill!).
May 3, 1999 (Version 0.17.0)
- Validation is now off by default. -VALIDATE will turn it
on.
- You can now set the formatter from the command line.
- Added setStylesheetParam() function. For the moment, only one
param is supported.
- Better trace methods.
- -edump switch to tell if a stack dump is done.
- Major rewrite to support the April 22 XSLT draft.
April 7, 1999 (Version 0.16.4)
- Upgraded to new version of the JavaScript engine.
- Use wait/notify in LotusXSLControl to call the trusted
thread.
April 2, 1999 (Version 0.16.4)
- Completed SAX output feature. Adapted process() calls that take
a writer to stream directly to SAX.
- Fixed problem with xml: prefix in the generic DOM
liaison.
March 22, 1999 (Version 0.16.4)
- In ProcessXSL, Automatically launch the XML4J 2.0.X TX
compatibility liaison if the version check fails. I can't do the inverse
because the 2.0.X liaison won't load if XML4J 1.1.14 is present.
- Bottle-necked all printing to the XMLParserLiasonDefault, and
thus to FormatterToXML and FormatterToHTML. You now must use -xml4jprint if you
want to use the XML4J PrintVisitor classes.
- Better whitespace handling.
- The caller can now control what characters are escaped in
attributes.
- Did some work to result-tree namespace handling... it now works
much better with xsl:copy.
March 11, 1999
- Fixed first-of-type and last-of-type: they were using
getElementsByTagName, which get's elements by descendents rather than by
children, thus failing if the list had children of the children being tested of
the given type.
March 11, 1999 (Version 0.16.4d1)
- Added undocumented -SSATV switch that lets you have AVTs
interpreted in selects.
March 11, 1999 (Version 0.16.3)
- Fixed problem with XMLParserLiaisonDefault in
getNamespaceOfNode where it wasn't finding the parents of attributes.
- Fixed problem in FormatterToHTML where it wasn't closing
non-empty tags that didn't have children.
- Fixed regression in query engine for the "/|etc" bug.
- Fixed defect reported by Gunnar Teege: the select pattern
"tml:re/id('st')" produces a StringIndexOutOfBoundsException in the QueryEngine
tokenizer. Fix made in QueryEngine's tokenize method.
- Added Bourne scripts.
March 10, 1999
- Updated XML4J DOM liaison to XML4J 2.0.3.
- Fixed XML4J versioning checks.
- Catch exception when add of text nodes to Document node fails,
and give warning.
March 8, 1999
- Fixed nasty defect where patterns like "/|etc" would not
work... anything where the root ('/') was followed by the '|' symbol.
- When used with the HTML formatters, or the FormatterToXML class
(used for non-tx serialization to XML), the single quote and 0x0A and 0x0D are
escaped in attributes.
- Fixed ugly defect where anything besides the document element
root could not be selected.
- Fixed bug where the close tag would sometimes not be added in
the FormatterToHTML.
- Moved indent handling up to the level of FormatterToXML.
March 3, 1999
- In the TrustedAgent inside the LotusXSLControl, fall to sleep
while waiting so you don't take all the CPU time (thanks be to Jinbo Chen for
this).
March 2, 1999
- Fixed problem with comma tokens in query engine.
- Made extension calls not found into warnings in query engine.
This fix and the one above fixes problems with the call() function.
- Used element instead of DocumentFragment when doing early
evaluation of xsl:macro contents, and also temporarily parent the element to
the current result tree node. This fixes a defect where a
java.lang.RuntimeException: Child does not have parent! error could occur with
directives inside xsl:invoke.
- Moved the LotusXSLControl class into the com.lotus.xsl.client
package.
- Fixed most JavaDoc errors.
- Use Jikes to compile release version.
February 28, 1999
- Fixed problem with use of base URI.
- Added constructors with XML error listeners on
XMLParserLiaisons.
February 26, 1999
- Added -Q flag for quiet operation.
- Fixed the defect where extra space was being added in
xsl:attribute.
- Fixed three-deep-macro bug... the late evaluation of
xsl:contents was causing the incorrect contents to be evaluated. The fix, to do
early evaluation and then clone the fragment into the result tree is less
effecient. I don't think this is worth any more work since xsl:contents is
going away in the next draft.
- The above also contains a fix for a related bug having to do
with the incorrect xsl:contents evaluation context.
- Require value-of and for-each to have a select
attribute.
- For the doc name param to ParseXML in the XMLParserLiaison,
allow null, also added another signature that doesn't have the doc name
param.
- Flag error when xsl:import occurs after some other stylesheet
element.
- Fixed use of relative URIs (I hope).
- Fixed base directory to be the directory of the stylesheet
instead of the processor.
- Began work on Formatter interface, which will eventually become
a SAX streaming output interface. Moved print function to be implemented by
this interface instead of by the XMLParserLiaison. Made constructors for
XSLProcessor that take both a liaison and a formatter.
- Implemented xml4j2dom.XML4JLiaison4dom and
xml4j2tx.XML4JLiaison for compatibility with XML4J 2.0.
- Fixed bugs in XMLParserLiaisonDefault. Added formatter
implementations for this also.
February 08, 1999 (Version 0.16.2)
- Check attributes for non-existence by using getAttributeNode
and testing for NULL, necessary because XML4J 1.1.4 (correctly) changed the
return to an empty string when an attribute doesn't exist.
- Rewrote pattern tokenizer by hand instead of using the Java
version, trying to get better performance...
- Added ID handling stuff, including going to a new
XMLParserLiaison interface to get the ID, if xsl:id isn't used. This fixes a
nasty bug when stylesheet writer expects the ID to be recognized from the
stylesheet. Notice that XML4J doesn't recognize attributes specified as IDs
unless in validation mode. When using one of the process methods that use a URL
for the XML, thus making the liaison do the parsing, scan for xsl:id's while
the parse is occurring.
- Added -NV flag to turn off validation..., which is on by
default.
- Pre expand namespace prefixes for XSL tag lookups, then do
lookups based on value from getExpandedName... a small increase in
performance.
- If the caller says it's OK, use the UserData field in the TX
Child class to cache the expanded names of prefixes... a good performance
improvement. This is off by default.
- Made default for XML4J version 1.1.14. 1.1.9 should give off a
warning.
- Did various other optimizations, esp. in query engine and
XMLParserLiaison.
- Fixed defect in cascading for attribute sets.
- Removed carriage return/linefeed normalization as default. Use
-CR and -LF to normalize.
- Fixed defect on secondary key sorts with xsl:sort.
- Added xsl-html.dtd. Thanks be to Henrique M. Holschuh for
this.
- Added readme.dtd. Thanks be to Don Day for this.
February 01, 1999
- Use mergesort instead of quicksort for sorting. Because of
glitch I still have to sort by doc order when elements are equal. When strings
are used in a number sort, I imitate XT, though I'm not absolutely sure this is
the right handling (a phone number is interpreted as a number...). Sorting
should have no bugs left in it, though performance is not what I would like
yet.
- Worked on xsl:number performance... achieved some improvement.
Tried to implement count cache, but realized it's nearly impossible, and not
the right thing to do.
- Pass file name to ProcessXSL#parseXMLStream for better error
messages.
- Added QC switch to suppress pattern conflict warnings.
- Do version check for >= 1.1.9 of XML4J. I might have to
revisit this a bit for next version of XML4J.
- Put switches in and API functions to control if Carriage
returns or linefeeds are used in the output. Default is CR/LF.
- Tried to clarify the docs for process API that input trees are
imutable and result tree is the same one that is handed in, if one is handed
in.
- Implemented generic XMLProcessorLiaison, and made
com.lotus.xsl.xml4j.ProcessXSL derive from it. Though functions are written to
handle namespaces with a generic DOM, I have not tested them yet.
- Added more error handling in several places.
- Improved error reporting for patterns.
- Fixed baz[foo=""].
- Fixed handling of multiple input IDs when they come as the
result of a select pattern.
- Fixed handling of AndExpr and OrExpr, which I incorrectly
interpreted from the BNF. Thanks be to Craig for this.
- Fixed silly 'XML' that should be 'XSL' when warning or
flagging an error.
- Implemented XML4J-style version numbering.
January 25, 1999
- xsl:apply-imports has been implemented.
- Namespace quoting for the result tree, and general result tree
namespace handling has been implemented.
- Fixed bug with file opening for nested imports.
- Fixed bug where '/' root anchors didn't work for match
patterns.
- Whitespace normalized to LF/CR for character-level fidelity
with XT.
- Whitespace bug fixed where whitespace outside of root was
being added.
January 21, 1999
- xmlns="http://www.w3.org/TR/REC-html40" result-ns="" now works
for the LotusXSLControl applet class.
- Fixed: Kill extra linefeeds. For the most part, I now have
character-by-character whitespace equality with XT output. There's one small
glitch when comments are found in the templates - an extra space is added.
- Fixed: Bug with 'from' attribute in xsl:number
- Fixed: Bug with count attribute default.
- Fixed: Incorrect match in test17. Something to do with //.
- Fixed: Attribute value templates should be constrained to the
following types of attributes:
- All literal result element attributes.
- name attribute in xsl:element.
- name attribute in xsl:attribute.
- name attribute in xsl:pi.
- order, lang, data-type, case-order in xsl:sort.
- Number-to-string conversion attributes in xsl:number,
xsl:counter, and xsl:counters.
- value attribute in xsl:constant.
- value attribute of xsl:arg.
- default attribute of xsl:macro-arg (I think).
- Fixed: <xsl:if test=""> generates a null pointer
exception.
- Fixed: Better Error message for when XML4J not found.
- Fixed: Comments inside macros should not be written to result
tree.
- Fixed: Fixed realestate demo. It now uses a newly added
setStyleSheetAttribute() method.
- Fixed: Kill extra linefeeds.
- Fixed: Bugs in ancestor() and ancestor-or-self().
- Fixed: Null pointers for empty select or match expressions.
- Fixed: ID not found trying to process parent of document
element.
- Fixed: Indent result attribute not processed correctly.
- A bit better error detection for bad patterns. Still have some
major work to do on this front.
- Fixed: Compile error with Java 1.2.
- Fixed: Getting the attribute of an ancestor doesn't work in
the new version..
- Fixed: When you don't specify an output file on the command
line, a null pointer exception is thrown rather than printing the output to
System.out as it used to do.
- Added -v switch to give version info.
- Started errors portion of testsuite (but only have three cases
so far).
January 15, 1999
- Major API cleanup
- Handling of namespaces in patterns
- Importance fixed for Macro, Constant, etc.
- Made nodes non-sticky, as they're supposed to be.
- Empty attributes are now properly copied into the result tree.
- Stylesheet comments are no longer being automatically copied
into the result tree.
- Some XT compatibility tested (more to go).
- Use HTML Print Vistor when result-ns="HTML"
- Parent of document element is incorrect is fixed
- Worked on whitespace
- Added SelectExpr for uri()
- bug - test1, a & a[emph] should have conflict fixed
- Bug with not showing conflict with "*" and "foo" fixed
- Don't use default namespace for element type names in patterns
- Fix Attr return null for getParentNode
- Implemented ancestor-or-self
- Implement Error Handlers (test7)
- Implement style PI in ProcessXML
- Removed attribute copy on xsl:copy
- Removed old syntax support
- Reviewed and add source code comments
- Turned Entity Expansion on in XML parser
- Implemented XSL/XML Exception throwing
- And a bunch of other bugs fixed along the way.
December 20, 1998
- Fixed result tree counting so it doesn't take the name
attribute as a result tree element name.
- Implemented counter-scope.
- Fixed a problem with conflict resolution with "*" and element
patterns.
December 17, 1998
- Implemented handling of the stylesheet PI in the XML doc from
ProcessXSL.
- Fixed xsl:copy so that it does not automatically copy
attributes that are not xmlns.
December 15, 1998
- Added proper ID syntax and semantics for new draft -- IDs must
be quoted, or they will be interpeted as patterns.
- Added lotusxsl:css-style-conversion support as stylesheet
element, and removed -T support.
- Fixed bug with select qualifiers on text(), attributes, pi's,
doc nodes, and comments.
- Implemented result tree counting. Not sure I have it right.
- Implemented sorting (xsl:sort).
December 11, 1998
- Added Process() APIs on com.lotus.xsl.xml4.ProcessXSL.
- Did some stuff with whitespace. Defaulted indent to zero, made
it so whitespace is only stripped from attributes and value-of based on the
normal XSL whitespace dance, did callback to XMLParserLiaison for
isIgnorableWhitespace, so it can strip these nodes.
- Added public getQueryEngine() call to XSLProcessor.
November 28, 1998 to 18-May-1998
- Details deleted.
18-May-1998 to 30-June-1998
- Old submission version. Details deleted.