XSD complexContent ограничение
Я нашел следующий пример на w3schools.
<xs:complexContent>
<xs:restriction base="xs:integer">
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:restriction>
</xs:complexContent>
Я искал во многих документациях, но все еще не получил его: когда complexContent не имеет атрибута "mixed", элемент не имеет никакого текстового узла и, следовательно, не нуждается ни в каком типе данных. Но почему <xs:restriction base="xs:integer">
? Как я понял это абсолютно ничего не делает?
1 ответ
Я не думаю, что приведенный выше сложный фрагмент содержимого (или фрагмент на связанной странице) является верным в соответствии со спецификацией схемы XML, поэтому ваши соображения имеют смысл. Если вы попробуете это с механизмом проверки XML-схемы, он должен выдать ошибку. Сложный тип со сложным содержимым (только для элементов или смешанный) не может быть получен путем ограничения из простого типа.
Сложный тип с пустым содержимым и атрибутом может быть определен следующим образом:
<xs:complexType>
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>
Просто для полноты: технически возможно также извлечь сложный тип, который должен иметь "пустое содержимое" (обратите внимание на кавычки) из простого типа, однако это должно быть сделано расширением, а простой тип должен быть одноэлементным пространством, содержащим пустая строка, чтобы не допустить никакого содержимого. Полученный сложный тип будет тогда иметь простое содержимое, которое должно быть пустой строкой - так что, на самом деле, оно не является, строго говоря, пустым содержимым, но при проверке экземпляров оно ведет себя как таковое.
<xs:simpleType name="empty">
<xs:restriction base="xs:string">
<xs:length value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="empty">
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>