我有一个类型代表一些代币,这些代币对应于可以根据需要重复多次的颜色,或者根本不重复(colorType
),以及一个交错任意数量的元素(main
)出现的颜色和任意文字:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="colorType">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="red" type="xs:string"/>
<xs:element name="blue" type="xs:string"/>
</xs:choice>
</xs:complexType>
<xs:element name="main">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="color" type="colorType"/>
<xs:element name="text" type="xs:string" minOccurs="0"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
所以我可以这样做:
<main>
<text>Beginning</text>
<color><red/><blue/></color>
<text>Middle</text>
<color><red/></color>
<text>End</text>
</main>
我想做的是:
<main>
<text>Beginning</text>
<red/><blue/>
<text>Middle</text>
<red/>
<text>End</text>
</main>
换句话说,将colorType
保留为类型定义,以便可以在架构中的其他位置重复使用,但将该类型的元素“内联”作为main
定义的一部分元素的内容(即,不需要“color
”容器)。最终,颜色类型将成为具有各自属性的复杂元素(例如,“<red bright="true"/>
”)。
我还在学习XSD,所以任何指向正确方向的指针都会非常有用。
答案 0 :(得分:1)
我能够通过使用元素组代替colorType
的complexType来获得我想要的效果:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="colorType">
<xs:choice>
<xs:element name="red" type="xs:string"/>
<xs:element name="blue" type="xs:string"/>
</xs:choice>
</xs:group>
<xs:element name="main">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="colorType"/>
<xs:element name="text" type="xs:string" minOccurs="0"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<xs:group>
插入“内联”,引用它。