是否可以在XML Schema中根据一个属性定义具有多个不同定义的相同元素。
例如:
<xsd:element name="Element">
<xsd:complexType>
<xsd:sequence>
<xsd:attribute name="type" fixed="type1"/>
<xsd:seqeuence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Element">
<xsd:complexType>
<xsd:sequence>
<xsd:attribute name="type" fixed="type2"/>
<xsd:attribute name="value" type="xsd:integer"/>
<xsd:seqeuence>
</xsd:complexType>
</xsd:element>
<xsd:element name="RootElement">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Element"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
或者还有其他方法可以解决这个问题。 重要的是两个定义都被命名为“Element”,因为我有一个应用程序需要两个元素以相同的方式命名。但是还有第二个应用需要type2的附加信息。
答案 0 :(得分:0)
考虑删除type
属性,只定义两个具有您希望的不同结构的子节点。
这样你可以拥有
<Element>
<ElementType1>
<!--whatever-->
</ElementType1>
</Element>
和
<Element>
<ElementType2 value="42">
<!--whatever-->
</ElementType1>
</Element>
在同一份文件中。
在Element
:
<!ELEMENT Element (ElementType1?)> <!-- the ? means 1 or 0 -->
<!ELEMENT Element (ElementType2?)>
或者更确切地说,如果Element
下只允许一个Element
而且<!ELEMENT Element (ElementType1 | ElementType1)>
不允许为空:
{{1}}
您可以阅读有关DTD element operators的更多信息。
答案 1 :(得分:0)
如果您使用的是XML Schema 1.1,则可以使用type alternatives。对于XML Schema 1.0,请查看xsi:type
或Schematron等附加组件。