Можно ли определить в схеме XML, что должны быть некоторые определенные атрибуты XML, и в то же время я хочу разрешить расширить этот список в будущем?
Здесь, если у нас есть следующие гипотетическиечасть объявления XML:
<xs:element name="MyTypeInstance" type="MyType" />
<xs:complexType name="MyType">
<xs:attribute name="FirstAttr" type="xs:int" use="required"/>
<xs:attribute name="SecondAttr" type="xs:string" use="required"/>
</xs:complexType>
Тогда следующий фрагмент документа XML действителен в соответствии с этой схемой:
<MyType firstAttr="123" secondAttr="abc" />
Я хочу иметь возможность успешно проверить следующий фрагмент XML:
<MyType firstAttr="123" secondAttr="abc" ThirdAttr="some new value" />
Две основные проблемы:
- Я не хочу менять схему XML каждый раз, когда мне нужно ввести какой-то новый атрибут, потому что мы не хотимвынудить всех наших клиентов обновиться до последней версии нашего программного обеспечения, а некоторые из них не обновляют свои приложения в течение длительного времени;
- Я не могу просто использовать
anyAttribute
в схеме XML, потому что яхочу проверить документ XML перед началом работы с ним.Если бы я указал только элемент anyAttribute
, я бы не знал, что некоторые обязательные атрибуты отсутствуют.И, насколько я понимаю, XML не позволяет использовать элементы attribute
и anyAttribute
в схеме (по крайней мере, я не смог заставить такую схему работать, используя класс .net XmlDocument
).
Было бы идеально, если бы можно было явно указать некоторые атрибуты, используя элемент attribute
, поэтому я бы точно знал, что эти атрибуты присутствуют в документе XML, но в то же время я позволил бы расширить XMLдокумент с использованием элемента anyAttribute
.
Как это сделать?