XSLT 2.0 RELAX NG Grammar
A few more bug fixes for my XSLT 2.0 RELAX NG Grammar. This version validates stylesheets conforming to the 4 Apr 2005 draft of XSLT 2.0.
After
fixing a few bugs, I found
a few more. Last night, when I discovered that
use-when wasn't supported,
I decided that what was really needed was a thorough check against
the most recent specification. That resulted in the following changes:
-
Allow
xsl:versionon literal result elements (LREs) to have any value (not just “2.0”). -
Allow
xsl:xpath-default-namespace,xsl:default-collation,xsl:type,xsl:validation, andxsl:use-whento appear on LREs. -
Allow
version,exclude-result-prefixes,extension-element-prefixes,xpath-default-namespace,default-collation, anduse-whento appear on all XSL elements. -
Allow
xs:schemato appear insidexsl:schema-import. -
Only allow
modeonxsl:templateelements with amatch. -
Allow content or
selectonxsl:processing-instruction, not both. Ditto forxsl:comment. -
Improve co-constraints on attributes on
xsl:numberandxsl:for-each-group. -
Allow
xsl:sortto contain content. -
On
xsl:output, it'sescape-uri-attributes(with an “s”) andnormalize-unicodeis not a simple boolean. -
The
nameattribute is required onxsl:namespace. -
All of the
xsl:outputattributes are allowed onxsl:result-document, where they are AVTs. -
The
xsl:sequenceelement only containsxsl:fallback. -
Added
xsl:document.
I also renamed and reordered some of the patterns and used the AVT pattern in a bunch of attributes where it had been overlooked.
The new xslt20.rnc is available. It still works with the (unmodified) xslt10.rnc and xslt.rnc grammars.
Please report any bugs that you find. Share and enjoy!
Comments
--- xslt20.rnc.orig 2005-05-20 08:14:57.000000000 -0400 +++ xslt20.rnc 2005-05-20 08:15:02.000000000 -0400 @@ -180,11 +180,11 @@ apply-templates.element = element apply-templates { extension.atts, global.atts, attribute select { expression.datatype }?, - attribute mode { "#all" | "#default" | qname.datatype }?, + attribute mode { "#current" | "#default" | qname.datatype }?, (sort.element | with-param.element)* } attribute.element = element attribute {Thanks for this schema. It saves me a lot of typing when used in conjunction with nXML ;-)
--drkm
Norm,
xsl:namespace's name attribute is a possibly empty AVT but typed as attribute name { xsd:NCName }, I think it should be avt.datatype
the mode attribute can take a white space separated list of modes but is typed as attribute mode { "#all" | "#default" | qname.datatype }? I think the last clause should be qnames__s__.datatype
David
template.element = element template { extension.atts, global.atts, (attribute match { pattern.datatype } & attribute mode { mode.datatype}?)?, attribute name { qname.datatype }?, attribute priority { number.datatype }?, attribute as { sequence.datatype }?, (param.element*, sequence.constructor) }of course the trouble with cutting and pasting things is that you tend to cut the wrong thing. (It would be so much better if i could kill and yank instead:-)
unlike exclude.prefixes.datatype modes can be QNames not just NCNames so xsd:NCName above needs to be xsd:QName or equivalently qname.datatype
PS any chance that you could see comments when writing a comment: it would make it a bit easier when replying to comments
David: yes, essay comments are now displayed on the essay that you're commenting on.