Subject: RE: DTD to Scheme
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 2 Feb 2005 08:37:11 -0000
|
You're on the wrong list for XML Schema questions - the right place is
xmlschema-dev@xxxxxxx
But the answer is that you can express this model without violating UPA. In
shorthand, you write it as
((waiting,passing?)|passing)
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Stano Paska [mailto:paska@xxxxxxx]
> Sent: 02 February 2005 05:23
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: DTD to Scheme
>
> Hi,
>
> I need rewrite som DTD into XML Schema.
> I have problem with one part.
> In element "item" there may be three combinations of waiting/passing
> elements:
> one waiting, one passing, or both.
>
> In DTD it is easy and it works:
> <!ELEMENT item (risid,(waiting|passing|(waiting,passing)))>
>
> In Scheme it is easy, but it does not work:
> <xsd:element name="item">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element ref="risid"/>
> <xsd:choice>
> <xsd:element ref="waiting"/>
> <xsd:element ref="passing"/>
> <xsd:sequence>
> <xsd:element ref="waiting"/>
> <xsd:element ref="passing"/>
> </xsd:sequence>
> </xsd:choice>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
>
> :0,0: Complex type 'C0' violates the Unique Particle
> Attribution rule in
> its components 'waiting' and 'waiting'
>
> It is possible to write corresponding schema?
>
> Thanks for your solutions.
>
> Stano.
>
> Attachments:
> -----------------
> test.xml
> -----------------
> <?xml version="1.0" encoding="utf-8"?>
> <!DOCTYPE result SYSTEM "d:\praca\lucia\klient\dtd.dtd">
> <result>
> <item>
> <risid>DE307001001223</risid>
> <waiting>
> <average>13.99</average>
> <deviation>6.27</deviation>
> <count>4</count>
> </waiting>
> <passing>
> <average>13.99</average>
> <deviation>6.27</deviation>
> <count>4</count>
> </passing>
> </item>
> </result>
>
> ----------------
> DTD
> ----------------
> <?xml version="1.0" encoding="UTF-8"?>
>
> <!ELEMENT result (item+|error)>
>
> <!ELEMENT error (#PCDATA)>
> <!ELEMENT item (risid,(waiting|passing|(waiting,passing)))>
>
> <!ELEMENT risid (#PCDATA)>
> <!ELEMENT waiting (average,deviation,count)>
> <!ELEMENT passing (average,deviation,count)>
>
> <!ELEMENT average (#PCDATA)>
> <!ELEMENT deviation (#PCDATA)>
> <!ELEMENT count (#PCDATA)>
>
> -----------------
> Scheme
> -----------------
> <?xml version="1.0" encoding="UTF-8"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>
> <!-- simple elements -->
> <xsd:element name="risid" type="xsd:string"/>
> <xsd:element name="average" type="xsd:decimal"/>
> <xsd:element name="deviation" type="xsd:decimal"/>
> <xsd:element name="count" type="xsd:nonNegativeInteger"/>
> <xsd:element name="error" type="xsd:string"/>
>
> <!-- complex elements -->
> <xsd:complexType name="record">
> <xsd:sequence>
> <xsd:element ref="average"/>
> <xsd:element ref="deviation"/>
> <xsd:element ref="count"/>
> </xsd:sequence>
> </xsd:complexType>
> <xsd:element name="waiting" type="record"/>
> <xsd:element name="passing" type="record"/>
>
> <xsd:element name="item">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element ref="risid"/>
> <xsd:choice>
> <xsd:element ref="waiting"/>
> <xsd:element ref="passing"/>
> <xsd:sequence>
> <xsd:element
> ref="waiting"/>
> <xsd:element
> ref="passing"/>
> </xsd:sequence>
> </xsd:choice>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
>
> <xsd:element name="result">
> <xsd:complexType>
> <xsd:choice>
> <xsd:element ref="error"/>
> <xsd:element ref="item"
> maxOccurs="unbounded"/>
> </xsd:choice>
> </xsd:complexType>
> </xsd:element>
>
> </xsd:schema>
|