Re: [xsl] [XSLT 2.0] Checking that an element's value has the desired datatype?

Subject: Re: [xsl] [XSLT 2.0] Checking that an element's value has the desired datatype?
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Tue, 17 Oct 2006 10:15:31 +0100
On 10/17/06, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> I think people have forgotten the explicit reference Roger
> made to schematron, since schematron is a validation
> technology that can be implemented in XSL-T it follows that
> the expression matches(flt:Aircraft/flt:Altitude, '[0-9]+')
> would give you the same capabilities as XML Schema datatype
> checking in any actually useful scenario.

I think you're missing the point that schema-aware processing does much more
than run-time input validation. For example, it gives you compile time error
messages if you use the wrong kind of argument to a function or operator.
See my article http://www.stylusstudio.com/schema_aware.html for background
and some examples. You really have to try it out to develop a real complex
stylesheet to see the benefits - it's remarkable how much faster you can
find your bugs. Honest.

I'm with Bryan on this one - whether he validates the Altitude as xs:integer with the schema or tries to create an xs:integer out of the value in the transform the result will be the same - except it will be caught in two different places.

I don't understand why defining it in a schema would be any better -
in this case.  Maybe I'm being naive.  If "xs:integer(Altitude)" or
"Altitude castable as xs:integer" returns true, then the receiving
application that expects integers should be happy.  If the values are
meant for display, then checking they are integers wont be sufficient,
but thats a different requirement.

I should point out that Im all for schema aware transforms -
expecially validating the result as its created - its a truly
satisfying experience for anyone who did a lot of 1.0.  However, in
this case, I dont see how typing the input as xs:integer would be any
better/different to creating an xs:integer out of the value in the
transform.

cheers
andrew

Current Thread