我正在定义一个包含多个复杂元素的xsd,它们在不同元素下重复相似的结构。 样品:
<keys>
<add-key>
<add key="new key" value="v1">
</add-key>
<del-key>
<add key="bad key" value="v2">
</del-key>
</keys>
定义以下内容的正确方法是什么?我在使用这段代码时无法解析模式。
<xs:complexType name="keyType">
<xs:sequence maxOccurs="unbounded">
<xs:element name="add">
<xs:complexType>
<xs:attributeGroup ref="keyAttributeGroup"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:attributeGroup name="keyAttributeGroup">
<xs:attribute name="key" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:attributeGroup>
答案 0 :(得分:2)
如果您事先知道类型keyType 的元素可能具有(add-key, del-key
)的所有名称,那么可能的解决方案是使用一个未命名的选择:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="keys">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="add-key" type="keyType" />
<xs:element name="del-key" type="keyType" />
</xs:choice>
</xs:complexType>
</xs:element>
<xs:complexType name="keyType">
<xs:sequence maxOccurs="unbounded">
<xs:element name="add">
<xs:complexType>
<xs:attributeGroup ref="keyAttributeGroup" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:attributeGroup name="keyAttributeGroup">
<xs:attribute name="key" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:attributeGroup>
</xs:schema>
如果元素可以有任何随机名称(add-key, del-key, whatever
),那么我知道最接近的解决方案是使用xs:any
。