- From: Boris Kolpackov <boris@codesynthesis.com>
- Date: Tue, 28 Nov 2006 08:03:23 +0200
- To: Erik Johnson <ejohnson@epicor.com>
- Cc: xmlschema-dev@w3.org
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
Open-Source, Cross-Platform C++ XML Data Binding
Received on Tuesday, 28 November 2006 06:14:49 UTC