Здравствуйте.
Подскажите пожалуйста элегантное решение следующей проблемы. Есть система обмена сообщениями на основе XML. XML документ содержит различные характеристики сообщения, причем данные характеристики часто изменяются (пополняются новыми). Необходимо разработать схему при которой возможно было бы проверять валидность существующих характеристик и добавлять новые не изменяя XSD-схемы (если вообще такое возможно). Пока пришло в голову только следующее решение (ниже упрощенная схема), но оно кажется не слишком правильным с точки зрения использования XML. Характеристики сгруппированы, в атрибут name элемента PropertyGroup записывается имя группы, а в name и value элемента Property записываются соответственно имя и значение характеристики сообщения. При такой организации возможно безболезненное добавление новой характеристики (проверка по схеме проходит, сообщение разбирается и обрабатывается, непредвиденные характеристики просто игнорируются), но для проверки типов данных и формата характеристик необходимо писать отдельное средство проверки со своими правилами. Возможно ли построить XSD схему так, чтобы сохранилось свойство гибкости и одновременно была возможность проверить валидность характеристик (уже известных).
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="
http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Message">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Body"/>
<xs:element name="PropertyGroup" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Property" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>