我的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]
有人可以帮助我吗?
答案 0 :(得分:5)
我假设架构有效;你确实有一个全局元素的定义,本地名称为“结论”,一个非抽象的复杂类型派生自Action,重复 observationId 元素(例如 XYZAction 强>)。
如果您将 xsi:type =“ XYZAction ”添加为操作元素的属性,则会重新解决您的问题。同样,属性值必须与非抽象类型的名称匹配,该名称源自抽象Action。
我的建议是,如果有疑问,请使用工具为您考虑的方案生成示例XML。我正在使用QTAssistant,因为它允许我使用简单的拖放XML Schema元素轻松构建任何可想象的场景。
答案 1 :(得分:4)
您可以使用抽象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>
答案 2 :(得分:0)
针对wsdl验证请求xml时,您必须包括以下属性
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>