ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> xml-dev
xml-dev
[xml-dev] Re: Complex or Simple content usage
by Jeni Tennison other posts by this author
Aug 11 2002 6:05PM messages near this date
[xml-dev] Complex or Simple content usage | Re: [xml-dev] Re: maps
Hi Danny,

Your question is appropriate for xmlschema-dev@[...].org. You probably
shouldn't cross-post to xml-dev@[...].org. I'm only cross-posting
so that they know it's been answered; please post follow-ups to
xmlschema-dev@[...].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/


-----------------------------------------------------------------
The xml-dev list is sponsored by XML.org <http://www.xml.org> , an
initiative of OASIS <http://www.oasis-open.org> 

The list archives are at http://lists.xml.org/archives/xml-dev/

To subscribe or unsubscribe from this list use the subscription
manager: <http://lists.xml.org/ob/adm.pl> 
Thread:
Danny Vint
Jeni Tennison

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved