Возможно, я слишком долго смотрел на эту проблему, возможно, нет ответа; в любом случае я здесь.Недостаток модели содержимого в схеме
Я пытаюсь разрешить набор возможных комбинаций в XSD, но я не могу найти подход, который не приводит к двусмысленности.
Быстрый regexy respresentation:
foo+ (bar baz* | bar? baz+ qux*)
foo
требуется (один или-более)- Если
bar
существует,baz
не является обязательным (нулевой или-более) - Если
baz
существует,bar
является необязательным (нулевой или один) иqux
не является обязательным (нуль-или-более) qux
не может существовать, еслиbaz
не существует
Неоднозначность возникает дано foo bar baz
.
Неоднозначность 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>
экран для хорошей меры:
Теперь я начинаю понимать, что, возможно, это просто ограничение модели содержимого XSD. Причина двусмысленности очевидна; решение не так.
Может ли кто-нибудь увидеть средство, с помощью которого я могу это разрешить; путем переопределения элементов путем использования какой-либо схемы проектирования схемы для облегчения неоднозначных сценариев, подобных этому?
Состояние проблемы bar
и baz
явно проблема, но я не могу придумать другого способа сделать это.
Большое спасибо за внимание.
Edit: В настоящее время чтения «Schema Component Constraint: Unique Particle Attribution» в попытке найти лазейку. Любые другие рекомендуемые чтения приветствуются.
Спасибо @MichaelKay, ваше Рекомендованное выражение работало отлично! (* возможно, мои аналитические способности легли спать, пока я не прошлой ночью *). Я верю, что буду делать обзор стратегий устранения неоднозначности и насильно помню тот факт, что у композиторов тоже в XSD может быть мощность. – Dan