Еще один вызов возможности XSD,
Я отправлял XML-файлы своими клиентами, которые будут иметь 0 или больше неопределенных, или [вызов] неожиданные теги (Может появиться в иерархии). Хорошо они - избыточные теги для меня.. таким образом, я должен проигнорировать их присутствие, но наряду с ними существует некоторый набор тегов, которые требуются, чтобы быть проверенными.
Это - демонстрационный XML:
<root>
<undefined_1>one</undefined_1>
<undefined_2>two</undefined_2>
<node>to_be_validated</node>
<undefined_3>two</undefined_3>
<undefined_4>two</undefined_4>
</root>
И XSD я попробовал:
<xs:element name="root" type="root"></xs:element>
<xs:complexType name="root">
<xs:sequence>
<xs:any maxOccurs="2" minOccurs="0"/>
<xs:element name="node" type="xs:string"/>
<xs:any maxOccurs="2" minOccurs="0"/>
</xs:sequence>
</xs:complexType
XSD не позволяет это, из-за определенных причин.
Вышеупомянутым примером является просто образец. Практический XML идет со сложной иерархией XML-тэгов..
Любезно сообщите мне, можно ли получить взлом его.
Между прочим, альтернативное решение состоит в том, чтобы вставить XSL-преобразование перед процессом проверки. Ну, я избегаю его, потому что я должен изменить код .NET, который инициировал процесс проверки, который поддерживается самое меньшее моей компанией.
Заключение:
Это невозможно с XSD. Все подходы, которые я пытался реализовать, были названы инструментами проверки «неоднозначными», что сопровождалось множеством ошибок.
Может быть, можно использовать пространства имен:
<xs:element name="root" type="root"></xs:element>
<xs:complexType name="root">
<xs:sequence>
<xs:any maxOccurs="2" minOccurs="0" namespace="http://ns1.com" />
<xs:element name="node" type="xs:string"/>
<xs:any maxOccurs="2" minOccurs="0" namespace="http://ns2.com"/>
</xs:sequence>
</xs:complexType>
Это, вероятно, подтвердит.