<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>
,其中属性action
和id
将具有列表中的值,或element
没有任何属性也是正确的,但element
不能包含其他属性,或只包含其中一个属性id
或action
。
错误是:此处不允许属性action
答案 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>
上,因为您已将其声明为参数。