- From: David Valera <dvalera@pcl-hage.nl>
- Date: Fri, 15 Dec 2000 10:06:36 +0100
- To: "'Yimin Zhu'" <yzhu@citadon.com>, <xmlschema-dev@w3.org>
> If I have a complextType A containing two sub elements B and C. > > <complexType name="A"> > <complexContent> > <element name="B" type="string"/> > <element name="C" type="string"/> > </complexContent> > </ComplexType> > > Now I wish to define an element E, which is inherited from A. > Also, E can > only have B in its content model. Can I do it by using restriction as > following? Actually no, because the declarations or facets in the definition of E must be in a one-to-one relation with the type definition of A. furthermore, members of E which is declared as a restriction of A, are always members of A as well. This means that you can do the following: <xsd:complexType name="A"> <xsd:complexContent> <xsd:element name="B" type="string" minOccurs="0"/> <xsd:element name="C" type="string"/> </xsd:complexContent> </xsd:ComplexType> <xsd:element name="E"> <xsd:complexType> <xsd:complexContent> <xsd:estriction base="A"> <xsd:all> <xsd:element name="B" type="string"/> <xsd:element name="C" type="string"/> </xsd:all> </xsd:restriction> </xsd:complexContent> </xsd:complexType> </xsd:element> What you are probably looking for is the use of extension instead of restriction: First declare the complextype for element E, and then extend it to declare the type A. Something like: <xsd:element name="E" type="EType"> <xsd:complexType name="EType"> <xsd:sequence> <xsd:element name="B" type="string"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="A"> <xsd:complexContent> <xsd:extension base="EType"> <xsd:sequence> <xsd:element name="C" type="string"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> I hope this helps.
Received on Friday, 15 December 2000 04:05:53 UTC