Ограничения на основе значения тега в xsd
Я должен создать ограничения ниже XML на основе его значения тега
<struct>
<member>
<name>Identifier</name>
<value><i4>11002</i4></value>
</member>
<member>
<name>StartDate</name>
<value><dateTime.iso8601>20160701T12:00:00+0000</dateTime.iso8601>
</value>
</member>
<member>
<name>Type</name>
<value><i4>0</i4></value>
</member>
</struct>
Формат xsd, который я создал, похож, это всего лишь краткая форма кода, созданная с помощью онлайн-инструмента.
<xs:element minOccurs="0" name="struct">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="member">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="value">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="string" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
Что мне нужно, это поставить ограничение на startDate, что он имеет правильный формат. и идентификатор длиной всего от 5 до 10 цифр.
1 ответ
Ваш XML-дизайн чрезмерно мета и, таким образом, расстраивает вашу способность выражать ограничения на значения данных с помощью XSD 1.0.
Вы можете сделать одно из следующего:
- Перепроектируйте ваш XML, чтобы использовать конкретные имена тегов, такие как
Identifier
,StartDate
и т.п. - принуждать
i4
а такжеdateTime.iso8601
Помимоname
, - Используйте утверждения XSD 1.1 для принудительной проверки на основе значения
name
,
Рекомендую выбрать №1.