[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] XML Schema quiz: 3 elements and at least one must be present
- From: "Fraser Goffin" <goffinf@googlemail.com>
- To: xml-dev@lists.xml.org
- Date: Thu, 14 Aug 2008 17:54:51 +0100
Won't this allow invalid instances according to Roger's spec, that is,
it allows a 'B' followed by and 'A' and a 'C' followed by an 'A' or
'B' ???
2008/8/14 bryan rasmussen <rasmussen.bryan@gmail.com>:
> no but a fun variation , more sequences valid than you specify, but all you
> specify are valid - using XSV.
>
>
> <xs:complexType>
> <xs:choice>
> <xs:sequence>
> <xs:element name="A" type="xs:string" />
> <xs:element name="B" type="xs:string" minOccurs="0" />
> <xs:element name="C" type="xs:string" minOccurs="0" />
> </xs:sequence>
> <xs:sequence>
> <xs:element name="B" type="xs:string" />
> <xs:element name="A" type="xs:string" minOccurs="0" />
> <xs:element name="C" type="xs:string" minOccurs="0" />
> </xs:sequence>
> <xs:sequence>
> <xs:element name="C" type="xs:string" />
> <xs:element name="A" type="xs:string" minOccurs="0" />
> <xs:element name="B" type="xs:string" minOccurs="0" />
>
> </xs:sequence>
> </xs:choice>
> </xs:complexType>
>
> the limits of of XML Schema could make an amusing parlor game.
>
> Cheers,
> Bryan Rasmussen
>
>
> On Thu, Aug 14, 2008 at 2:02 PM, Costello, Roger L. <costello@mitre.org>
> wrote:
>>
>> Hi Folks,
>>
>> Consider this problem: you have 3 elements - A, B, C - and you need at
>> least one of them to be present in your XML instance document.
>>
>> Here are the valid instances:
>>
>> <A>...</A>
>> <B>...</B>
>> <C>...</C>
>>
>> or
>>
>> <A>...</A>
>> <B>...</B>
>>
>> or
>>
>> <A>...</A>
>> <C>...</C>
>>
>> or
>>
>> <B>...</B>
>> <C>...</C>
>>
>> or
>>
>> <A>...</A>
>>
>> or
>>
>> <B>...</B>
>>
>> or
>>
>> <C>...</C>
>>
>> Question: will this XML Schema definition work:
>>
>> <complexType name="ThreeElements">
>> <choice>
>> <sequence>
>> <element name="A" type="string" />
>> <element name="B" type="string" minOccurs="0" />
>> <element name="C" type="string" minOccurs="0" />
>> </sequence>
>> <sequence>
>> <element name="A" type="string" minOccurs="0" />
>> <element name="B" type="string" />
>> <element name="C" type="string" minOccurs="0" />
>> </sequence>
>> <sequence>
>> <element name="A" type="string" minOccurs="0" />
>> <element name="B" type="string" minOccurs="0" />
>> <element name="C" type="string" />
>> </sequence>
>> </choice>
>> </complexType>
>>
>> Notice that in the first choice A is required and B, C are optional.
>> In the second choice B is required and A, C are optional. In the third
>> choice C is required and A,B are optional.
>>
>> Scroll down for the answer ...
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> Answer:
>>
>> Let's play schema validator: You are parsing the instance document and
>> encounter this element:
>>
>> <A>...</A>
>>
>> How shall you validate it? In the above schema there are three
>> declarations for the <A> element. The only way for you to know which
>> declaration to use is to "look ahead" in the instance document. For
>> example, if there is no <B> element then you can eliminate the second
>> choice.
>>
>> Requiring an XML Schema validator to "look ahead" is not allowed (it is
>> allowed with Relax NG).
>>
>> The technical term for the above content model is: non-deterministic
>> content model. XML Schema 1.0 does not allow non-deterministic content
>> models.
>>
>> Thus, the above complexType definition is not valid.
>>
>> /Roger
>>
>> _______________________________________________________________________
>>
>> XML-DEV is a publicly archived, unmoderated list hosted by OASIS
>> to support XML implementation and development. To minimize
>> spam in the archives, you must subscribe before posting.
>>
>> [Un]Subscribe/change address: http://www.oasis-open.org/mlmanage/
>> Or unsubscribe: xml-dev-unsubscribe@lists.xml.org
>> subscribe: xml-dev-subscribe@lists.xml.org
>> List archive: http://lists.xml.org/archives/xml-dev/
>> List Guidelines: http://www.oasis-open.org/maillists/guidelines.php
>>
>
>
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]