xs:xs中嵌入的选择:序列阻止使用联合

时间:2010-10-18 20:25:30

标签: web-services soap xsd gsoap xsd-validation

我有以下xsd

<xsd:complexType name="myID">
    <xsd:choice>
        <xsd:element name="testID" type="priv:testID"/>
        <xsd:sequence>
            <xsd:element name="newID" type="priv:newID"/>
            <xsd:element name="testID" type="priv:testID" minOccurs="0"/>
        </xsd:sequence>
    </xsd:choice>
</xsd:complexType>

所有内容都在priv命名空间下。问题是看起来myID是一个联盟。它可能是testID或带有newIDtestID的序列。当我使用来自wsdl2h的{​​{1}}进行编译时,我正在接收消息:

  

注意:gsoap已嵌入   <xs:choice><xs:sequence>   阻止使用联合

以上XSD是否正确?

1 个答案:

答案 0 :(得分:0)

通常,XML类型myID可以按照您的描述进行声明。存在冲突可能与您对类型priv:testIDpriv:testID的定义有关,而这些类型不包括在内。例如架构

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema targetNamespace="http://www.ok-soft-gmbh.com/xml/xsd/1.0/XMLSchema.xsd"
    elementFormDefault="qualified"
    xmlns:priv="http://www.ok-soft-gmbh.com/xml/xsd/1.0/XMLSchema.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
    <xsd:simpleType name="testID">
        <xsd:restriction base="xsd:string"/>
    </xsd:simpleType>
    <xsd:simpleType name="newID">
        <xsd:restriction base="xsd:string"/>
    </xsd:simpleType>
    <xsd:complexType name="myID">
        <xsd:choice>
            <xsd:element name="testID" type="priv:testID"/>
            <xsd:sequence>
                <xsd:element name="newID" type="priv:newID"/>
                <xsd:element name="testID" type="priv:testID" minOccurs="0"/>
            </xsd:sequence>
        </xsd:choice>
    </xsd:complexType>
    <xsd:element name="root" type="priv:myID"/>
</xsd:schema>

是正确的。因此,如果存在错误,则不在您发布的部分中。