Ограничения на основе значения тега в 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.

Вы можете сделать одно из следующего:

  1. Перепроектируйте ваш XML, чтобы использовать конкретные имена тегов, такие как Identifier, StartDate и т.п.
  2. принуждать i4 а также dateTime.iso8601 Помимо name,
  3. Используйте утверждения XSD 1.1 для принудительной проверки на основе значенияname,

Рекомендую выбрать №1.

Другие вопросы по тегам