- From: George Cristian Bina <george@oxygenxml.com>
- Date: Tue, 28 Nov 2006 17:59:33 +0200
- To: Erik Johnson <ejohnson@epicor.com>
- Cc: Boris Kolpackov <boris@codesynthesis.com>, xmlschema-dev@w3.org
Hi Erik,
No, as you describe it it seems you understood the content model as
<xs:sequence>
<xs:choice>
<xs:sequence> <!-- note the sequence instead of choice -->
<xs:element name="ElementB1" />
<xs:element name="ElementA1"/> <!-- (1) -->
</xs:sequence>
<xs:element name="ElementA1"/> <!-- (2) -->
</xs:choice>
</xs:sequence>
In that case there is no ambiguity, but otherwise there is not
requirement for ElementB1 to be present.
Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
Erik Johnson wrote:
>> Now when parser sees ElementA1 inside ElementC1 it has to ways of
>
>> associating a schema declarations to ElementA1: it can be ElementA1
>
>> from line (1) or it can be ElementA1 from line (2). Thus this schema
>
>> is ambiguous.
>
>
>
> Thanks Boris (and George), this is very helpful. Sure enough, when I
> try the “syntactic-sugar-free” example, both toolkits report a UPA
> violation. Maybe one just can’t navigate the groups.
>
>
>
> But I have one more general question about schema validation:
>
>
>
> Isn’t the idea behind UPA to make sure that validators do not have to
> “look ahead” to determine which particle the current node belongs to?
> Given our schema (shown below), let’s say the validator is at ElementC1
> and moves to the next node. If that next node is ElementB1 we know we
> are in the choice() particle containing ElementB1-ElementA1. But if the
> node after ElementC1 is ElementA1, we know we took the other choice()
> route. That doesn’t seem ambiguous to me because the first choice()
> mandates the presence of ElementB1. But if ElementB1 was declared with
> minOccurs=0, that **would** be an ambiguous construct because the
> validator wouldn’t know which particle it’s landed in when it sees an
> ElementA1. Am I over-thinking all this?
>
>
>
> <xs:element name="ElementC1">
>
> <xs:complexType>
>
> <xs:sequence>
>
> <xs:choice>
>
> <xs:choice>
>
> <xs:element name="ElementB1" />
>
> <xs:element name="ElementA1"/> <!-- (1) -->
>
> </xs:choice>
>
> <xs:element name="ElementA1"/> <!-- (2) -->
>
> </xs:choice>
>
> </xs:sequence>
>
> </xs:complexType>
>
> </xs:element>
>
>
> ------------------------------------------------------------------------
> *From:* Boris Kolpackov [mailto:boris@codesynthesis.com]
> *Sent:* Mon 11/27/2006 10:03 PM
> *To:* Erik Johnson
> *Cc:* xmlschema-dev@w3.org
> *Subject:* Re: UPA Question
>
> Hi Erik,
>
> Erik Johnson <ejohnson@epicor.com> writes:
>
>
> > But after thinking about it, I don't think that the content model is
> > ambiguous.
>
> It helps to remove all the syntactic sugar to the see the problem clearly:
>
>
> <xs:element name="ElementC1">
> <xs:complexType>
> <xs:sequence>
> <xs:choice>
> <xs:choice>
> <xs:element name="ElementB1" />
> <xs:sequence>
> <xs:element name="ElementA1"/>
> </xs:sequence>
> </xs:choice>
> <xs:sequence>
> <xs:element name="ElementA1"/>
> </xs:sequence>
> </xs:choice>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
>
> We can further simplify this schema fragment by replacing
>
> <xs:sequence>
> <xs:element name="ElementA1"/>
> </xs:sequence>
>
> with just
>
> <xs:element name="ElementA1"/>
>
> which gives us:
>
>
> <xs:element name="ElementC1">
> <xs:complexType>
> <xs:sequence>
> <xs:choice>
> <xs:choice>
> <xs:element name="ElementB1" />
> <xs:element name="ElementA1"/> <!-- (1) -->
> </xs:choice>
> <xs:element name="ElementA1"/> <!-- (2) -->
> </xs:choice>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
>
>
> Now when parser sees ElementA1 inside ElementC1 it has to ways of
> associating a schema declarations to ElementA1: it can be ElementA1
> from line (1) or it can be ElementA1 from line (2). Thus this schema
> is ambiguous.
>
>
> hth,
> -boris
>
>
> --
> Boris Kolpackov
> Code Synthesis Tools CC
> http://www.codesynthesis.com <http://www.codesynthesis.com/>
> Open-Source, Cross-Platform C++ XML Data Binding
>
> ------------------------------------------------------------------------
> This e-mail is for the use of the intended recipient(s) only. If you
> have received this e-mail in error, please notify the sender immediately
> and then delete it. If you are not the intended recipient, you must not
> use, disclose or distribute this e-mail without the author's prior
> permission. We have taken precautions to minimize the risk of
> transmitting software viruses, but we advise you to carry out your own
> virus checks on any attachment to this message. We cannot accept
> liability for any loss or damage caused by software viruses.
>
Received on Tuesday, 28 November 2006 15:59:51 UTC