W3C home > Mailing lists > Public > xmlschema-dev@w3.org > August 2002

Re: Complex or Simple content usage

From: Jeni Tennison <jeni@jenitennison.com>
Date: Sun, 11 Aug 2002 19:05:03 +0100
Message-ID: <120313248457.20020811190503@jenitennison.com>
To: xmlschema-dev@w3.org, Danny Vint <dvint@mindspring.com>
CC: xml-dev@lists.xml.org

Hi Danny,

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

> 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/
Received on Sunday, 11 August 2002 14:05:05 GMT

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