logo       

AW: derivation by restriction and <choice> to <sequence>- definition 2: msg#00002

text.xml.xerces-j.devel

Subject: AW: derivation by restriction and <choice> to <sequence>- definition 2

Thank you Lucian,

that is usefull information for me to design my schemas without the <choice>
definition.

CU
Evgeny

-----Ursprüngliche Nachricht-----
Von: Lucian Holland [mailto:lefh@xxxxxxxxxxxxxxxx]
Gesendet: Montag, 2. August 2004 15:58
An: xerces-j-dev@xxxxxxxxxxxxxx
Betreff: Re: derivation by restriction and <choice> to <sequence>-
definition 2


Usorov, Evgeny wrote:

><xs:complexType name="basis_typ">
> <xs:sequence>
> <xs:element name="added_element"/>
> <xs:choice minOccurs="0" maxOccurs="unbounded">
> <xs:element name="foo" minOccurs="0"
> maxOccurs="unbounded"/>
> <xs:element name="bar" minOccurs="0"
> maxOccurs="unbounded"/>
> </xs:choice>
> </xs:sequence>
></xs:complexType>
>to
> <xs:complexType name="derived_test_typ">
> <xs:complexContent>
> <xs:restriction base="basis_typ">
> <xs:sequence>
> <xs:element
> name="added_element"/>
> <xs:element name="foo"
> minOccurs="2" maxOccurs="2"/>
> <xs:element name="bar"
> minOccurs="4" maxOccurs="4"/>
> </xs:sequence>
> </xs:restriction>
> </xs:complexContent>
> </xs:complexType>
>
>i think this is a bug.
>
>
You're right - this is a bug. Unfortunately it is a bug in the schema
spec rather than Xerces. The reason that Xerces objects to your
restriction is that there isn't a one-to-one mapping between the
particles of the derived sequence and the particles of the base. If you
look, the outer sequence in the base has two particles: "added_element"
and the choice; but the derived sequence has three - "added_element",
"foo" and "bar". You and I can both see that anything valid for the
restriction will be valid for the base, but unfortunately the algorithm
defined in the schema spec for determining what constitutes a valid
restriction is far from perfect. The obvious way round this would be to do:

<xs:complexType name="derived_test_typ">
<xs:complexContent>
<xs:restriction base="basis_typ">
<xs:sequence>
<xs:element name="added_element"/>
<xs:sequence>
<xs:element name="foo" minOccurs="2"
maxOccurs="2"/>
<xs:element name="bar" minOccurs="4"
maxOccurs="4"/>
</xs:sequence>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>


Unfortunately the schema spec has that one covered as well :-) There's a
cunning little clause in there about pointless particles, the net result
of which is that the inner sequence will be merged into the outer one
prior to processing, on the grounds that its pointless. It *is*
pointless from a formal point of view, but unfortunately it is very
necessary for making it clear to the algorithm which particles in the
derived type are intended to be restrictions of which particles in the
base; so the spec gets you coming and going - gotta love it :-)

If you're feeling strong the relevant section of the schema spec can be
found at:

http://www.w3.org/TR/2004/PER-xmlschema-1-20040318/#cos-particle-restrict

If it's any consolation I believe that this is on the todo list for Schema
1.1...

Lucian

--

Lucian Holland, Technical Architect +44-1865-203192
DecisionSoft Limited http://www.decisionsoft.com
XML Development and Services


---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-j-dev-unsubscribe@xxxxxxxxxxxxxx
For additional commands, e-mail: xerces-j-dev-help@xxxxxxxxxxxxxx


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise