1

如果我有这样的架构:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema  targetNamespace="http://mysticwarlords.kaa/XMLSchema"
            xmlns="http://mysticwarlords.kaa/XMLSchema"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:simpleType name="titletype">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Warlord"/>
            <xs:enumeration value="FirstMate"/>
            <xs:enumeration value="Jester"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:element name="warlord">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="warlordName" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="title" type="titletype" />
        </xs:complexType>
    </xs:element>

    <xs:element name="warband">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="warbandName" type="xs:string" />
            <xs:element name="warlords">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="warlord" minOccurs="1" maxOccurs="unbounded">
                    <xs:unique name="eachTitleOnlyOnce">
                        <xs:selector xpath="warlord"/>
                        <xs:field xpath="@title"/>
                    </xs:unique>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="wargroup">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="wargroupName" type="xs:string" />
            <xs:element name="warlords">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="warlord" minOccurs="1" maxOccurs="10" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="war">
        <xs:complexType>
            <xs:choice>
              <xs:element ref="wargroup"/>
              <xs:element ref="warband"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

</xs:schema>

我猜它会验证一个只是一个元素的 xml 文件?

如果我只想允许成为根元素怎么办?

4

1 回答 1

1

您的架构将验证包含根元素warlordor warbandor wargroupor的 XML 文件war

如果我正确理解您的问题,您想要的是仅验证包含根元素的 XML 文件war。为此,您应该修改 和 的定义warlordwarband并将wargroup其命名为复杂类型 - 例如:

  <xs:complexType name="warlord"> 
      <xs:sequence> 
          <xs:element name="warlordName" type="xs:string"/> 
      </xs:sequence> 
      <xs:attribute name="title" type="titletype" /> 
  </xs:complexType> 

然后使用这种类型而不是ref- 例如:

<xs:element name="war">   
    <xs:complexType>   
        <xs:choice>   
          <xs:element name="wargroup" type="wargroup"/>   
          <xs:element name="warband" type="warband"/>   
        </xs:choice>   
    </xs:complexType>   
</xs:element>   
于 2012-03-24T23:21:07.570 回答