[xsl] How to compare two QName values in an XML Schema?

Subject: [xsl] How to compare two QName values in an XML Schema?
From: "Costello, Roger L." <costello@xxxxxxxxx>
Date: Fri, 8 Apr 2011 12:00:21 -0400
Hi Folks,

Below is an XML Schema, containing two simpleTypes. The second one references
the first.

I want an XPath expression that compares the second simpleType's reference to
the name of the first simpleType:


    /xs:schema/xs:simpleType[1]/@name
      eq
    /xs:schema/xs:simpleType[2]/xs:restriction/@base


That returns False. I want it to return True.

I figured the reason it's returning False is because it is comparing the
string "elev:BostonAreaSurfaceElevation" against the string
"EarthSurfaceElevation". Yes?

I want it to do a comparison of QNames, not strings. So I type-cast the
values:


    xs:QName(/xs:schema/xs:simpleType[1]/@name)
       eq
    xs:QName(/xs:schema/xs:simpleType[2]/xs:restriction/@base)


But that gave me this error:

   Casting from xs:unTypedAtomic to xs:QName can never succeed.

Why?

What's the correct way to do the comparison?

---------------------------------------------------------
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
            targetNamespace="http://www.elevation.org";
            xmlns:elev="http://www.elevation.org";
            elementFormDefault="qualified">

    <xsd:simpleType name= "EarthSurfaceElevation">
        <xsd:restriction base="xsd:integer">
            <xsd:minInclusive value="-1290"/>
            <xsd:maxInclusive value="29035"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name= "BostonAreaSurfaceElevation">
        <xsd:restriction base="elev:EarthSurfaceElevation">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="120"/>
        </xsd:restriction>
    </xsd:simpleType>

</xsd:schema>
---------------------------------------------------------

/Roger

Current Thread