我的 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]
有人可以帮我吗?
最佳答案
我假设架构是有效的;您确实在某个地方定义了具有局部名称“结论”的全局元素,以及从 Action 派生的非抽象、复杂类型,具有重复的 observationId 元素(例如 XYZAction )。
如果您将 xsi:type="XYZAction" 作为属性添加到 action 元素,您的问题就会得到解决。同样,属性值必须与派生自抽象 Action 的非抽象类型的名称匹配。
我对您的建议是,当您有疑问时,请使用一种工具为您想到的场景生成示例 XML。我正在使用 QTAssistant ,因为它允许我使用简单的 XML Schema 元素拖放来轻松构建任何可以想象的场景。
关于XSD 模式抽象类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5979897/