2011-09-21 92 views
8

在相同的元素的屬性的驗證我想驗證的元素「測試」應內容限制和XSD

  • 具有其含量受限制的(例如,使用圖案限制),和
  • 包含某些屬性(例如,'id','class'和'name')。

的XSD我在寫這個樣子的:

<xsd:element name="Test" minOccurs="0" maxOccurs="unbounded"> 
    <xsd:complexType mixed="true"> 
    <xsd:simpleContent> 
     <xsd:restriction> 
     <xsd:pattern value="xyz"/> 
     </xsd:restriction> 
    </xsd:simpleContent> 
    <xsd:attribute name="id" type="xsd:string"></xsd:attribute> 
    <xsd:attribute name="class" type="xsd:string"></xsd:attribute> 
    <xsd:attribute name="name" type="xsd:string"></xsd:attribute> 
    </xsd:complexType> 
</xsd:element> 

然而,當我在Visual Studio代碼,我得到了以下錯誤的 '的xsd:屬性' 元素:

「屬性」和內容模型是相互排斥的

有沒有辦法來驗證這兩個內容限制屬性在同一個元素上?

回答

13

您需要分離出您的限制並給它一個名稱,然後將其稱爲擴展的基本類型。像這樣:

<xsd:simpleType name="RestrictedString"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:pattern value="xyz" /> 
    </xsd:restriction> 
    </xsd:simpleType> 
    <xsd:element name="Test"> 
    <xsd:complexType> 
     <xsd:simpleContent> 
     <xsd:extension base="RestrictedString"> 
      <xsd:attribute name="id" type="xsd:string" /> 
      <xsd:attribute name="class" type="xsd:string" /> 
      <xsd:attribute name="name" type="xsd:string" /> 
     </xsd:extension> 
     </xsd:simpleContent> 
    </xsd:complexType> 
    </xsd:element> 
+0

謝謝!這工作完美。這也很方便,因爲我想在其他地方重新使用限制。順便說一句 - 我有多行內容的問題,但通過在模式後面添加''來解決這些問題。 – Jonathan