При добавлении ограничений на complexTypes в XML-схемах необходимо ли переписать все элементы, используемые в определении complexType? Если да, почему он не может просто повторно использовать существующие определения элементов и перезаписать новые ограниченные?
Например, ниже; Когда я просто хочу ограничить страну поля, должен ли я снова переписать все 3 поля?
<xs:complexType name="customer">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Norwegian_customer">
<xs:complexContent>
<xs:restriction base="customer">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="country" type="xs:string" fixed="Norway"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
Итак, из приведенного ниже ответа видно, почему мы должны переписать весь тип.
Следующий вопрос
Что такое использование этой функции ограничения?
Одна ситуация, о которой я могу думать; когда вам нужно проверить экземпляры документов, содержащих ограниченные типы, вместо базовых типов в схеме xml.
Скажем, если "B" является базовым типом и его ограничивается "B *". Любой экземплярный документ, содержащий "B *" в том месте, где ожидается элемент документа "B", будет работать. Нам не пришлось бы писать отдельные правила для каждого ограниченного типа. (Атрибут "xsi: type" in документ экземпляра будет проверять его с правильным типом.) Правильно?
Любое другое использование этой функции?