Проблема абстрактного типа схемы XSD - PullRequest
2 голосов
/ 12 мая 2011

У меня проблема с файлом схемы xsd.

В моей схеме есть этот абстрактный сложный тип:

<complexType name="Action" abstract="true">
    <sequence>
        <element name="actionType">
            <complexType>
                <choice>
                    <element name="ALARMACTION"/>
                    <element name="REPORTDATAACTION"/>
                    <element name="ENABLEOBSERVATIONACTION"/>
                    <element name="DISABLEOBSERVATIONACTION"/>
                    <element name="SETOBSERVATIONSCHEDULEACTION"/>
            <element name="VERIFYOVERTIMEACTION"/>
                </choice>
            </complexType>
        </element>
    </sequence>
</complexType>

Это конкретная реализация абстрактного элемента Action:

<complexType name="AlarmAction">
    <complexContent>
        <extension base="ref:Action">
            <sequence>
                <element name="alarmCode" type="integer"/>
                <element name="report" type="string"/>
            </sequence>
        </extension>
    </complexContent>
</complexType>

Этот элемент ссылается на абстрактный элемент Action:

<complexType name="Conclusion">
    <sequence>
        <element minOccurs="0" name="observationSet" type="ref:ObservationSet"/>
        <element name="action" type="ref:Action"/>
    </sequence>
</complexType>

Я получил ошибку с этим экземпляром xml:

            <Conclusion>
                <observationSet>
                    <observationPhenomenum>HIGH_HEARTBEAT</observationPhenomenum>
                </observationSet>
                <action>
                    <actionType>
                        <ENABLEOBSERVATIONACTION></ENABLEOBSERVATIONACTION>
                    </actionType>
                <observationId>1</observationId>
                <observationId>2</observationId>
                </action>
        </Conclusion>

Ошибка в netbeans такова: cvc-type.2: определение типа не может быть абстрактным для действия элемента. [104]

Может ли кто-нибудь мне помочь?

Ответы [ 3 ]

5 голосов
/ 15 октября 2011

Я предполагаю, что схема действительна;у вас есть где-то определение глобального элемента с локальным именем «Заключение» и неабстрактного сложного типа, производного от Action, с повторяющимися visionId элементами (например, XYZAction ).

Ваша проблема затем решается, если вы добавите xsi: type = " XYZAction " в качестве атрибута для вашего действия элемент.Опять же, значение атрибута должно совпадать с именем неабстрактного типа, которое происходит от абстрактного действия.

Мой совет вам, если вы сомневаетесь, используйте инструмент для генерации образца XML для сценария, который вы используете.иметь в виду.Я использую QTAssistant , поскольку он позволяет мне легко создавать любые сценарии, которые можно себе представить, используя простое перетаскивание элементов схемы XML.

4 голосов
/ 12 апреля 2013

Вы можете использовать абстрактный complexType в качестве типа элемента, но пользователь, пишущий документ экземпляра XML с этой схемой, должен указать тип элемента.

Для вашего примера это означает, что вы должны написать это следующим образом:

<Conclusion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="conclusion.xsd">
  <observationSet>
    <observationPhenomenum>HIGH_HEARTBEAT</observationPhenomenum>
  </observationSet>
  <action xsi:type="AlarmAction">
    <actionType>
      <ENABLEOBSERVATIONACTION></ENABLEOBSERVATIONACTION>
    </actionType>
    <alarmCode>10</alarmCode>
    <report>Whatever</report>
  </action>
</Conclusion>

Для получения дополнительной информации посмотрите здесь: http://pic.dhe.ibm.com/infocenter/wci/v6r0m0/index.jsp?topic=%2Fcom.ibm.websphere.cast_iron.doc%2Fmap_Selecting_a_Substitution_Type.html

0 голосов
/ 24 июля 2018

При проверке запроса xml против wsdl вы должны включить следующие атрибуты

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" use this in the root element 

on abstract type element 

<abstractElement name="XYZ" xsi:type="Name of your instance" > </abstractElement>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...