[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Complex or Simple content usage


xsd simple content
Hi Danny,

Your question is appropriate for xmlschema-dev@w.... You probably
shouldn't cross-post to xml-dev@l.... I'm only cross-posting
so that they know it's been answered; please post follow-ups to
xmlschema-dev@w....

> The problem seems to be around the use of simpleContent or
> complexContent and these types:
>
> Here are my base definitions of the types that I use:
>
>     <xsd:complexType name="C-255">
>        <xsd:simpleContent>
>           <xsd:extension base="C-255_NoID">
>              <xsd:attribute ref="id"/>
>           </xsd:extension>
>        </xsd:simpleContent>
>     </xsd:complexType>
>     <xsd:simpleType name="C-255_NoID">
>        <xsd:restriction base="xsd:string">
>           <xsd:maxLength value="255"/>
>           <xsd:minLength value="1"/>
>        </xsd:restriction>
>     </xsd:simpleType>
>
> I then have the following:
>
>     <xsd:element name="HelpText">
>        <xsd:complexType>
>           <xsd:complexContent>
>              <xsd:extension base="C-255">
>                 <xsd:attribute ref="xml:lang"/>
>              </xsd:extension>
>           </xsd:complexContent>
>        </xsd:complexType>
>     </xsd:element>
>
> MS-XML indicates that instead of complexContent, the definition of
> HelpText should use simpleContent. Is this correct? Is this a real
> error or a preferred way to define this element?

Yes, it's a real error. If you did:

<xsd:element name="HelpText">
  <xsd:complexType>
    <xsd:simpleContent>
      <xsd:extension base="C-255">
        <xsd:attribute ref="xml:lang"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
</xsd:element>

then it would be just fine (and would be correct -- the HelpText
element has two attributes (which means it must be a complex type) but
has simple content (a string).

> If MS-XML is correct, could we have made the Schema process any more
> difficult? Why can't I use complexContent, with a type defined as a
> complexType and simpleContent with a type defined as simpleType?

I agree that this can be confusing. XML Schema divides types into two
kinds: complex types, which allow element content and/or attributes;
and simple types, which don't. XML Schema then splits complex types
(which allow attributes) into two classes: those with purely textual
content (simple content) and those with element content (complex
content). Diagrammatically:

                 Type
                  /\
                 /  \
                /    \
           Simple    Complex           allows attributes or elements?
            Type      Type
                       /\
                      /  \
                     /    \
                 Simple  Complex       allows elements in content?
                Content  Content
                 
The restriction that you're running into is that you can't derive a
complex type with complex content from one with simple content. If you
need to extend a complex type with textual content to one that also
allows elements, then you have to start off with a complex type that
has complex content (allows elements in the first place) and is mixed
(to allow the text that you want). Similarly, you can't derive a
complex type from a simple type except to extend it by adding
attributes. I guess that this prevents you from doing:

<xs:complexType name="price">
  <xs:complexContent>
    <xs:extension base="xs:decimal">
      <xs:element name="currency" type="xs:token" />
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

to validate:

  <price>12.99<currency>GBP</currency></price>

but that's pretty bad XML design anyway (and I'll note that RELAX NG
doesn't support it either).

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.