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