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 existeA 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.