Я пытаюсь написать XML-схему, которая будет проверять этот кусок XML:
<date isodate="2007-03-14">14 march 2007</date>
Атрибут isodate должен иметь тип xs: date, а его содержимое должно содержать не более 50 символов.
Интересно, можно ли написать определение схемы XML в одном блоке, что-то вроде этого может быть:
<xs:element name="date" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="50"/>
</xs:restriction>
<xs:attribute name="isodate" type="xs:date" use="required"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Код выше не работает, и я не могу понять, почему. Единственный обходной путь, который я нашел, состоит в том, чтобы разбить ограничительную часть на отдельный тип и добавить ссылку, подобную этой:
<xs:simpleType name="reviewDate">
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="date" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="reviewDate">
<xs:attribute name="isodate" type="xs:date" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Вопрос, который у меня возникает, заключается в том, как записать определение в один блок, чтобы схема была немного более читаемой и не ссылалась на типы в других частях схемы.