XML-RPC Schema .xsd

时间:2013-03-25 16:45:28

标签: xml xsd xml-rpc

是否有人拥有或知道如何编辑XSD以进行XML-RPC方法调用?

我找到了这个: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元素可以包含数据OR元素,但不能包含两者的混合。

Anywho,如果有人知道如何解决上述问题或者他们可以提供的xsd工作,那将非常感激。

1 个答案:

答案 0 :(得分:1)

使用XSD 1.0无法描述您想要的内容;从概念上讲,你想要的是内容模型的“联合”:仅文本和仅元素。

如果您可以采用其他方式,例如添加Schematron或转移到XSD 1.1(支持不足),请使用其他信息更新您的问题。