当我试图描述我们用来制作 RPC 的(自定义)XML 协议时,我将自己投入到 XSD 中。
一个简单的请求/响应对如下所示:
<command type="request" lineid="500477">
<request name="ping">
<node id="503456" device="meter"/>
</request>
</command>
<command type="response" lineid="500477">
<response name="ping">
<result>true</result>
</response>
</command>
以上是一个精简的示例,此外,请求节点可以包含参数元素列表,结果节点可以包含其他请求类型的更高级数据。
我试图用 XSD 描述上述内容,但我似乎无法弄清楚如何描述请求/响应的动态性质。
我试图扩展、继承和嵌套 xs:complexType,但似乎没有什么是“正确的方法”。
我目前的尝试:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="request">
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="command" mixed="true">
<xs:sequence>
<xs:element name="request" type="request"></xs:element>
</xs:sequence>
<xs:attribute name="type" type="commandtype" use="required"/>
<xs:attribute name="lineid" type="xs:string"/>
</xs:complexType>
<xs:simpleType name="commandtype">
<xs:restriction base="xs:string">
<xs:enumeration value="request"/>
<xs:enumeration value="response"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="command" type="command" />
</xs:schema>
即使在这个阶段,我也不知道如何在通用命令节点内同时允许请求和响应元素。
我应该如何用 XSD 描述上述内容?