2014-10-19 122 views
2

我做錯了什麼? XLS:xsd:屬性的選擇組

<note> 
    <element action="SomeAction" id="1" /> 
</note> 

的xsd:

<xs:element name="note"> 
     <xs:complexType> 
      <xs:choice minOccurs ="0"> 
      <xs:group ref="with_attr" /> 
      <xs:group ref ="without_attr" /> 
      </xs:choice> 
     </xs:complexType> 
     </xs:element> 
     <xs:group name="with_attr"> 
     <xs:sequence > 
      <xs:element name="element"> 
      <xs:complexType> 
       <xs:attributeGroup ref="actionattrib" /> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:group> 
     <xs:group name="without_attr"> 
     <xs:sequence > 
      <xs:element name="element"> 
      <xs:complexType> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:group> 
    <xs:attributeGroup name ="actionattrib"> 
    <xs:attribute name="action" type="action_value" use="required"/> 
    <xs:attribute name="parameter" type="id_value" use="required"/> 
    </xs:attributeGroup> 
     <xs:simpleType name="action_value" > 
     <xs:restriction base="xs:token"> 
      <xs:enumeration value="SomeAction"/> 
     </xs:restriction> 
     </xs:simpleType> 
     <xs:simpleType name="id_value" > 
     <xs:restriction base="xs:token">" 
      <xs:enumeration value="1"/> 
     </xs:restriction> 
     </xs:simpleType> 

我儘量讓裁定元素note可以包含元素<element>與屬性actionid,這將是具有列表值,或者element沒有任何屬性將也是正確的,但element不能包含其他屬性或只有屬性idaction中的一個。 錯誤是:屬性action這裏不允許使用

回答

1

正確的XML是...我validatied以下XML通過XMLSpear

<note> 
    <element action="SomeAction" parameter="1"/> 
</note> 

如果你想用你的XML,你應該改變在XSD ..

<xs:attributeGroup name ="actionattrib"> 
    <xs:attribute name="action" type="action_value" use="required"/> 
    <xs:attribute name="id" type="id_value" use="required"/> 
</xs:attributeGroup> 

我用這個XSD驗證XML。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
    <xs:element name="note"> 
     <xs:complexType> 
      <xs:choice minOccurs="0"> 
       <xs:group ref="with_attr"/> 
       <xs:group ref="without_attr"/> 
      </xs:choice> 
     </xs:complexType> 
    </xs:element> 
    <xs:group name="with_attr"> 
     <xs:sequence> 
      <xs:element name="element"> 
       <xs:complexType> 
        <xs:attributeGroup ref="actionattrib"/> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:group> 
    <xs:group name="without_attr"> 
     <xs:sequence> 
      <xs:element name="element"> 
       <xs:complexType> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:group> 
    <xs:attributeGroup name="actionattrib"> 
     <xs:attribute name="action" type="action_value" use="required"/> 
     <xs:attribute name="parameter" type="id_value" use="required"/> 
    </xs:attributeGroup> 
    <xs:simpleType name="action_value"> 
     <xs:restriction base="xs:token"> 
      <xs:enumeration value="SomeAction"/> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="id_value"> 
     <xs:restriction base="xs:token"> 
      <xs:enumeration value="1"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

你的問題是標籤<element>的屬性id,因爲你已經聲明爲參數。

+0

所以它是命名空間的問題? – user3546748 2014-10-19 20:47:45

+0

id是好的,我寫錯了,當我寫在這裏,但問題,我不能改變XML文件,只有頭。我用rubymine查看錯誤,它仍然顯示我,它可以寫和一個完整的xsd(與標題)也許問題在那裏.. – user3546748 2014-10-20 07:15:43

+0

我更新了我的答案與我使用完整的XSD。 – Xstian 2014-10-20 07:41:37