W3C home > Mailing lists > Public > xmlschema-dev@w3.org > September 2005

RE: Referencing similar lists through a complexType

From: Michael Kay <mike@saxonica.com>
Date: Thu, 15 Sep 2005 17:21:14 +0100
To: "'Udo Ende'" <u.ende@mid.de>, <xmlschema-dev@w3.org>
Message-ID: <E1EFwUF-0005PN-QJ@lisa.w3.org>

It's even clearer to me that there is something very amiss with your
document design, yes.

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: xmlschema-dev-request@w3.org 
> [mailto:xmlschema-dev-request@w3.org] On Behalf Of Udo Ende
> Sent: 15 September 2005 16:27
> To: xmlschema-dev@w3.org
> Subject: AW: Referencing similar lists through a complexType
> 
> 
> Thanks Michael,
> 
> sorry I want to do something different. I want to have 
> "MiddleThree" and
> "MiddleFour" and much more inside "OuterOne" and "OuterTwo". 
> Definitely
> "OuterOne" and "OuterTwo" will have different tags inside, 
> but I took all
> other tags out trying to mention my problem. If I am getting up tp
> "MiddleThousand" I do have to write thousand refs in both. 
> Because I have
> many "Outer" too, my schema explodes. With only one reference 
> it would not
> explode. 
> Is that clearer?
> Udo
> 
> -----Ursprüngliche Nachricht-----
> Von: xmlschema-dev-request@w3.org 
> [mailto:xmlschema-dev-request@w3.org] Im
> Auftrag von Michael Kay
> Gesendet: Donnerstag, 15. September 2005 11:23
> An: 'Udo Ende'; xmlschema-dev@w3.org
> Betreff: RE: Referencing similar lists through a complexType
> 
> 
> There's something wrong with a design that uses element names 
> "OuterOne" and
> "OuterTwo" and envisages extending this to "OuterThree" and 
> "OuterFour". It
> suggests that you're packing data into the element names, whereas they
> should be used only to indicate the structure.
> 
> Replace <OuterOne ...> with <Outer level="1" ...> and your 
> processing will
> become much simpler.
> 
> Michael Kay
> http://www.saxonica.com/
> 
>  
> 
> > -----Original Message-----
> > From: xmlschema-dev-request@w3.org 
> > [mailto:xmlschema-dev-request@w3.org] On Behalf Of Udo Ende
> > Sent: 15 September 2005 09:25
> > To: xmlschema-dev@w3.org
> > Subject: Referencing similar lists through a complexType
> > 
> > 
> > 
> > Hi,
> > 
> > this xml data is valid due to the following schema:
> > 
> > <?xml version="1.0" encoding="ISO-8859-1"?>
> > <Example xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> >     <OuterOne id="Outer1">
> >          <MiddleOne id="Middle1_1">
> >             <Inner>8</Inner>
> >         </MiddleOne>
> >         <MiddleTwo id="Middle2_1">
> >             <Inner>6</Inner>
> >         </MiddleTwo>
> >         <MiddleOne id="Middle1_2">
> >             <Inner>3</Inner>
> >         </MiddleOne>
> >         <MiddleTwo id="Middle2_3">
> >             <Inner>1</Inner>
> >         </MiddleTwo>
> >      </OuterOne>
> >     <OuterTwo id="Outer2">
> >         <MiddleTwo id="Middle2_2">
> >             <Inner>0</Inner>
> >         </MiddleTwo>
> >          <MiddleOne id="Middle1_3">
> >             <Inner>1</Inner>
> >         </MiddleOne>
> >         <MiddleOne id="Middle1_4">
> >             <Inner>5</Inner>
> >         </MiddleOne>
> >      </OuterTwo>
> > </Example>
> > 
> > 
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> > elementFormDefault="qualified">
> >   <xs:element name="Example">
> >     <xs:complexType>
> >       <xs:sequence>
> >         <xs:element ref="OuterOne"/>
> >         <xs:element ref="OuterTwo"/>
> >       </xs:sequence>
> >     </xs:complexType>
> >   </xs:element>
> >   <xs:element name="OuterOne">
> >     <xs:complexType>
> >       <xs:choice maxOccurs="unbounded">
> >         <xs:element ref="MiddleOne"/>
> >         <xs:element ref="MiddleTwo"/>
> >       </xs:choice>
> >       <xs:attribute name="id" use="required" type="xs:NCName"/>
> >     </xs:complexType>
> >   </xs:element>
> >   <xs:element name="OuterTwo">
> >     <xs:complexType>
> >       <xs:sequence>
> >         <xs:element ref="MiddleTwo"/>
> >         <xs:element maxOccurs="unbounded" ref="MiddleOne"/>
> >       </xs:sequence>
> >       <xs:attribute name="id" use="required" type="xs:NCName"/>
> >     </xs:complexType>
> >   </xs:element>
> >   <xs:element name="MiddleOne">
> >     <xs:complexType>
> >       <xs:complexContent>
> >         <xs:extension base="Inner">
> >           <xs:attribute name="id" use="required" type="xs:NCName"/>
> >         </xs:extension>
> >       </xs:complexContent>
> >     </xs:complexType>
> >   </xs:element>
> >   <xs:element name="MiddleTwo">
> >     <xs:complexType>
> >       <xs:complexContent>
> >         <xs:extension base="Inner">
> >           <xs:attribute name="id" use="required" type="xs:NCName"/>
> >         </xs:extension>
> >       </xs:complexContent>
> >     </xs:complexType>
> >   </xs:element>
> >   <xs:complexType name="Inner">
> >     <xs:sequence>
> >       <xs:element ref="Inner"/>
> >     </xs:sequence>
> >   </xs:complexType>
> >   <xs:element name="Inner" type="xs:integer"/>
> > </xs:schema>
> > 
> > 
> > Both "OuterOne" and "OuterTwo" do have "MiddleOne"s and 
> > "MiddleTwo"s in it,
> > therefore the schema references both complexTypes "MiddleOne" and
> > "MiddleTwo". Assume there would be (much) more than only two 
> > complexTypes,
> > so each "Outer..." must reference all of these. Therefore the 
> > schema gets
> > bigger and bigger within each of the "Outer..." having the 
> > same complexTypes
> > referenced.
> > Can I only reference ONE complexType inside of the "Outer..." 
> > without having
> > the need of another tag?
> > 
> > The following is a compromise, but with another tag called 
> > "AnotherLevel":
> > 
> > <?xml version="1.0" encoding="ISO-8859-1"?>
> > <Example xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> >     <OuterOne id="Outer1">
> > 		<AnotherLevel>
> > 			<MiddleOne id="Middle1_1">
> > 				<Inner>8</Inner>
> > 			</MiddleOne>
> > 			<MiddleTwo id="Middle2_1">
> > 				<Inner>6</Inner>
> > 			</MiddleTwo>
> > 			<MiddleOne id="Middle1_2">
> > 				<Inner>3</Inner>
> > 			</MiddleOne>
> > 			<MiddleTwo id="Middle2_3">
> > 				<Inner>1</Inner>
> > 			</MiddleTwo>
> > 		</AnotherLevel>
> >     </OuterOne>
> >     <OuterTwo id="Outer2">
> > 		<AnotherLevel>
> > 			<MiddleTwo id="Middle2_2">
> > 				<Inner>0</Inner>
> > 			</MiddleTwo>
> > 			<MiddleOne id="Middle1_3">
> > 				<Inner>1</Inner>
> > 			</MiddleOne>
> > 			<MiddleOne id="Middle1_4">
> > 				<Inner>5</Inner>
> > 			</MiddleOne>
> > 		</AnotherLevel>
> > 	</OuterTwo>
> > </Example>
> > 
> > and the schema:
> > 
> > <?xml version="1.0" encoding="utf-8"?>
> > <xs:schema elementFormDefault="qualified"
> > xmlns:xs="http://www.w3.org/2001/XMLSchema">
> >   <xs:element name="Example">
> >     <xs:complexType>
> >       <xs:sequence>
> >         <xs:element ref="OuterOne" />
> >         <xs:element ref="OuterTwo" />
> >       </xs:sequence>
> >     </xs:complexType>
> >   </xs:element>
> >   <xs:element name="OuterOne">
> >     <xs:complexType>
> >       <xs:choice maxOccurs="unbounded">
> >         <xs:element ref="AnotherLevel" />
> >       </xs:choice>
> >       <xs:attribute name="id" type="xs:NCName" use="required" />
> >     </xs:complexType>
> >   </xs:element>
> >   <xs:element name="OuterTwo">
> >     <xs:complexType>
> >       <xs:choice maxOccurs="unbounded">
> >         <xs:element ref="AnotherLevel" />
> >       </xs:choice>
> >       <xs:attribute name="id" type="xs:NCName" use="required" />
> >     </xs:complexType>
> >   </xs:element>
> >   <xs:element name="AnotherLevel">
> >     <xs:complexType>
> >       <xs:choice maxOccurs="unbounded">
> >         <xs:element ref="MiddleOne" />
> >         <xs:element ref="MiddleTwo" />
> >       </xs:choice>
> >     </xs:complexType>
> >   </xs:element>
> >   <xs:element name="MiddleOne">
> >     <xs:complexType>
> >       <xs:complexContent mixed="false">
> >         <xs:extension base="Inner">
> >           <xs:attribute name="id" type="xs:NCName" use="required" />
> >         </xs:extension>
> >       </xs:complexContent>
> >     </xs:complexType>
> >   </xs:element>
> >   <xs:element name="MiddleTwo">
> >     <xs:complexType>
> >       <xs:complexContent mixed="false">
> >         <xs:extension base="Inner">
> >           <xs:attribute name="id" type="xs:NCName" use="required" />
> >         </xs:extension>
> >       </xs:complexContent>
> >     </xs:complexType>
> >   </xs:element>
> >   <xs:complexType name="Inner">
> >     <xs:sequence>
> >       <xs:element ref="Inner" />
> >     </xs:sequence>
> >   </xs:complexType>
> >   <xs:element name="Inner" type="xs:integer" />
> > </xs:schema>
> > 
> > 
> > Can I do that without the need of the "AnotherLevel"-Tag???
> > 
> > Regards,
> > Udo
> > 
> > 
> > 
> 
> 
> 
> 
> 
> 
Received on Thursday, 15 September 2005 16:21:35 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:14:51 GMT