XML-документ выглядит следующим образом:
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://localhost/app/myschema.xsd myschema.xsd">
<metadata>
<source appVer="2.10.0.3" structure="2.10.18.34" sequence="00000001" dt="2014-08-26T11:13:15"/>
</metadata>
<firstItemStorage>
<row col1="..." col2="..." />
<row col1="..." col2="..." />
<row col1="..." col2="..." />
</firstItemStorage>
<secondItemStorage>
<row col1="..." col2="..." />
<row col1="..." col2="..." />
<row col1="..." col2="..." />
</secondItemStorage>
<anyOtherElement>
<!-- Any XML -->
</anyOtherElement>
</data>
Я хотел бы определить следующее:
- Корневым элементом документа должно быть
data
. - Внутри него могут быть любые элементы в любом порядке.
metadata
элемент является обязательным и имеет строгую структуру. - Любые другие элементы не требуются и имеют неплотную структуру.
- Когда такие элементы, как
firstItemStorage
и secondItemStorage
определены в схеме XSD и встречаются в документе XML, они должны быть проверены на наличие нулевых или неограниченных элементов row
, которые имеют нулевые или неограниченные атрибуты в любом порядке.Определенные атрибуты проверяются, неопределенные запрещаются. - , если в документе XML встречаются любые другие элементы, которые не определены в схеме XSD, ошибки проверки не происходит и их содержимое не проверяется.
Моя схема для него выглядит следующим образом:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="data">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="metadata" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="source">
<xs:complexType>
<xs:attribute name="appVer" type="xs:string" use="required"/>
<xs:attribute name="structure" type="xs:string" use="required"/>
<xs:attribute name="sequence" type="xs:unsignedInt" use="required"/>
<xs:attribute name="dt" type="xs:dateTime" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="firstItemStorage" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="row" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<!-- Attributes could have any order -->
<xs:attribute name="id" type="xs:int" />
<xs:attribute name="sid" type="xs:int" />
<xs:attribute name="id_group" type="xs:int" />
<xs:attribute name="consum" type="xs:double" />
<xs:attribute name="overloadlimit" type="xs:double" />
<xs:attribute name="upd" type="xs:dateTime" />
<!-- Any other attributes are prohibited -->
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="secondItemStorage" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="row" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<!-- Attributes could have any order -->
<xs:attribute name="id" type="xs:int" />
<xs:attribute name="meaning" type="xs:string" />
<xs:attribute name="visible" type="xs:boolean" />
<xs:attribute name="a_counter" type="xs:boolean" />
<xs:attribute name="activities" type="xs:boolean" />
<xs:attribute name="upd" type="xs:dateTime" />
<!-- Any other attributes are prohibited -->
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Any other elements are allowed, but not validated -->
<xs:any />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
У меня проблемы с элементом xs:any
:
- Элемент
any
допускает не только любые неизвестные элементы, но итакже любые атрибуты известных элементов - Я получаю предупреждение от Visual Studio:
Предупреждение 26 Подстановочный знак «## any» разрешает элементу «операции» и вызывает содержимоемодель стала неоднозначной.Модель содержимого должна быть сформирована таким образом, чтобы во время проверки последовательности элементов информации об элементе, частица, содержащаяся прямо, косвенно или неявно в ней, с помощью которой можно попытаться проверить каждый элемент в последовательности, в свою очередь, может быть однозначно определена без изучения содержимого или атрибутовэтот элемент и без какой-либо информации об элементах в оставшейся части последовательности.
Без элемента any
Я выдаю ошибку, когда элементы, не определенные в XSD, встречаются в документе XML.
Как безопасно определить, что я хочу?