【问题标题】:XSD in Altova XMLSpy 2014: Why can I use an abstract type in a concrete element?Altova XMLSpy 2014 中的 XSD:为什么我可以在具体元素中使用抽象类型?
【发布时间】:2014-07-02 13:09:34
【问题描述】:

在 Altova XMLSpy 2014 中,我有一个 XSD 文档,它定义了:

  • 一种抽象类型,“t_abs”。
  • 具体类型“t_con”定义为一系列元素,其中一个元素定义为类型“t_abs”。
  • 定义为“t_con”类型的元素(可实例化)“e_con”。

正确吗?我认为它应该会产生一个错误,因为抽象类型没有被用作具体类型的基础(通过扩展或限制),抽象类型(t_abs)被用作具体元素的类型到可实例化的具体元素 (t_con)。

XMLSpy 是否应该返回一个抽象类型被用于具体元素的警告?

例子:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1">
    <xs:complexType name="t_abs" abstract="true">
        <xs:sequence>
            <xs:element name="el" type="xs:string"/>
            <xs:element name="e2" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="t_con">
        <xs:sequence>
            <xs:element name="e_t_con_1" type="xs:string"/>
            <xs:element name="e_t_abs" type="t_abs"/>
            <xs:element name="e_t_con_2" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="e_con" type="t_con"/>
</xs:schema>

【问题讨论】:

  • 作为记录,我发现撒克逊模式处理器没有很好地处理这种情况(诊断不正确)。我已经修复了 Saxon 错误(请参阅 saxonica.plan.io/issues/2100),并将您的测试用例作为 Saxonica/complex/complex021 添加到 W3C XSD 测试套件中。

标签: xml xsd xmlspy abstract-type


【解决方案1】:

允许 XMLSpy 在实际验证之前不报告您期望的错误(已添加重点):

3.4.1 The Complex Type Definition Schema Component

{abstract} 为真的复杂类型不能用作 {type definition} 用于·验证·元素信息项。 因此不能从 xsi:type (§2.6.1) 中引用它们 实例文档中的属性。可以使用抽象复杂类型 作为{基本类型定义},甚至作为的{类型定义} 元素声明,在每种情况下都提供一个具体的派生类型 定义用于·验证·,通过 xsi:type (§2.6.1) 或 替换组的操作。

如果您继续尝试使用 XSD 验证文档实例,

<?xml version="1.0" encoding="utf-8"?>
<e_con>
  <e_t_con_1/>
  <e_t_abs>
    <el/>
    <e2/>
  </e_t_abs>
  <e_t_con_2/>
</e_con>

你会发现你收到了你所寻找的错误,比如Xerces-J产生的这个错误:

[错误] try2.xml:5:12: cvc-type.2: 类型定义不能 元素 e_t_abs 的摘要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2018-07-31
    • 1970-01-01
    相关资源
    最近更新 更多