如何声明包含了一个属性,同时拥有简单类型值的元素。在一个实例文档中,此类的元素就像下面的形式:
现在我们如何为这个元素定义添加一个属性呢? 我们以前说过,简单类型不能有属性,而decimal是简单类型。因此,我们必须定义一个复合类型来携带属性声明。然而,同时我们也想具有简单类型decimal的元素内容。所以我们最初的问题转化为:我们如何定义一个基于简单类型decimal的复合类型? 答案是,从简单类型decimal中引出一个新的复合类型,XML Schema 如下:
XML Schema 如下:
<
internationalPrice
currency
="EUR"
>
423.46
</
internationalPrice
>
<
xsd:element
name
="internationalPrice"
>
< xsd:complexType >
< xsd:simpleContent >
< xsd:extension base ="xsd:decimal" >
< xsd:attribute name ="currency" type ="xsd:string" />
</ xsd:extension >
</ xsd:simpleContent >
</ xsd:complexType >
</ xsd:element >
< xsd:complexType >
< xsd:simpleContent >
< xsd:extension base ="xsd:decimal" >
< xsd:attribute name ="currency" type ="xsd:string" />
</ xsd:extension >
</ xsd:simpleContent >
</ xsd:complexType >
</ xsd:element >
混合内容,考虑下面的这个使用XML表示的客户信笺的片断,该片断包含了一些购买订单相同的元素。
<
letterBody
>
< salutation > Dear Mr. < name > Robert Smith </ name > . </ salutation >
Your order of < quantity > 1 </ quantity > < productName > Baby
Monitor </ productName > shipped from our warehouse on
< shipDate > 1999-05-21 </ shipDate > . ....
</ letterBody >
< salutation > Dear Mr. < name > Robert Smith </ name > . </ salutation >
Your order of < quantity > 1 </ quantity > < productName > Baby
Monitor </ productName > shipped from our warehouse on
< shipDate > 1999-05-21 </ shipDate > . ....
</ letterBody >
<
xsd:element
name
="letterBody"
>
< xsd:complexType mixed ="true" >
< xsd:sequence >
< xsd:element name ="salutation" >
< xsd:complexType mixed ="true" >
< xsd:sequence >
< xsd:element name ="name" type ="xsd:string" />
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name ="quantity" type ="xsd:positiveInteger" />
< xsd:element name ="productName" type ="xsd:string" />
< xsd:element name ="shipDate" type ="xsd:date" minOccurs ="0" />
<!-- etc. -->
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:complexType mixed ="true" >
< xsd:sequence >
< xsd:element name ="salutation" >
< xsd:complexType mixed ="true" >
< xsd:sequence >
< xsd:element name ="name" type ="xsd:string" />
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name ="quantity" type ="xsd:positiveInteger" />
< xsd:element name ="productName" type ="xsd:string" />
< xsd:element name ="shipDate" type ="xsd:date" minOccurs ="0" />
<!-- etc. -->
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >