[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xml-dev
Subject:    RE: [xml-dev] complexTypes and attributes
From:       "Michael Kay" <mike () saxonica ! com>
Date:       2007-05-13 21:30:15
Message-ID: 022401c795a5$e5d0fe50$6401a8c0 () turtle
[Download RAW message or body]

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@o2online.de] 
> Sent: 13 May 2007 03:02
> To: xml-dev@lists.xml.org
> 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@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
> 


_______________________________________________________________________

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic