我创建了一个XSD架构来验证通过序列化C#类生成的XML。
在我的第一个实现中,我使用了序列,但是这导致了XML中元素顺序的许多问题(如果元素以错误的顺序出现,则会导致验证错误)。所以我认为将每个xs:sequence更改为xs:all会很容易,但这根本不能解决问题,因为我想引用分组元素......
为了说明问题我刚刚创建了一个简单的例子;请参阅下面的XML模式定义。请考虑此模式仅用于描述我的问题,因此我不需要任何关于重新考虑XML结构的提示。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="PostalAddresses">
<xs:all>
<xs:element minOccurs="1" name="PostalAddres">
<xs:complexType>
<xs:all>
<xs:element name="Street" type="xs:string" />
<xs:element name="StreetNumber" type="xs:string" />
<xs:element name="ZipCode" type="xs:unsignedInt" />
<xs:element name="City" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:group name="AddressFields">
<xs:all>
<xs:element name="FirstName" type="xs:string" />
<xs:element name="LastName" type="xs:string" />
<xs:element name="BirthDate" type="xs:date" />
</xs:all>
</xs:group>
<xs:element name="Addresses">
<xs:complexType>
<xs:sequence>
<xs:group ref="AddressFields" />
<xs:element name="PostalAddresses" type="PostalAddresses"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
问题出现在Addresses
元素中,我无法将序列更改为all元素;我收到以下验证错误消息:组'ref'为'all'不是根粒子,或者它被用作扩展。