2016-10-18 26 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