- From: Roger L. Costello <costello@mitre.org>
- Date: Mon, 12 Aug 2002 08:03:06 -0400
- To: Jeni Tennison <jeni@jenitennison.com>, "Costello,Roger L." <costello@mitre.org>
- CC: xmlschema-dev@w3.org, Danny Vint <dvint@mindspring.com>
Hi Jeni, Are you sure about this? I thought the rules for this were real simple: complexContent extends/restricts complexTypes simpleContent extends/restricts simpleTypes This looks correct to me: <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> "HelpText extends the complexType, C-255, with the attribute, xml:lang." Looking at C-255 we see that it is a simple type extended with an id attribute. Thus, <HelpText id=".." xml:lang="..">...</HelpText> Can you point me to the part of the spec that allows simpleContent to extend a complexType? /Roger P.S. Congrats on your new book and award! Jeni Tennison wrote: > > 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/ > > ----------------------------------------------------------------- > 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>
Received on Monday, 12 August 2002 08:04:50 UTC