2014-10-19 76 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