首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML模式complexType在complexType中

XML模式complexType在complexType中
EN

Stack Overflow用户
提问于 2016-10-18 09:17:35
回答 1查看 1.5K关注 0票数 1

我正在为以下XML编写XSD:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<?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:' Sequence‘的内容必须匹配(注释?,(元素-elt-必须匹配-):’Sequence‘的内容必须匹配(注释?,(元素-组--选择序列)-任何)。从:ComplexType开始,发现了一个问题。”

如何在没有此错误的情况下包含接口?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 10:40:31

您必须(解决方案1)将<xsd:complexType>包装在<xsd:element>中,或者(解决方案2)在其他地方定义<xsd:complexType name="...">并使用<xsd:element type="...">引用它。complexType的目标是为您想要创建的任何元素(以及类型)定义一个内容模型。解决方案2有时更可取,因为它允许您重用(原样、扩展或限制)您定义的内容模型。

示例:

对于解决方案1:

代码语言:javascript
复制
  <xsd:element name="interface">
    <xsd:complexType>
       [... definition of the complexType ...]

对于解决方案2:

代码语言:javascript
复制
  <xsd:complexType name="WebServiceInterface">
       [... definition of the complexType ...]

终于:

因此,您可以这样更正您的模式:

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40104226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档