【问题标题】:XML schema complexType within an complexTypecomplexType 中的 XML 模式 complexType
【发布时间】:2016-10-18 09:17:35
【问题描述】:

我正在为以下 XML 编写 XSD:

<?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-must-match.1: 'sequence' 的内容必须 匹配(注释?,(元素 | 组 | 选择 | 序列 | 任何)*)。一种 发现问题始于:ComplexType。”

如何在不出现此错误的情况下包含接口?

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    您必须(解决方案 1)将 &lt;xsd:complexType&gt; 包装在 &lt;xsd:element&gt; 中,或(解决方案 2)在别处定义 &lt;xsd:complexType name="..."&gt; 并使用 &lt;xsd:element type="..."&gt; 引用它。 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>
    

    【讨论】:

    • Cvc-complex-type.2.4.a:发现以元素“return”开头的无效内容。需要“{exceptions}”之一。“11”行,“13”列。
    • 查看您提供的代码,我没有发现返回元素有任何问题,而且它似乎与 XML 匹配,所以我可以就上述错误提供一些建议吗?跨度>
    • 这是因为您输入的 XML:&lt;abstract_method name="login"&gt; 缺少 &lt;exceptions&gt; 标记。如果&lt;exceptions&gt; 是可选的,您应该更改架构:&lt;xsd:element name="exceptions" minOccurs="0"&gt;
    • 有什么方法可以避免这个错误而不包括异常标签,因为第一种方法不包括异常?
    • 是的,有——见前一条评论。
    猜你喜欢
    • 2011-11-28
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    相关资源
    最近更新 更多