This is an archived snapshot of W3C's public bugzilla bug tracker, decommissioned in April 2019. Please see the home page for more details.
After a long discussion today with Charles Foster we concluded that the base type for all EQNames, aptly named xsl:EQName, allows for illegal names. The current definition is: <xs:union memberTypes="xs:NCName xs:QName"> <xs:simpleType> <xs:restriction base="xs:token"> <xs:pattern value="Q\{.*\}\i\c*"/> </xs:restriction> </xs:simpleType> </xs:union> this allows for "Q{x}a:b:c", which is illegal. Or even "Q{x}:::y:::". A possible solution is to disallow the ":", but using a subtraction class: <xs:union memberTypes="xs:NCName xs:QName"> <xs:simpleType> <xs:restriction base="xs:token"> <xs:pattern value="Q\{.*\}[\i-[:]][\c-[:]]*"/> </xs:restriction> </xs:simpleType> </xs:union> I've tested this definition and it seems correct.
As an aside, an EQName of the form "Q{x{}" is illegal too (according to XPath), but valid according to this type. This can be enforced by changing this further to: <xs:pattern value="Q\{[^{}]*\}[\i-[:]][\c-[:]]*"/>
Thank you, this correction has been applied.