XSD 模式抽象类型问题

标签 xsd

我的 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/

相关文章:

c# - 如何重命名 XSD.exe 生成的枚举 ItemsChoiceType?

javascript - 验证 xs :duration using a regular expression in Javascript

xml - 无法将名称 X 解析为递归 xml 架构中的元素声明组件

visual-studio-2010 - 如何修改我的设置以允许 VS2010 从 "Unauthorized Zone"加载第 3 方 XSD 文件?

c# - 在代码中从 XML 创建 XSD

xml - 如何将相同的属性多次添加到 XML 中的元素标记

.net - 指定 xs :decimal in an XML schema 的小数位数

java - JAXB SchemaFactory 源顺序必须遵循模式之间的导入顺序?

xsd - IntelliSense 支持在 Visual Studio 中编辑 NuGet 规范

c# - 如何在 C# 中的 XML 序列化期间交替 XML 元素?