组中的“all”不是根粒子,或者它被用作扩展

时间:2013-10-30 13:08:10

标签: xml xsd

我创建了一个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'不是根粒子,或者它被用作扩展。

0 个答案:

没有答案