Wieloznaczność modelu zawartości w schemacie

Może zbyt długo wpatrywałem się w ten problem, może nie ma odpowiedzi; tak czy inaczej jestem tu teraz.

Próbuję zezwolić na zestaw możliwych kombinacji w XSD, ale nie mogę znaleźć podejścia, które nie prowadzi do niejednoznaczności.

Szybka reprezentacja regexy:

foo+ ( bar baz* | bar? baz+ qux* )
foo jest wymagane (jeden lub więcej)Jeślibar istnieje,baz jest opcjonalny (zero lub więcej)Jeślibaz istnieje,bar jest opcjonalny (zero lub jeden) iqux jest opcjonalny (zero lub więcej)qux nie może istnieć, jeślibaz nie istnieje

Pojawia się dwuznacznośćfoo bar baz.

Niejednoznaczny dokument XSD:

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

Zrzut ekranu na dobre:

Teraz zaczynam zdawać sobie sprawę, że być może jest to po prostu ograniczenie modelu zawartości XSD. Powód niejednoznaczności jest oczywisty; rozwiązanie nie tak.

Czy ktoś może zobaczyć środki, za pomocą których mogę na to pozwolić; poprzez ponowne uporządkowanie elementów, poprzez zastosowanie jakiegoś schematu projektowania schematu, aby złagodzić takie dwuznaczne scenariusze?

Zależność warunkowabar ibaz jest to oczywiście problem, ale nie mogę wymyślić innego sposobu, aby to zrobić.

Wielkie dzięki z góry.

Edytować: Teraz czytam "Ograniczenie składnika schematu: unikalne przypisanie cząstki„w próbie znalezienia dziury w pętli. Każda inna propozycja jest mile widziana.

questionAnswers(1)

yourAnswerToTheQuestion