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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Pure Union Type, Dimitre Novatchev dn | Thread | Re: [xsl] Pure Union Type, Michael Kay mike@xxx |
[xsl] Pure Union Type, Dimitre Novatchev dn | Date | Re: [xsl] Pure Union Type, Michael Kay mike@xxx |
Month |