2016-10-18 30 views
1

我寫XSD以下XML:XML模式complexType

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="WS.xslt" ?> 
<interface name="WS"> 
    <package>com.example</package> 
    <import>java.rmi.RemoteException</import> 
    <import>java.io.*</import> 
     <abstract_method name="login"> 
      <modifier>public</modifier> 
      <arguments> 
       <parameter type="int">id</parameter> 
       <parameter type="String">pass</parameter> 
      </arguments> 
      <return>boolean</return> 
     </abstract_method> 
     <abstract_method name="send"> 
      <modifier>private</modifier> 
      <arguments> 
       <parameter type="String">subject</parameter> 
       <parameter type="String">message</parameter> 
      </arguments> 
      <exceptions> 
       <exception>IOException</exception> 
       <exception>RemoteException</exception> 
      </exceptions> 
      <return>void</return> 
     </abstract_method> 
</interface>   

我現在的XSD:

<?xml version="1.0"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:complexType name ="WebServiceInterface"> 
    <xsd:sequence> 
    <xsd:element name ="package" type="xsd:string"/> 
    <xsd:element name ="import" minOccurs="0" maxOccurs="unbounded"/> 
    <xsd:complexType name ="abstract_method" minOccurs="0" maxOccurs= "unbounded"> 
     <xsd:element name ="modifier" type="xsd:string"/> 
     <xsd:complexType name="arguments"> 
      <xsd:element name ="parameters" minOccurs="0" maxOccurs= "unbounded"/> 
     </xsd:complexType> 
     <xsd:complexType name ="exceptions"> 
      <xsd:element name ="exception" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:complexType> 
     <xsd:element name = "return"/> 
    </xsd:complexType> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema> 

錯誤消息:

「S4S-elt-必須匹配1:'序列'的內容必須爲 匹配(註釋?,(元素|組|選擇|序列|任何)*)。A 問題是發現始於:ComplexType「。

如何在沒有此錯誤的情況下包含界面?

回答

1

必須要麼(溶液1)包裹<xsd:complexType><xsd:element>或(溶液2)定義<xsd:complexType name="...">別處,並且是指其與<xsd:element type="...">。 complexType旨在爲要創建(和類型)的任何元素定義內容模型。解決方案2有時更受歡迎,因爲它允許您重用(原樣或擴展或限制)您定義的內容模型。

實例:

對於溶液1:

<xsd:element name="interface"> 
    <xsd:complexType> 
     [... definition of the complexType ...] 

對於溶液2:

<xsd:complexType name="WebServiceInterface"> 
     [... definition of the complexType ...] 

最後:

因此,你可以糾正你的模式,它的方式:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

    <xsd:element name="interface" type="WebServiceInterface"/> 

    <xsd:complexType name="WebServiceInterface"> 
     <xsd:sequence> 
      <xsd:element name="package" type="xsd:string"/> 
      <xsd:element name="import" minOccurs="0" maxOccurs="unbounded"/> 
      <xsd:element name="abstract_method" minOccurs="0" maxOccurs="unbounded"> 
       <xsd:complexType> 
        <xsd:sequence> 
         <xsd:element name="modifier" type="xsd:string"/> 
         <xsd:element name="arguments"> 
          <xsd:complexType> 
           <xsd:sequence> 
            <xsd:element name="parameter" minOccurs="0" maxOccurs="unbounded"/> 
           </xsd:sequence> 
          </xsd:complexType> 
         </xsd:element> 
         <xsd:element name="exceptions"> 
          <xsd:complexType> 
           <xsd:sequence> 
            <xsd:element name="exception" minOccurs="0" maxOccurs="unbounded"/> 
           </xsd:sequence> 
          </xsd:complexType> 
         </xsd:element> 
         <xsd:element name="return"/> 
        </xsd:sequence> 
        <xsd:attribute name="name" type="xsd:string"/> 
       </xsd:complexType> 
      </xsd:element> 
     </xsd:sequence> 
     <xsd:attribute name="name" type="xsd:string"/> 
    </xsd:complexType> 

</xsd:schema> 
+0

CVC-複雜type.2.4.a:無效的含量也開始將元素「迴歸」。其中一個'{例外}'是預期的。行'11',列'13'。 – Gavin

+0

看着你所提供的代碼,我沒有看到任何與return元素有關的問題,它似乎與XML匹配,所以我可能對上述錯誤有一些建議嗎? – Gavin

+0

這是因爲您輸入的XML:'缺少''標籤。如果''是可選的,你應該改變模式:' potame