Я пытаюсь написать схему 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>
У меня есть вопрос, как написать определение в одном блоке, чтобы схема была более читаемой и не ссылалась на типы в других частях схемы.