Re: What is lost if xsd:choice is jettisoned?

Hi Roger,

Just a couple of additional notes on this.

A reference to and element that is a substitution group head expands 
itself as a choice particle. As you already noted in the replies you got 
so far that cannot replace the choice particle from XML Schema. Where 
substitution groups are particularly interesting in my opinion is that 
they allow to overcome some of the limitations of the type extension in 
XML Schema. For example, imagine you have a paragraph and you want to 
define that its content is text plus some inline elements like bold and 
italic. If you put that in a complex type then you will have a content 
type like below

(bold|italic)*

plus marking the type as mixed to allow text content.

Now, imagine that you need to extend this to add underline as a possible 
inline element. If you make an extension to the type you defined you 
will end up with a content model like

(bold|italic)*, underline*

so, you will be able to use underline only at the end.

On the other hand, if you define an element, let's say inline and make 
the content model

inline*

and then define bold and italic with inline as substitution head then 
when you want to have also underline as a possible element inside that 
content model then you just mark underline with inline as substitution 
head and the reference to inline will be automatically expanded to a 
choice of bold, italic and underline. So basically you can see the 
substitution support as providing a dynamic type of choice, that is 
obtain depending on whatever elements substitute that referred element 
and that can change depending on what schema components are defined to 
substitute it.

Best Regards,
George
-- 
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com

On 3/8/11 4:45 PM, George Cristian Bina wrote:
> Hi Roger,
>
> When you use substitution groups there are additional constraints on the
> type of the elements that can substitute an element while when using
> plain choice there are no such constraints.
>
> Actually the content model when you have substitution groups like in
> your example is a choice between all the elements that can substitute
> that element. This will not work very well I think if you need to
> specify something like
>
> (a, b) | (b, c)
>
> for example, or something more complex along these lines.
>
> Best Regards,
> George

Received on Wednesday, 9 March 2011 11:25:15 UTC