XML.orgXML.org
FOCUS AREAS |XML-DEV |XML.org DAILY NEWSLINK |REGISTRY |RESOURCES |ABOUT
OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
Re: Diamond problem using extensions and substitution groups

There is a way you can mimic substitutionGroups without the having to 
deal with its inheritance restrictions. I use this mechanism in the DITA 
schemas to include element domains in the base schemas because of we 
can't fully make use of  WXSs inheritance model. Things are a bit more 
modularized  in that architecture, but this should give you the gist of 
it.   The structures defined Example 1 will make MyVehicule valid where 
ever Vehicle is valid.   

The trick mimic substitutionGroups without the dependency on the 
inheritance model is to to create a named group for each element, add 
each element to the group and any addtional elements you want to 
substitute for it.  Instead of referencing each element in the content 
models you reference the named group.

However, I'm not sure if you from based on your diagram and your problem 
statement  whether or not MyCar should be a substitutionGroup for Car 
and MyVehicle  or only that you only want to extend their content model?

If it MyCar is going to be a substitutionGroup for Car and MyVehicle, 
Example 2,  you are going to run into some issues if you make MyCar a 
subtitution for Car and MyVehicle. You will a "Unique Particle 
Attribution" error from Xerces and MSXML 4.0 (even if a I put 
maxOccurs="unbounded" <root>'s particle).  XSV and MSXML .NET accept it 
as valid.  I don't have SaxonSA installed. I can't say whether or not it 
would be valid the schema.

Hope this helps,

Eric


Example 1:

<xs:element name="Vehicle"  type="vehicle.class"/>
<xs:element name="Car" type="car.class"/>
 <xs:element name="MyCar" type="mycar.class"/>
 <xs:element name="MyVehicle" type="myvehicle.class"/>

<xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:group ref="Vehicle" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
   
   
    <xs:group name="Vehicle">
        <xs:choice>
            <xs:element ref="Vehicle" />
            <xs:group ref="MyVehicle" />
        </xs:choice>
    </xs:group>
   
    <xs:group name="MyVehicle">
        <xs:choice>
            <xs:element ref="MyVehicle"/>
        </xs:choice>
    </xs:group>

Example 2: This will cause a "Unique Particle Attribution" error with 
Xerces and MSXML 4.0

<xs:group name="Vehicle">
        <xs:choice>
            <xs:element ref="Vehicle" />
            <xs:group ref="MyVehicle" />
             <xs:group ref="Car" />
        </xs:choice>
    </xs:group>


<xs:group name="Car">
        <xs:choice>
            <xs:element ref="Car"/>
            <xs:groupref="MyCar"/>
        </xs:choice>
    </xs:group>

<xs:group name="MyVehicle">
        <xs:choice>
            <xs:element ref="MyVehicle"/>
            <xs:group ref="MyCar"/>
        </xs:choice>
    </xs:group>




Antoli, Leo wrote:
> Dear all,
>
> I have the following schema element types:
>
>
> Vehicle  <---   MyVehicle
>
>      ^               ^  
>      |               |
>
>     Car    <-- 	 MyCar
>
>
> Vehicle is the base element type. Car extends from Vehicle.
>
> I want to add new elements to Vehicle, so I've created MyVehicle.
> Now I want to extend Car with MyCar, but I want MyCar also to have MyVehicle
> new child elements.
>
>
> Any idea about how to get this? I don't want to change or redefine Vehicle
> or Car as they are official elements, but I want to be able to extend them
> to add new child elements.
>
> The problem in Java or other languages is only solved for operations (using
> interfaces) but not for properties.
>
> I was thinking in using element groups instead of inheritance but then I
> can't use substitution groups. I want to use them so I could be able to use
> MyVehicle in all places in a XML document where Vehicle is allowed. 
>
> Thank you very much.
>
> Kind Regards,
> Leo Antoli
>
>
>
>
>   




[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS