W3C home > Mailing lists > Public > xmlschema-dev@w3.org > November 2006

Re: UPA Question

From: George Cristian Bina <george@oxygenxml.com>
Date: Tue, 28 Nov 2006 17:59:33 +0200
Message-ID: <456C5CE5.3010002@oxygenxml.com>
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

This archive was generated by hypermail 2.3.1 : Wednesday, 5 February 2014 07:15:11 UTC