2009-08-26 60 views
23

我試圖寫一個XML架構將驗證這一塊的xml:有兩個屬性和XML架構中的元素上的限制

<date isodate="2007-03-14">14 march 2007</date> 

屬性isodate應該有它的類型設置爲XS :日期和內容應該是最多50個字符長。

我不知道是否有可能寫的XML模式定義在一個塊中,像這樣也許:

<xs:element name="date" minOccurs="0" maxOccurs="1"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:restriction base="xs:string"> 
     <xs:minLength value="0"/> 
     <xs:maxLength value="50"/> 
     </xs:restriction> 
     <xs:attribute name="isodate" type="xs:date" use="required"/> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

上面的代碼不工作,我真的不能找出原因。唯一的解決辦法我發現是限制部分突破到一個單獨的類型,鏈接,像這樣:

<xs:simpleType name="reviewDate"> 
    <xs:restriction base="xs:string"> 
     <xs:minLength value="0"/> 
     <xs:maxLength value="50"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:element name="date" minOccurs="0" maxOccurs="1"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="reviewDate"> 
       <xs:attribute name="isodate" type="xs:date" use="required"/> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

我的問題是怎麼寫的定義在一個塊中,這樣的模式是有點更具可讀性,並且不在模式的其他部分引用類型。

+0

@Alexander:爲了正確格式化XML部分,突出顯示XML並單擊工具欄上的「代碼」按鈕(101 010)。這會讓你獲得良好的結果 - 使用反引號只能幫助一個單詞或一個短語 - 不會很好地跨越多條線。 – 2009-08-26 16:59:49

回答

15

您無法將限制和擴展程序合併到一個XSD塊中。您使用「ReviewDate」簡單類型的解決方案是我所知道的最佳解決方案。

馬克

相關問題