- From: Michael Kay <mhk@mhk.me.uk>
- Date: Thu, 29 Sep 2005 13:30:44 +0100
- To: "'Colin Paul Adams'" <colin@colina.demon.co.uk>, <public-qt-comments@w3.org>
> > If I understand this correctly, then code such as the following: > > > <xsl:variable name="element_name" select="../@name" > as="xs:TOKEN" /> > > should not be rejected by a Basic XSLT processor, but should be > treated as if it were coded as: > > <xsl:variable name="element_name" select="../@name" > as="xs:string" /> > > Is this a correct understanding? No, this is incorrect. xs:TOKEN is not one of the types in the static context, therefore its name isn't available for use in the stylesheet. The effect is the same as saying as="dvla:vehicle-reg" when you haven't imported a schema for "dvla". Similarly if you ask <xsl:if test="local-name-from-QName(node-name(.)) instance of xs:NCName"> you'll get a static error with a basic processor. The only thing you can test for, and depend on, is <xsl:if test="local-name-from-QName(node-name(.)) instance of xs:string"> because xs:string is the nearest "known" type. This code will work, and give the same answer, with both a basic processor and a schema-aware processor. When I mentioned in the bugzilla entry that the solution is type-safe, one of the properties of this is that any expression that's legal in a basic XSLT processor will give the same answer as the same expression in a schema-aware processor. This works because we've carefully avoided any function such as get-type() that returns the most specific type of a value: you can only do tests to determine whether the value is an instance of a type that's in your static context. I hope this clarifies. Michael Kay
Received on Thursday, 29 September 2005 12:31:15 UTC