2013-03-25 113 views
2

有沒有人有過或者知道如何編輯XSD以進行XML-RPC方法調用?XML-RPC Schema .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元素可以包含數據或元素,但不是兩者的混合。

Anywho,如果有人知道如何解決上述問題或有一個他們可以提供的工作xsd,將非常感激。

回答

1

你想要什麼是不能用XSD 1.0描述;從概念上講,你想要的是內容模型的「聯合」:僅限文本和元素。

如果您可以採用其他方式,例如添加Schematron或移動到XSD 1.1(支持不良),請更新您的問題並附加其他信息。

+0

啊,我對xsd的知識有限,並且非常感謝您指出我們以前的失敗嘗試時發禿。我已經切換到使用RELAXng架構,似乎做了我需要的一切。謝謝 – DJOodle 2013-03-26 13:45:59

相關問題