We have just committed a branch for XSLT 2.0 (branch name: xslt20). This
is a rather major work that implements XSLT 2.0 and XPath 2.0 features and
architectural changes, and is a work in progress. We would like, in the
next few months, to bring this branch to a full and complete implementation
of these drafts. We encourage Xalan developers (who are not already
working on it) to become involved!
Eventually we would like this to be folded in on the main branch, since all
XSLT 1.0 stylesheets should process exactly as they did previously, as long
as the version number on the stylesheet is "1.0".
Below are two lists. The first is regarding major architectural changes.
The second lists the line-item feature status.
Architectural changes:
1) A new XPath parser has been integrated. This parser is based on a
JavaCC parser that was generated from the XML definition of the grammar
that is used to produce the EBNF descriptions in the W3C XPath 2.0 draft.
A new directory has been created, xml-xalan/java/grammar, that holds the
XML grammar and the stylesheets used to produce the parser, and a "javacc"
build target (along with several other parser related targets) is used to
generate the java code. The generation of the parser code is not normally
done for every build... it's only done on command when you know the grammar
has changed. Eventually, I [SB] would like to fold this framework into
XSLTC. (Note that right now the XPath 2.0 parser is handling XPath 1.0
expressions. Eventually we should probably generate an XPath 1.0 parser to
use when version="1.0").
2) The processing has been evolved to handle sequences instead of node-
sets. There are a lot of issues here, because XPath no longer really has
atomic objects as such... everything is a sequence. This means that all
XObjects must be able to be seen as sequences. Along with this, the "for"
expression has been introduced, as well as other operations on sequences.
3) The architecture has been evolved for an expanded type system. The DTM
can now deliver type information to the processor, and the processor can
now perform typed operations as well as construct typed objects. Typed
temporary trees are not yet implemented.
4) The RTF system now presents itself as "temporary trees", which are now
first class trees under XSLT 2.0.
Feature status: "unstable" means that the specification is very likely to
change, so it's better not to work in this area. (Myriam [MM] is about to
check in regular expression related features in the next day or two.)
(1) Error handling [Errors formalized, numbered, dichotomized as
static/dynamic]
status: Not Yet Implemented.
(2) startup document [Input is a sequence, not just one tree]
status: done
(3) startup node [starting node can be designated]
status: Not Yet Implemented.
(4) startup template [Can designate a named template to be invoked at
startup]
status: Not Yet Implemented.
(5) startup params [External parameters: data types?]
status: Not Yet Implemented.
(6) Default collation
status: Not Yet Implemented.
(7) xsl:import-schema
status: unstable
(8) xsl:datetime-format [Anticipating that format-dateTime() will need
this]
status: unstable
(9) xsl:function [xsl:function, xsl:result sub-element]
status: done
(10) xsl:principal-result-document
status: unstable
(11) xsl:result-document
status: done
(12) xsl:sort-key
status: Not Yet Implemented.
(13) xsl:namespace
status: unstable
(14) xsl:for-each-group
status: done
(15) xsl:analyze-string [analyze-string and sub-elements matching-substring,
non-matching-substring]
status: Not Yet Implemented. developer owner: MM
(16) format-dateTime() [anticipated new feature]
status: unstable
(17) sort(string,sequence)
status: Not Yet Implemented.
(18) current-group()
status: done
(19) regex-group(integer)
status: Not Yet Implemented. developer owner: MM
(20) unparsed-text(sequence, string?)
status: Not Yet Implemented.
(21) unparsed-entity-public-id(string)
status: Not Yet Implemented.
(22) input()
status: Not Yet Implemented.
(23) xf:node-kind()
status: done
(24) xf:node-name()
status: Not Yet Implemented. developer owner: JK
(25) xf:base-uri()
status: done
(26) xf:unique-ID()
status: Not Yet Implemented. developer owner: JK
(27) xf:compare()
status: Not Yet Implemented. developer owner: JK
(28) xf:normalize-unicode()
status: Not Yet Implemented.
(29) xf:upper-case()
status: Not Yet Implemented.
(30) xf:lower-case()
status: Not Yet Implemented.
(31) xf:string-pad()
status: Not Yet Implemented.
(32) xf:matches()
status: Not Yet Implemented. developer owner: MM
(33) xf:replace()
status: Not Yet Implemented. developer owner: MM
(34) xf:tokenize()
status: partial, developer owner: MM
(35) xf:escape-URI()
status: Not Yet Implemented.
(36) xf:get-[part]-from-yearMonthDuration()
status: done
(37) xf:get-[part]-from-dayTimeDuration()
status: done
(38) xf:get-[part]-from-dateTime()
status: done
(39) xf:get-[part]-from-date()
status: done
(40) xf:get-[part]-from-time()
status: done
(41) xf:add-timezone-to-[type]()
status: Not Yet Implemented. developer owner: MM
(42) xf:remove-timezone-from-[type]()
status: Not Yet Implemented. developer owner: MM
(43) xf:get-[type]Duration-from-dateTimes()
status: done
(44) xf:expanded-QName()
status: Not Yet Implemented.
(45) xf:get-local-name-from-QName()
status: Not Yet Implemented.
(46) xf:get-namespace-from-QName()
status: Not Yet Implemented.
(47) xf:resolve-URI()
status: Not Yet Implemented.
(48) xf:deep-equal()
status: unstable
(49) xf:copy()
status: Not Yet Implemented.
(50) xf:shallow()
status: Not Yet Implemented.
(51) xf:root()
status: Not Yet Implemented.
(52) xf:if-absent()
status: Not Yet Implemented.
(53) xf:if-empty()
status: Not Yet Implemented.
(54) xf:item-at()
status: Not Yet Implemented.
(55) xf:index-of()
status: Not Yet Implemented.
(56) xf:empty()
status: Not Yet Implemented.
(57) xf:exists()
status: Not Yet Implemented.
(58) xf:distinct-nodes()
status: Not Yet Implemented.
(59) xf:distinct-values()
status: Not Yet Implemented.
(60) xf:insert()
status: Not Yet Implemented.
(61) xf:remove()
status: Not Yet Implemented.
(62) xf:subsequence()
status: Not Yet Implemented.
(63) xf:sequence-deep-equal()
status: Not Yet Implemented.
(64) xf:sequence-node-equal()
status: Not Yet Implemented.
(65) xf:avg()
status: Not Yet Implemented.
(66) xf:max()
status: Not Yet Implemented.
(67) xf:min()
status: Not Yet Implemented.
(68) xf:idref()
status: Not Yet Implemented.
(69) xf:filter()
status: unstable
(70) xf:collection()
status: Not Yet Implemented.
(71) xf:input()
status: Not Yet Implemented.
(72) xf:current-dateTime()
status: done
(73) xf:current-date()
status: done
(74) xf:current-time()
status: done
(75) OccurrenceIndicator [OccurrenceIndicator::= ("*" | "+" | "?")? in match and
select]
status: done
(76) node keywords [element, attribute, empty, document, item, atomic value]
status: done
(77) type keywords [type, of type, untyped, in]
status: partial
(78) ExprComment [ExprComment ::= "{--" [^}]* "--}"]
status: done
(79) to operator
status: done
(80) union, intersect, except
status: done
(81) idiv
status: done
(82) unary +
status: done
(83) eq, ne, gt, ge, lt, le
status: done
(84) is, is not
status: done
(85) before, after [ << and >> ]
status: Not Yet Implemented.
(86) for...return
status: done
(87) if...then...else
status: done
(88) some, every
status: Not Yet Implemented.
(89) instance of
status: done
(90) cast as, treat as
status: unstable developer owner: JK
(91) ValidateExpr [ValidateExpr::= "validate" SchemaContext? "{" Expr "}"]
status: unstable
(92) new standard attributes [exclude-prefixes, default-xpath-namespace]
status: Not Yet Implemented.
(93) version std attribute [version on element, allows mixing]
status: unstable
(94) old standard attributes [exclude-result-prefixes, extension element-prefixes now
ubiquitous]
status: Not Yet Implemented.
(95) xsl:apply-imports [xsl:apply-imports takes with-param subelement]
status: Not Yet Implemented.
(96) typed params [xsl:variable and xsl:param take @type]
status: Not Yet Implemented. developer owner: JK
(97) xsl:attribute [xsl:attribute takes @disable-output-escaping]
status: Not Yet Implemented.
(98) @separator [xsl:copy-of and xsl:value-of take @separator]
status: done
(99) sort, key value matching [xsl:sort and xsl:key take @type, @collation]
status: Not Yet Implemented. developer owner: JK
(100) named output def [xsl:output takes @name]
status: partial
(101) xhtml [xsl:output method="xhtml"]
status: Not Yet Implemented.
(102) xsl:text [xsl:text allows instructions]
status: Not Yet Implemented.
(103) system-property [system-property() has new keywords]
status: Not Yet Implemented.
-Scott Boag (plus David Marston, Joe Kesselman(JK), Myriam Midy (MM))