XML 模式中是否可以具有多重继承,如果可以,如何实现?
Example
<xs:schema xmlns:xs="http://www.w3.org/2001/Schema" ....>
<xs:complexType name="Account">
<xs:sequence>
<xs:element name="balance" type="xs:decimal"/>
<xs:element name="accountNo" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CreditCardAccount">
<xs:complexContent>
<xs:extension base="Account">
<xs:sequence>
<xs:element name="expiryDate" type="xs:date"/>
<xs:element name="issuer" type="xs:string"/>
<xs:element name="type" type="xs:string" use="required"/>
</xs:sequence>
</xs:extension>
<xs:complexContent>
</xs:complexType>
</xs:schema>
我的问题是; CreditCardAccount 是否可以继承多种类型而不是仅继承 Account?
在某些方面类似于多重继承的东西可以使用命名模型组和命名属性组进行管理;它是否以您想要的方式类似于多重继承只有您自己才能判断。
假设您有复杂类型 Account(如上所示)和 Customer,并且您希望复杂类型 CreditCardAccount 从它们中的每一个继承。正如其他人指出的那样,您不能在复杂类型定义中指定两个基本类型。但是您可以将 Account 和 Customer 类型的内容模型打包到命名模型组中,并从类型定义中引用适当的命名组。
<xs:group name="Account">
<xs:sequence>
<xs:element name="balance" type="xs:decimal"/>
<xs:element name="accountNo" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:group name="Customer">
<xs:sequence>
<xs:element name="custid" type="xs:int"/>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="phone" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:complexType name="Account">
<xs:sequence>
<xs:group ref="Account"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Customer">
<xs:sequence>
<xs:group ref="Customer"/>
</xs:sequence>
</xs:complexType>
然后您可以从 CreditCardAccount 引用这两个命名组:
<xs:complexType name="CreditCardAccount">
<xs:sequence>
<xs:group ref="Account"/>
<xs:group ref="Customer"/>
<xs:element name="expiryDate" type="xs:date"/>
<xs:element name="issuer" type="xs:string"/>
<xs:element name="type" type="xs:string"/>
</xs:sequence>
</xs:complexType>
在这种情况下,XSD 验证器不会将 Customer、Account 和 CreditCardAccount 类型视为相关的,这可能重要也可能不重要。
当然,更简单的方法是将元素用作信息包,并定义元素 Account、Customer 和 CreditCardAccount,其中 CreditCardAccount 包含 (surprise) 一个帐户元素和一个客户元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)