gpt4 book ai didi

具有多重继承的 XML 模式

转载 作者:数据小太阳 更新时间:2023-10-29 01:39:00 31 4
gpt4 key购买 nike

是否可以在 XML 模式中进行多重继承,如果可以,如何实现?

例子

<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 包含(惊喜)一个 Account 元素和一个 Customer 元素。

关于具有多重继承的 XML 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198755/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com