Re: [xsl] Pure Union Type

Subject: Re: [xsl] Pure Union Type
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sun, 4 May 2014 04:31:34 -0000
OK, I tried this:

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
 xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:my="my:my"
 exclude-result-prefixes="xs my">
 <xsl:output method="text"/>
 <xsl:import-schema>
     <xs:schema xsl:validation="strict">
         <xs:simpleType name="numeric">
             <xs:union>
                 <xs:simpleType>
                     <xs:restriction base="xs:decimal"/>
                 </xs:simpleType>
                 <xs:simpleType>
                     <xs:restriction base="xs:integer"/>
                 </xs:simpleType>
                 <xs:simpleType>
                     <xs:restriction base="xs:float"/>
                 </xs:simpleType>
                 <xs:simpleType>
                     <xs:restriction base="xs:double"/>
                 </xs:simpleType>
             </xs:union>
         </xs:simpleType>
     </xs:schema>
 </xsl:import-schema>
 <xsl:template match="/">
     <xsl:sequence select="3 castable as numeric"/>
     =============================================
     <xsl:sequence select="my:add(3.3 cast as numeric, 5.787 cast as numeric)"/>
 </xsl:template>

 <xsl:function name="my:add" as="numeric">
     <xsl:param name="pLeft" as="numeric"/>
     <xsl:param name="pRight" as="numeric"/>

     <xsl:sequence select="($pLeft + $pRight) cast as numeric"/>
 </xsl:function>
</xsl:stylesheet>


And it works as expecting, producing:

true
=============================================
9.087

However, if I omit any of the "cast as" constructors I get error from
SaxonEE 9.5.1.3 (invoked from Oxygen):

"XTTE0790: Required item type of second argument of my:add() is
numeric; supplied value has item type xs:decimal"

Or, if I evaluate: "3 instance of numeric", the result is false().

Is my understanding wrong that I can provide an instance of xs:decimal
anywhere where "numeric" is expected, or is this a bug in the XSLT
processor?

To remind, here is the relevant quote from the XPath 3.0 Recommendation:

"Pure union types have the property that every instance of an atomic type
defined as one of the member types of the union is also a valid instance
of the union type."


Cheers,
Dimitre


On Sat, May 3, 2014 at 7:29 PM, Dimitre Novatchev dnovatchev@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> I am reading the XPath 3.0 Recommendation.
>
> The definition of "pure union type" is:
>
>
>  "[Definition: A pure union type is an XML Schema union type that
> satisfies the following constraints: (1) {variety} is union, (2) the
> {facets} property is empty, (3) no type in the transitive membership
> of the union type has {variety} list, and (4) no type in the
> transitive membership of the union type is a type with {variety} union
> having a non-empty {facets} property].
>
> Note:
>
> The definition of pure union type excludes union types derived by
> non-trivial restriction from other union types, as well as union types
> that include list types in their membership. Pure union types have the
> property that every instance of an atomic type defined as one of the
> member types of the union is also a valid instance of the union type."
>
> My Questions:
> 1. In the phrase: "The definition of pure union type excludes union
> types derived by non-trivial restriction from other union types", what
> is meant to be a "non-trivial restriction"?
>
> 2. Can somebody provide a meaningful example? For example, can we
> define a "my:numeric" pure union type as the union of xs:decimal,
> xs:integer, xs:float, xs:double, ..., etc ? If yes, could somebody
> provide the XML Schema type definition of this pure union type?  I
> believe that this type is absolutely necessary to use for the
> arguments and results of functions (and operators) defined on numbers.
>
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
> -------------------------------------
> Never fight an inanimate object
> -------------------------------------
> To avoid situations in which you might make mistakes may be the
> biggest mistake of all
> ------------------------------------
> Quality means doing it right when no one is looking.
> -------------------------------------
> You've achieved success in your field when you don't know whether what
> you're doing is work or play
> -------------------------------------
> To achieve the impossible dream, try going to sleep.
> -------------------------------------
> Facts do not cease to exist because they are ignored.
> -------------------------------------
> Typing monkeys will write all Shakespeare's works in 200yrs.Will they
> write all patents, too? :)
> -------------------------------------
> I finally figured out the only reason to be alive is to enjoy it.
> 



-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they
write all patents, too? :)
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.

Current Thread