xsd:选择属性组

时间:2014-10-19 09:59:56

标签: xml xsd

我错了什么? XLS:

 <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 个答案:

答案 0 :(得分:1)

正确的XML是......我通过XMLSpear

在XML下面验证了
<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>

您的问题出在代码id的属性<element>上,因为您已将其声明为参数。