如何为以下XML定义架构:
<root>
<elements>
<element1/>
<element2/>
<element1/>
</elements>
<elements>
<element2/>
<element1/>
</elements>
<elements>
<element1/>
<element2/>
</elements>
</root>
其中元素 element1 和 element2 的数量不受限制,并且它们可以按不同的顺序混合。它可能吗?或者我应该将XML重新定义为:
<root>
<elements>
<element type="1"/>
<element type="2"/>
<element type="1"/>
</elements>
<elements>
<element type="2"/>
<element type="1"/>
</elements>
<elements>
<element type="1"/>
<element type="2"/>
</elements>
</root>
答案 0 :(得分:1)
您的第一个结构的架构
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="elements">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="element1" />
<xs:element name="element2" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
第二个结构的模式定义
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="elements">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="element">
<xs:complexType>
<xs:attribute name="type" type="xs:unsignedByte" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
答案 1 :(得分:1)
根据Visual Studio架构生成器,您可以这样做:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="elements">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="element1" />
<xs:element name="element2" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>