xml - 在 XSD 中扩展复杂类型的示例?
问题描述
我正在尝试在元素中使用数据而不破坏该元素现有合同。
让我们简化一下我的情况:
<xs:element name="ExistingContract">
<xs:complexType>
<xs:sequence>
<xs:element name="first" type="FirstType"/>
<xs:element name="second" type="SecondType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="NewContract">
<xs:complexType>
<xs:sequence>
<xs:element name="first" type="FirstType"/>
<xs:element name="second" type="SecondType"/>
<xs:element name="additionalData" type="AdditionalDataType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
这两种内部类型是重复的,我想避免它。由于内部数据没有任何现有的包装xs:complexType
,我可以将其取出ExistingContract
并在我的NewContract
. 但随后我将违反第一份合同(我不想这样做)。
您是否熟悉任何可以保持第一个合同不变并将其内部数据提取到我的新合同的 XSD 方法?
解决方案
您可以使用xs:extension
扩展NewContractType
自ExistingContractType
:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ExistingContract" type="ExistingContractType"/>
<xs:complexType name="ExistingContractType">
<xs:sequence>
<xs:element name="first" type="FirstType"/>
<xs:element name="second" type="SecondType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="NewContractType">
<xs:complexContent>
<xs:extension base="ExistingContractType">
<xs:sequence>
<xs:element name="additionalData" type="AdditionalDataType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="NewContract" type="NewContractType"/>
<xs:complexType name="FirstType"/>
<xs:complexType name="SecondType"/>
<xs:complexType name="AdditionalDataType"/>
</xs:schema>
推荐阅读
- winapi - winapi - 检测编辑控件上的鼠标按钮事件
- python - 在 python 中打印数字金字塔模式
- python - Python ; Tkinter 光标边框
- amazon-ec2 - 如何允许实例访问负载均衡器中的端口
- python - 错误“时间”未定义:UndefinedVariable
- bash - 如何找出存储库中存在哪些“主”或“主”分支?
- symfony - Symfony 测试是否有 flashmessages
- javascript - 无法让 Packery 库工作(未捕获的类型错误:$(...).packery 不是函数)
- javascript - socket.io 中超出了最大调用堆栈大小
- heroku - 进程调度程序 [Heroku]