RE: What are complexContent restrictions made for ?

Yes - but the down-side to derivation by restriction - at least for the way
it's currently handled in XML Schema - is that it requires maintenance. Each
derivation by restriction requires the content model of the restriction to
be duplicated as an initial step. After this, no change to the "parent" in
the derivation is reflected in the "child." You must add that content
yourself, using extreme care to ensure that every derivation-by-restriction
step correctly propagates desired content. 

For example, say  you have a "Person" and you derive from it an "Employee"
by restriction (presumably because you want to restrict out/down some of the
content). To do so, you copy the content model of Employee and
remove/restrict according to your needs. If  you later add a "MaritalStatus"
element to Person and if you want MaritalStatus propagated, you have to do
the propagation yourself - in the correct place in the content model, using
the same type or a proper derivation, etc. And if some other type was
derived by restriction from Employee, you'd have to propagate MaritalStatus
there, etc. As your models get more complex and your derivation tree more
bushy and/or deeper, maintaining the consistency of the derivation can
become burdensome.

In most cases, it's preferable to build up from simpler types a set of
derivations by extension. At least then you'll be assured that the shared
content will be consistent, with minimal effort on your part. There are
challenges there, too, since you will likely have to create multiple,
fine-grained types from which to compose your desired type, and since there
is no support in Schema for "multiple inheritance." You composition model
would not be purely derivation by extension, but some combination of that
and straight component composition.

Mark


Mark Feblowitz                                   	
XML Architect
       [t]   617.715.7231                                     	
       [f]   617.495.0188
Frictionless Commerce Incorporated 	
       [e]  mfeblowitz@frictionless.com
       [w] http://www.frictionless.com
       [m] 400 Technology Square, 9th Floor
             Cambridge, MA 02139 
Open Applications Group Incorporated
       [e]  mfeblowitz@openapplications.org
       [w] http://www.openapplications.org 

 -----Original Message-----
From: 	Anton Mellit [mailto:anton_mellit@unitedthinkers.com] 
Sent:	Saturday, May 18, 2002 3:50 PM
To:	Jeni Tennison
Cc:	xmlschema-dev@w3.org
Subject:	Re: What are complexContent restrictions made for ?

> Thus, deriving by restriction is helpful because it enables you to
> express the commonality between a set of elements, and process them in
> the same kind of way.

As I understand the idea of derivation is the following:
If type B is derived from type A then every element of type B can be
considered as an element of type A.

However, type definitions can be as follows:

<xs:complexType name="A">
    <xs:sequence>
        <xs:element name="child" type="xs:string" minOccurs="1"
maxOccurs="1"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="B">
    <xs:complexContent>
        <xs:restriction base="A">
            <xs:sequence>
                <xs:element name="child" type="xs:string" minOccurs="0"
maxOccurs="0"/>
            </xs:sequence>
        </xs:restriction>
    </xs:complexContent>
</xs:complexType>

If I have element of actual type B, but think of it as of element of type A
then I will fail trying to get value of its element <child>. Please, correct
me if I am wrong.

Regards, Anton

Received on Monday, 20 May 2002 09:41:37 UTC