xs: choice in xs eingebettet: Sequenz verhindert die Verwendung einer Union
-
09-10-2019 - |
Frage
Ich habe folgendes 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>
Alles ist unter priv
Namespace. Das Problem ist, dass es sieht aus wie das myID
eine Vereinigung ist. Es könnte eine testID
oder eine Sequenz mit newID
und testID
sein. Wenn ich es mit wsdl2h
von gsoap
kompilieren Ich nehme die Meldung:
Hinweis:
<xs:choice>
mit eingebetteten<xs:sequence>
oder<xs:group>
verhindert die Verwendung einer Vereinigung
Ist die oben XSD korrekt?
Lösung
Im allgemeinen XML-Typ myID
kann erklärt werden, wie Sie beschrieben. Der Konflikt existiert wahrscheinlich im Zusammenhang mit Ihrer Definition der Typen priv:testID
und priv:testID
die Definition nicht enthalten. Zum Beispiel das Schema
<?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>
wird richtig sein. Also, wenn ein Fehler existieren, es ist nicht in dem Teil, das Sie auf dem Laufenden.