【发布时间】:2013-03-25 16:45:28
【问题描述】:
是否有人拥有或知道如何编辑用于 XML-RPC 方法调用的 XSD?
我找到了这个:MSDN Xml Rpc Schema
但是它不允许有效的 XML-RPC 案例。似乎不对的一点是:
<xsd:complexType name="ValueType" mixed="true">
<xsd:choice>
<xsd:element name="i4" type="xsd:int" />
<xsd:element name="int" type="xsd:int" />
<xsd:element name="string" type="ASCIIString" />
<xsd:element name="double" type="xsd:decimal" />
<xsd:element name="Base64" type="xsd:base64Binary" />
<xsd:element name="boolean" type="NumericBoolean" />
<xsd:element name="dateTime.iso8601" type="xsd:dateTime" />
<xsd:element name="array" type="ArrayType" />
<xsd:element name="struct" type="StructType" />
</xsd:choice>
</xsd:complexType>
根据the XML-RPC spec,以下是有效的:
...
<value>example text</value>
....
因为如果没有提供类型元素,<value> 元素内的文本默认为字符串。但是上面的 xsd 不会验证它。
我尝试将其更改为:
<xsd:complexType mixed="true" name="ValueType">
<xsd:choice minOccurs="0" maxOccurs="1">
<xsd:element name="i4" type="xsd:int" />
<xsd:element name="int" type="xsd:int" />
<xsd:element name="string" type="ASCIIString" />
<xsd:element name="double" type="xsd:decimal" />
<xsd:element name="Base64" type="xsd:base64Binary" />
<xsd:element name="boolean" type="NumericBoolean" />
<xsd:element name="dateTime.iso8601" type="xsd:dateTime" />
<xsd:element name="array" type="ArrayType" />
<xsd:element name="struct" type="StructType" />
</xsd:choice>
</xsd:complexType>
但这允许:<value>testtext<string>with more text</string></value> 根据规范不应该是有效的。
我在尝试使 Value 元素可以包含数据或元素,但不能同时包含两者时遇到了麻烦。
如果有人知道如何解决上述问题或有他们可以提供的可用 xsd,将不胜感激。
【问题讨论】: