假设您在架构中有以下内容:
<xsd:complexType name="shape"/>
<xsd:complexType name="circle">
<xsd:complexContent>
<xsd:extension base="shape">
<xsd:attribute name="radius" type="xsd:double"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="arc">
<xsd:complexContent>
<xsd:extension base="circle">
<xsd:attribute name="startAngle" type="xsd:double"/>
<xsd:attribute name="endAngle" type="xsd:double"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
然后可以添加像这样的替换组
<xsd:element name="shape" type="shape" abstract="true"/>
<xsd:element name="circle" type="circle" substitutionGroup="shape"/>
<xsd:element name="arc" type="arc" substitutionGroup="shape"/>
然后通过引用组来接受任何类型:
<xsd:element ref="shape"/>
那部分不是问题。
但是,如果我也希望能够允许(在另一部分中)只是圈子及其子类型呢?
是否可以添加多个替换组以模拟架构中的正确继承?我尝试添加另一种元素类型:
<xsd:element name="shape" type="shape" abstract="true"/>
<xsd:element name="circle" type="circle" substitutionGroup="shape"/>
<xsd:element name="arc" type="arc" substitutionGroup="shape"/>
<xsd:element name="arc2" type="arc" substitutionGroup="circle"/>
但我不想根据我的期望改变预期元素的名称。
有更好的方法吗?
答案 0 :(得分:3)
您应该能够arc
替代circle
。无论您使用shape
的任何地方,circle
或arc
,然后应用,circle
,circle
或arc
。