XS: Выбор, встроенный в XS: Последовательность предотвращает использование объединения
-
09-10-2019 - |
Вопрос
У меня есть следующие 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
или последовательность с newID
а также testID
. Отказ Когда я компилирую это с wsdl2h
от gsoap
Я принимаю сообщение:
Примечание:
<xs:choice>
с встроенным<xs:sequence>
или<xs:group>
предотвращает использование союза
Вышеприведенный XSD правильный?
Решение
В общем тип XML myID
можно объявить, как вы описали. Конфликт существует, вероятно, в связи с вашим определением типов priv:testID
а также priv: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>
будет правильным. Так что, если ошибка существует, она не в том порядке, которую вы опубликовали.
Не связан с StackOverflow