2011-10-27 97 views
2

我與XML架構初學者,我試圖解決一個(在我看來),而簡單的問題:我想在該表單與標籤XML架構:元素與屬性和文本有限制

<foo bar="123">some text</foo> 

即帶有文本和屬性的標籤。基本上,我知道如何用extension工具完成這項工作。這似乎相當不直觀,但工作。這是基本習慣用語:

<xs:element name="option"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="value" type="xs:string"> 
     </xs:attribute> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

但是,我也想對文字和屬性施加限制!文本不應超過一定的長度,並且該屬性應該在一定範圍內的整數中。我怎樣才能做到這一點?我使用擴展名時似乎不能對文本使用限制。

回答

2

使用<xs:restriction>代替擴展名。您可能需要單獨聲明簡單類型,並在其他結構中引用它們。

編輯:道歉我的時間。昨天參加了一些活動,就像往常一樣,事實證明你無法在我的國家的交通中找到任何地方,而且我遲到了,只能回頭尖叫和咒罵。我在晚上喝醉了。

但現在我清醒,即使在狀態,這是我設法拿出最好的:

<xs:element name="option"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:restriction base="optionType"> 
       <xs:maxLength value="10" /> 
      </xs:restriction> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="optionType"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
      <xs:attribute name="value"> 
       <xs:simpleType> 
        <xs:restriction base="xs:integer"> 
         <xs:minInclusive value="0" /> 
         <xs:maxInclusive value="10" /> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:attribute> 
     </xs:extension> 
    </xs:simpleContent> 
</xs:complexType> 

噢,我的天哪。所以顯然你應該對擴展進行限制。以上將限制元素option的內容爲最大長度爲10的字符串,並將屬性value限制爲[0,10]範圍內的整數。

是啊,這肯定是不是太詳細...

+0

但我*需要*使用''得到這個擺在首位的工作,如果我沒有誤會。 – dietr

+0

哦,XML Schema ...你爲什麼曾經從Hades中解脫出來?我現在需要離開,但稍後我會回頭看看是否有人提出了答案,如果不是,則進一步搜索。 –