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: "Costello, Roger L." <costello@xxxxxxxxx>
Date: Tue, 17 Oct 2006 07:00:23 -0400
> As stated earlier I don't believe he wants to get the type, he wants
> to constrain the value,  and as for me I am not at all interested in
> the type.

Exactly right.  Thanks Bryan.

I sense that ya'll are wondering where I am going with this?

Schematron + xPath 2.0 is extremely powerful.  In fact, one could argue
that it can do everything that XML Schema (or RelaxNG) can do, plus a
lot more.

For example, below is an XML document showing information about an
aircraft and vertical obstructions on its flight path.  One critical
operational constraint is:

"Check that the aircraft's altitude is at least 500 feet above all the
vertical obstructions"

This "co-constraint" cannot be expressed using XML Schemas (or

But with Schematron + xPath 2.0 the co-constraint can be expressed
using this xPath:

every $j in flt:VerticalObstruction satisfies if ($j/flt:Height) then
number(flt:Aircraft/flt:Altitude) gt number($j/flt:Height +
$j/flt:Elevation + 500) else number(flt:Aircraft/flt:Altitude) gt
number($j/flt:Elevation + 500)

As best I can tell, the functionality of Schematron + xPath 2.0 is a
superset of XML Schemas (and RelaxNG).  However, I am still researching
this.  The findings in this discussion will be incorporated into a
paper I am writing.

I appreciate all your input.  /Roger

<?xml version="1.0"?>
<Flight xmlns="";>
    <Aircraft type="Boeing 747">
        <Altitude units="feet" reference="MSL">3300</Altitude>
    <VerticalObstruction type="tower">
        <!-- The top of the tower is 1500 feet -->
        <Elevation units="feet">1000</Elevation>
        <Height units="feet">500</Height>
    <VerticalObstruction type="mountain">
        <Elevation units="feet">2600</Elevation>
    <VerticalObstruction type="building">
        <!-- The top of the building is 700 feet -->
        <Elevation units="feet">500</Elevation>
        <Height units="feet">200</Height>

Current Thread