Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Archived » XML Schema Definition (XSD) » enumeration-facet of union types
enumeration-facet of union types [message #54988] Tue, 23 November 2004 12:29 Go to next message
Klaas Dellschaft is currently offline Klaas DellschaftFriend
Messages: 58
Registered: July 2009
Member
Hi,

I have a question about enumeration facets of union types. I have the
following schema:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">

<xs:element name="test" type="st.unionType"/>


<xs:simpleType name="st.unionType">
<xs:restriction>
<xs:simpleType>
<xs:union memberTypes="xs:string xs:integer"/>
</xs:simpleType>
<xs:enumeration value="11"/>
</xs:restriction>
</xs:simpleType>

</xs:schema>


I had a look into the implementation of the type system in XSD. I've seen
that xs:string is represented by the Java String-type and xs:integer is
represented by BigDecimal.

So the value space of the anonymous sub union-type would contain String and
BigDecimal values. If I restrict this type with the enumeration facet I'm
not sure whether the value space of "st.unionType" would contain
String("11") and BigDecimal("11") or only String("11").

In the datatypes part of the W3C it is said that a lexical value is
validated against the memberTypes until a match is found but the evaluation
order can be overridden with the use of xsi:type.

So from my point of view it should be possible to validate the following
file against the schema from above:

<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:noNamespaceSchemaLocation="test.xsd" xsi:type="xs:integer">
11
</test>

And Xerces-C also successfully validates this file. So I think the value
space of "st.unionType" should contain BigDecimal("11") and String("11).

But at the moment if I call the function XSDEnumerationFacet.getValue() on
the enumeration facet of "st.unionType" I only get one Object, the
String("11") and not also BigDecimal("11"). I would interpret this result
that XSD only puts String("11") into the value space of "st.unionType" and
not also BigDecimal("11"). Is this correct (my interpretation and/or the
behaviour of XSD)?

Regards
Klaas Dellschaft
Re: enumeration-facet of union types [message #55015 is a reply to message #54988] Tue, 23 November 2004 13:15 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: merks.ca.ibm.com

Klass,

When the model sees value="11" it must determine the "actual value" of
the literal using the base type of the restriction, and that union will
accept 11 as a value of type string, so that's the one and only value in
the enumeration. There isn't even the slightest hint in the enumeration
description in the spec to indicate that the single literal value must
be converted to more than one valid value if the base type is a union.
And even the comment about the use of xsi:type does not have any direct
bearing on how enumeration is interpreted, because it talks only about a
union. In fact, it seems very reasonable to argue that only the String
11 should be in the enumeration and that BigDecimal 11 should not, and
hence that the instance should not validate. I can see how other
interpretations would be reasonable, but there really needs to be some
explicit wording in the spec to support such alternative interpretations...

(I'm curious if the instance would validate if the xsi:type were int.)


Klaas Dellschaft wrote:

>Hi,
>
>I have a question about enumeration facets of union types. I have the
>following schema:
>
><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> elementFormDefault="qualified">
>
> <xs:element name="test" type="st.unionType"/>
>
>
> <xs:simpleType name="st.unionType">
> <xs:restriction>
> <xs:simpleType>
> <xs:union memberTypes="xs:string xs:integer"/>
> </xs:simpleType>
> <xs:enumeration value="11"/>
> </xs:restriction>
> </xs:simpleType>
>
></xs:schema>
>
>
>I had a look into the implementation of the type system in XSD. I've seen
>that xs:string is represented by the Java String-type and xs:integer is
>represented by BigDecimal.
>
>So the value space of the anonymous sub union-type would contain String and
>BigDecimal values. If I restrict this type with the enumeration facet I'm
>not sure whether the value space of "st.unionType" would contain
>String("11") and BigDecimal("11") or only String("11").
>
>In the datatypes part of the W3C it is said that a lexical value is
>validated against the memberTypes until a match is found but the evaluation
>order can be overridden with the use of xsi:type.
>
>So from my point of view it should be possible to validate the following
>file against the schema from above:
>
><test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> xsi:noNamespaceSchemaLocation="test.xsd" xsi:type="xs:integer">
> 11
></test>
>
>And Xerces-C also successfully validates this file. So I think the value
>space of "st.unionType" should contain BigDecimal("11") and String("11).
>
>But at the moment if I call the function XSDEnumerationFacet.getValue() on
>the enumeration facet of "st.unionType" I only get one Object, the
>String("11") and not also BigDecimal("11"). I would interpret this result
>that XSD only puts String("11") into the value space of "st.unionType" and
>not also BigDecimal("11"). Is this correct (my interpretation and/or the
>behaviour of XSD)?
>
>Regards
>Klaas Dellschaft
>
>
>
>
>
Re: enumeration-facet of union types [message #55141 is a reply to message #55015] Tue, 23 November 2004 16:40 Go to previous messageGo to next message
Klaas Dellschaft is currently offline Klaas DellschaftFriend
Messages: 58
Registered: July 2009
Member
Hi,

for me the interpretation of Xerces as well as your interpretation seems
reasonable. Now I've put the same question on the mailing list of W3C
(xmlschema-dev@w3.org). Probably you want to join the discussion. Otherwise
I will mail the result here in the newsgroup.

Klaas
Re: enumeration-facet of union types [message #57797 is a reply to message #55141] Wed, 16 February 2005 12:13 Go to previous message
Klaas Dellschaft is currently offline Klaas DellschaftFriend
Messages: 58
Registered: July 2009
Member
Hi,

as I said I've put this question on the W3C mailing list. It seems that XSD
as well as Xerces shows the correct behaviour. This is caused by a bug in
the XML Schema definition:


It is a bit confusing that xsi:type should change the evaluation order of
the types participating in a union. Instead xsi:type has the effect that a
value isn't evaluated against the union type but against the type given in
xsi:type. So xsi:type circumvents the facets attached to the union type.

So you are correct if you only put the string "11" into the list of allowed
enumeration values. But also Xerces is right if it successfuly validates

<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:noNamespaceSchemaLocation="test.xsd" xsi:type="xs:integer">
11
</test>

because xs:integer is validly derived from one of the unions member types
(Condition 2.2.4 in [2]). Also if you use xs:int or xs:unsignedByte as the
value of xsi:type Xerces should validate the document above.

Cheers
Klaas


[1] http://lists.w3.org/Archives/Public/xmlschema-dev/2005Jan/00 06.html
[2] http://www.w3.org/TR/xmlschema-1/#cos-st-derived-ok
Re: enumeration-facet of union types [message #592591 is a reply to message #54988] Tue, 23 November 2004 13:15 Go to previous message
Ed Merks is currently offline Ed MerksFriend
Messages: 33218
Registered: July 2009
Senior Member
Klass,

When the model sees value="11" it must determine the "actual value" of
the literal using the base type of the restriction, and that union will
accept 11 as a value of type string, so that's the one and only value in
the enumeration. There isn't even the slightest hint in the enumeration
description in the spec to indicate that the single literal value must
be converted to more than one valid value if the base type is a union.
And even the comment about the use of xsi:type does not have any direct
bearing on how enumeration is interpreted, because it talks only about a
union. In fact, it seems very reasonable to argue that only the String
11 should be in the enumeration and that BigDecimal 11 should not, and
hence that the instance should not validate. I can see how other
interpretations would be reasonable, but there really needs to be some
explicit wording in the spec to support such alternative interpretations...

(I'm curious if the instance would validate if the xsi:type were int.)


Klaas Dellschaft wrote:

>Hi,
>
>I have a question about enumeration facets of union types. I have the
>following schema:
>
><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> elementFormDefault="qualified">
>
> <xs:element name="test" type="st.unionType"/>
>
>
> <xs:simpleType name="st.unionType">
> <xs:restriction>
> <xs:simpleType>
> <xs:union memberTypes="xs:string xs:integer"/>
> </xs:simpleType>
> <xs:enumeration value="11"/>
> </xs:restriction>
> </xs:simpleType>
>
></xs:schema>
>
>
>I had a look into the implementation of the type system in XSD. I've seen
>that xs:string is represented by the Java String-type and xs:integer is
>represented by BigDecimal.
>
>So the value space of the anonymous sub union-type would contain String and
>BigDecimal values. If I restrict this type with the enumeration facet I'm
>not sure whether the value space of "st.unionType" would contain
>String("11") and BigDecimal("11") or only String("11").
>
>In the datatypes part of the W3C it is said that a lexical value is
>validated against the memberTypes until a match is found but the evaluation
>order can be overridden with the use of xsi:type.
>
>So from my point of view it should be possible to validate the following
>file against the schema from above:
>
><test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> xsi:noNamespaceSchemaLocation="test.xsd" xsi:type="xs:integer">
> 11
></test>
>
>And Xerces-C also successfully validates this file. So I think the value
>space of "st.unionType" should contain BigDecimal("11") and String("11).
>
>But at the moment if I call the function XSDEnumerationFacet.getValue() on
>the enumeration facet of "st.unionType" I only get one Object, the
>String("11") and not also BigDecimal("11"). I would interpret this result
>that XSD only puts String("11") into the value space of "st.unionType" and
>not also BigDecimal("11"). Is this correct (my interpretation and/or the
>behaviour of XSD)?
>
>Regards
>Klaas Dellschaft
>
>
>
>
>


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: enumeration-facet of union types [message #592651 is a reply to message #55015] Tue, 23 November 2004 16:40 Go to previous message
Klaas Dellschaft is currently offline Klaas DellschaftFriend
Messages: 58
Registered: July 2009
Member
Hi,

for me the interpretation of Xerces as well as your interpretation seems
reasonable. Now I've put the same question on the mailing list of W3C
(xmlschema-dev@w3.org). Probably you want to join the discussion. Otherwise
I will mail the result here in the newsgroup.

Klaas
Re: enumeration-facet of union types [message #594046 is a reply to message #55141] Wed, 16 February 2005 12:13 Go to previous message
Klaas Dellschaft is currently offline Klaas DellschaftFriend
Messages: 58
Registered: July 2009
Member
Hi,

as I said I've put this question on the W3C mailing list. It seems that XSD
as well as Xerces shows the correct behaviour. This is caused by a bug in
the XML Schema definition:


It is a bit confusing that xsi:type should change the evaluation order of
the types participating in a union. Instead xsi:type has the effect that a
value isn't evaluated against the union type but against the type given in
xsi:type. So xsi:type circumvents the facets attached to the union type.

So you are correct if you only put the string "11" into the list of allowed
enumeration values. But also Xerces is right if it successfuly validates

<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:noNamespaceSchemaLocation="test.xsd" xsi:type="xs:integer">
11
</test>

because xs:integer is validly derived from one of the unions member types
(Condition 2.2.4 in [2]). Also if you use xs:int or xs:unsignedByte as the
value of xsi:type Xerces should validate the document above.

Cheers
Klaas


[1] http://lists.w3.org/Archives/Public/xmlschema-dev/2005Jan/00 06.html
[2] http://www.w3.org/TR/xmlschema-1/#cos-st-derived-ok
Previous Topic:Suitability of XSD for particular task
Next Topic:Changing an element from type= to ref=
Goto Forum:
  


Current Time: Wed Sep 25 19:30:01 GMT 2024

Powered by FUDForum. Page generated in 0.04231 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top