Немного сложнее описание элемента, содержащего тело простого типа и атрибуты в открывающем теге. Этот тип отличается от простого типа только наличием атрибутов и определяется компонентом <simpleContent>. В теле этого компонента должен быть либо компонент <restriction>, либо компонент <extension> с атрибутом base, задающим тип (простой) тела описываемого элемента.
В компоненте <extension> описываются атрибуты открывающего тега описываемого элемента. Все вместе выглядит так, как в следующем примере:
<xsd: complехTуре name="calcResultType">
<xsd:simpleContent>
<xsd: extension base="xsd:decimal">
<xsd;attribute name=”unit" type="xsd:string" />
<xsd: attribute name=”precision”
type="xsd:nonNegativeInteger" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
Эту конструкцию можно описать словами так: "Определяется тип calcResultType элемента, тело которого содержит значения встроенного простого типа xsd: decimal. Простой тип расширяется тем. что к нему добавляются атрибуты unit и precision".
Если в схеме описать элемент <result> этого типа следующим образом: <xsd:element name="result" type="calcResultType" />
|
|
то в документе XML можно написать
<result unit="cM" precision="2">123.25</result>
В компоненте < restriction>, кроме атрибутов, описывается простой тип тела элемента и/или фасетки, ограничивающие тип, заданный атрибутом base. Например:
<xsd: complexType name="calcResultType">
<xsd: simpleContent>
<xsd: restriction base="xsd:decimal">
<xsd:totalDigits value="8" />
<xsd:attribute name="unit" type="xsd:string" />
<xsd:attribute name="precision”
type="xsd:nonNegativeInteger" />
</xsd:restriction>
</xsd:simpleContent>
</xsd:complexType>