说我在XSD中定义了这些类型:
<complexType name="NamedEntity">
<attribute name="ix" type="positiveInteger"></attribute>
<attribute name="sName" type="string"></attribute>
<attribute name="txtDesc" type="string"></attribute>
</complexType>
<complexType name="Node">
<complexContent>
<extension base="tns:NamedEntity">
</extension>
</complexContent>
</complexType>
<complexType name="Source">
<complexContent>
<extension base="tns:NamedEntity">
<attribute name="dt" type="dateTime"></attribute>
</extension>
</complexContent>
</complexType>
现在我要表示Node
元素可能包含零个或多个子元素,可能属于Node
或Source
类型。
如果我不得不以某种方式枚举子节点的允许类型,那就没关系了,但由于我有更多类型继承自NamedEntity
,如果我只能指定基类型,那就好了。
编辑: 我宁愿不在文档中使用xsi:type
,但在元素名称和类型之间存在明确的关系。相当多的XML处理似乎依赖于此,我也发现它更具可读性。
答案 0 :(得分:1)
如果可以避免,请不要使用xsi:type
。这是evil。好吧,也许我夸大了,但它确实无法在没有亲密模式知识的情况下解析文档,这在实践中已经足够糟糕了。
将帮助您:substitutionGroup
。
答案 1 :(得分:0)
在架构中,Node
元素包含零个或多个类型为NamedEntity
的子元素。在实际文档中,使用xsi:type
属性(xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
)为每个属性选择子类型("Node"
或"Source"
)。
答案 2 :(得分:0)
此可能超出了XSD的功能。您是否考虑过使用Schematron进行额外验证?
答案 3 :(得分:0)
我想你想要一个substitution group。