2012-03-21 98 views
1

如果我有這樣一個模式:XML模式聲明根

<?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文件,只是一個元素?

如果我只想允許成爲根元素,該怎麼辦?

回答

1

您的模式將驗證包含根元素warlordwarbandwargroupwar的XML文件。

如果我正確理解你的問題,你想要的只是驗證包含根元素war的XML文件。要做到這一點,你應該修改的warlordwarbandwargroup的定義將被命名複雜類型 - 例如:

<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> 
+0

當時已經想通但很高興在這裏回答以備將來參考。 – 2012-03-26 10:30:10