Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


RE: [xml-dev] complexTypes and attributes

From: "Michael Kay" <mike@--------.--->
To: "'Umut Emin'" <j.s.bach@--------.-->,<xml-dev@-----.---.--->
Date: 5/13/2007 9:30:00 PM
In writing a schema for this, one of the questions is "do start and end have
the same type"? You can view that syntactically - is there any difference
between the validation rules for start and end? - or semantically - do these
represent objects in the real world that are two examples of the same kind
of thing?

(Looking at the semantics, I find your example somewhat mysterious. I think
I know what the height and width of a door are, but I have no idea what the
start and end of a door might be. Writing a schema without understanding the
semantics of the data model is usually best avoided.)

If we assume that start and end have the same type, that gives us:

<xs:element name="start" type="startOrEndType"/>
<xs:element name="end" type="startOrEndType"/>

<xs:complexType name="startOrEndType">
  <xs:sequence/>
  <xs:attribute name="x" type="xs:integer"/>
  <xs:attribute name="y" type="xs:integer"/>
  <xs:attribute name="z" type="xs:integer"/>
</xs:complexType>

There are many oddities in the syntax of XML Schema (I find it impossible to
write a schema without looking up the rules in a book, and that's after a
couple of years' practice). One of the odd rules is that you have to declare
the child elements of an element before you declare the attributes.

So door has two child elements and two attributes which makes it:

<xs:complexType name="doorType">
  <xs:sequence>
    <xs:element ref="start"/>
    <xs:element ref="end"/>
  </xs:sequence>
  <xs:attribute name="width" type="xs:integer"/>
  <xs:attribute name="height" type="xs:integer"/>
</xs:complexType>

<xs:element name="door" type="doorType"/>

Of course there are many variations: you can use anonymous types rather than
named types, and you can use locally-declared elements instead of
globally-declared. When you declare elements or types globally, their
definitions become reusable, which is why I tend to prefer this style.

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


> -----Original Message-----
> From: Umut Emin [mailto:j.s.bach@o...] 
> Sent: 13 May 2007 03:02
> To: xml-dev@l...
> Subject: [xml-dev] complexTypes and attributes
> 
> Hei *,
> 
> I started reading about xml after having found out that it 
> could work as a db. 
> 
> Now i am writing a scheme to understand the tree structure. I 
> got stuck with complexTypes and attributes. My xml file would 
> look like this:
> 
> <door width="150" height="300">
> <start x="50" y="50" z="0" />
> <end x="50" y="-50" z="100" />
> </door>
> 
> which would be like below as a scheme (except width & height
> attributes):
> 
> <xs:element name="door">
>                     <xs:complexType>
>                         <xs:sequence>
>                             <xs element name="start">
>                             <xs:attribute name="x" type="xs:integer"/>
>                             <xs:attribute name="y" type="xs:integer"/>
>                             <xs:attribute name="z" type="xs:integer"/>
>                         </xs:element>
> 
>                             <xs:element name="end">
>                             <xs:attribute name="x" type="xs:integer"/>
>                             <xs:attribute name="y" type="xs:integer"/>
>                             <xs:attribute name="z" type="xs:integer"/>
>                         </xs:element>
> 
>                         </xs:sequence>
>                     </xs:complexType>
>   </xs:element>
> 
> As I have the attributes width and height- in a complexType 
> element "door", i'd like to  know how i should put them in 
> the element block at scheme? I couldn't see any examples in 
> web related to this point. Is it a common design way not to 
> put attributes in the complex elements?
> 
> Greetz,
> Umut
> 
> 
> 
> ______________________________________________________________
> _________
> 
> 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@l...
> subscribe: xml-dev-subscribe@l... List archive: 
> http://lists.xml.org/archives/xml-dev/
> List Guidelines: http://www.oasis-open.org/maillists/guidelines.php
>


transparent
Print
Mail
Like It
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent