Ambiguidade do modelo de conteúdo em um esquema

Talvez eu tenha encarado esse problema por muito tempo, talvez não haja uma resposta; De qualquer forma eu estou aqui agora.

Estou tentando permitir um conjunto de combinações possíveis em um XSD, mas não consigo encontrar uma abordagem que não resulte em ambigüidade.

Representação rápida de regexy:

foo+ ( bar baz* | bar? baz+ qux* )
foo É necessário (um ou mais)E sebar existe,baz é opcional (zero ou mais)E sebaz existe,bar é opcional (zero ou um) equx é opcional (zero ou mais)qux não pode existir sebaz não existe

A ambiguidade surge dadafoo bar baz.

Documento XSD ambíguo:

<xs:element name="parent">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="foo" minOccurs="1" maxOccurs="unbounded" />
            <xs:choice>
                <xs:sequence>
                    <xs:element name="bar" minOccurs="1" maxOccurs="1" />
                    <xs:element name="baz" minOccurs="0" maxOccurs="unbounded" />
                </xs:sequence>
                <xs:sequence>
                    <xs:element name="bar" minOccurs="0" maxOccurs="1" />
                    <xs:element name="baz" minOccurs="1" maxOccurs="unbounded" />
                    <xs:element name="qux" minOccurs="0" maxOccurs="unbounded" />
                </xs:sequence>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Captura de tela para uma boa medida:

Agora, estou começando a perceber que talvez isso seja simplesmente uma restrição do modelo de conteúdo XSD. A razão da ambiguidade é óbvia; a solução não é assim.

Alguém pode ver um meio com o qual eu posso permitir isso? reordenando os elementos, através do uso de algum padrão de design de esquema para aliviar cenários ambíguos como este?

A dependência de condição debar ebaz é claramente o problema, mas não consigo pensar em outra maneira de fazer isso.

Muito obrigado antecipadamente pessoal.

Editar: Lendo atualmente "Restrição do Componente do Esquema: Atribuição Única de Partículas"na tentativa de encontrar um loop-hole. Qualquer outra sugestão de leitura bem-vinda.

questionAnswers(1)

yourAnswerToTheQuestion