Искал и экспериментировал, исследовал и ломал голову над этим (мечтал об этом вчера вечером).
Попытка построить схему XSD для проверки следующего примера XML на основе ограничений тега в зависимости от значениятега.
<data>
<dataSet>
<title>mediaType</title>
<value>FullLength</value>
</dataSet>
<dataSet>
<title>available</title>
<value>true</value>
</dataSet>
<dataSet>
<title>country</title>
<value>Canada</value>
</dataSet>
</data>
схема, касающаяся ограничений на отдельные наборы данных
<xs:complexType name="typeAvailable">
<xs:sequence>
<xs:element name="title">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="available" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:boolean" />
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="typeMediaType">
<xs:sequence>
<xs:element name="title">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="mediaType" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="FullLength|Clip" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="typeCountry">
<xs:sequence>
<xs:element name="title">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="typeCountry" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="Canada|US" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
Лучшее, что я мог придумать, не проверяется, когда набор данных вышелпорядка (которым они будут)
<xs:complexType name="typeData">
<xs:all>
<xs:element name="dataSet" type="typeMediaType" />
<xs:element name="dataSet" type="typeAvailable" />
<xs:element name="dataSet" type="typeCountry" />
</xs:all>
</xs:complexType>
Конечно, я застрял с данными, которые я получаю, но ничто не говорит, что я не могу преобразовать их с помощью XSLT - во что, я нея знаюЯ надеялся на элегантное решение XSD, увы, боюсь, что это невозможно.
Кто-нибудь может доказать, что я не прав?Это мой первый проект схемы за довольно долгое время.
ОБНОВЛЕНИЕ
Вы знаете, что, я думаю, я собираюсь проверить его структуру, прочитайте часть с LINQ и преобразование его через XSLT в
<data>
<mediaType>FullLength</mediaType>
<available>true</available>
<country>Canada</country>
</data>
Вероятно, мне все равно следует это сделать, так как работа с данными после проверки будет слишком трудоемкой в пар как угодно.