2014-01-29 109 views
0

我需要創建.xsd模式,並指定屬性。我該怎麼做?XSD屬性指定

<?xml version="1.0" encoding="UTF-8"?> 
<ConfigData> 
    <GlobalSettings>  
     <Logging param="Off"/> <-- param can be only in 'On' or 'Off' statement --> 
    </GlobalSettings> 
</ConfigData> 

我創造了這樣的事情,但它不`噸工作

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="ConfigData"> 
    <xs:complexType> 
     <xs:element name="GlobalSettings"> 
      <xs:complexType>    
      <xs:simpleType name="statement"> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="On"/> 
        <xs:enumeration value="Off"/> 
       </xs:restriction> 
      </xs:simpleType> 
      <xs:element name="Logging"> 
       <xs:complexType> 
        <xs:extension base="xs:string"> 
         <xs:attribute name="param" type="statement" use="required"/> 
        </xs:extension> 
       </xs:complexType> 
      </xs:element> 
      </xs:complexType> 
     </xs:element> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

如果你得到這個接受它作爲答案請問 – Naren

+0

你的問題的答案是否幫助你? –

回答

1
<price currency="euros">20000.00</price> 

限制貨幣屬性,以下列操作之一:

euros 
pounds 
dollars 


<xs:simpleType name="curr"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="pounds" /> 
    <xs:enumeration value="euros" /> 
    <xs:enumeration value="dollars" /> 
    </xs:restriction> 
</xs:simpleType> 



<xs:element name="price"> 
     <xs:complexType> 
      <xs:extension base="xs:decimal"> 
       <xs:attribute name="currency" type="curr"/> 
      </xs:extension> 
     </xs:complexType> 
</xs:element> 
+0

屬性是可選的,因此''也是有效的。爲了防止這種情況,您可以在'

+0

我需要在哪裏粘貼「simpleType」容器?我編輯的問題,以顯示我做了什麼,但它不正確 – user3248822

+0

你說得對嗎? – Naren

0

如果你定義一個新的simpleType並且您想從其他位置引用它,則需要在頂層定義它,直接在<xs:schema>元素。

你的架構已經超出簡單類型的其他問題:你不能定義另一<xs:element>直屬<xs:complexType>,而首先需要說你是否要一個<xs:sequence><xs:choice><xs:all>。在你的情況下,結果是相同的,因爲在GlobalSettings下只有一個<GlobalSettings>元素在<ConfigData>下,並且有一個<Logging>元素。所以我們來挑選<xs:sequence>

模式就變成了:

<xs:simpleType name="onOffType"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="On" /> 
     <xs:enumeration value="Off" /> 
    </xs:restriction> 
</xs:simpleType> 

<xs:element name="ConfigData"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="GlobalSettings"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="Logging"> 
          <xs:complexType> 
           <xs:attribute name="param" type="onOffType" use="required" /> 
          </xs:complexType> 
         </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

這將驗證您輸入的文件,並提出了一個驗證錯誤,如果你的<Logging>元素的param屬性的值大於其他任何東西