【发布时间】:2018-03-26 21:53:50
【问题描述】:
我有以下 XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/MessageSchema" xmlns="http://www.example.org/MessageSchema"
elementFormDefault="qualified">
<xs:element name="message">
<xs:complexType>
<xs:choice>
<xs:group ref="loginMessage"/>
<xs:group ref="fooMessage"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:group name="loginMessage">
<xs:sequence>
<xs:element name="operation" type="xs:string" minOccurs="1" maxOccurs="1" fixed="Login"/>
<xs:element name="login" type="loginType" />
</xs:sequence>
</xs:group>
<xs:group name="fooMessage">
<xs:sequence>
<xs:element name="operation" type="xs:string" minOccurs="1" maxOccurs="1" fixed="Foo"/>
<xs:element name="foo" type="fooType" />
</xs:sequence>
</xs:group>
<xs:complexType name="loginType">
<xs:sequence>
<xs:element name="token" type="xs:string" />
<xs:element name="nickName" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="fooType">
<xs:sequence>
<xs:element name="bar" type="xs:string" />
<xs:element name="num" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:schema>
我希望能够拥有像以下示例一样的 XML:
<!--Example 1-->
<?xml version="1.0" encoding="UTF-8"?>
<mensaje xmlns="http://www.example.org/MessageSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/MessageSchema MessageSchema.xsd">
<operation>Login</operation>
<login>
<token>asda8987</token>
<nickName>Test</nickName>
</login>
</mensaje>
<!--Example 2-->
<?xml version="1.0" encoding="UTF-8"?>
<mensaje xmlns="http://www.example.org/MessageSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/MessageSchema MessageSchema.xsd">
<operation>Foo</operation>
<foo>
<bar>bar</bar>
<num>100</num>
</foo>
</mensaje>
我的目标是根据消息结构强制操作元素具有固定值,但我得到了一个独特的粒子属性。我完全理解操作标签中的歧义,但同时我无法找到一种方法来强制我的结构限制。由于操作标签具有不同的固定值,因此我希望验证不会失败,因此应该加以区分。
【问题讨论】:
标签: xml validation xsd choice