Altova XMLSpy 2014中的XSD:为什么我可以在具体元素中使用抽象类型?

时间:2014-07-02 13:09:34

标签: xml xsd xmlspy abstract-type

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

  • 抽象类型," t_abs"。
  • 具体类型," t_con",定义为元素序列,其中一个元素定义为类型" t_abs"。
  • 一个元素(instanciable)," e_con",定义类型" t_con"。

这是对的吗?我认为它应该产生一个错误,因为抽象类型不被用作具体类型的基础(通过扩展或限制),抽象类型(t_abs)被用作具体元素的类型到一个可实现的混凝土element(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>

1 个答案:

答案 0 :(得分:2)

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

3.4.1 The Complex Type Definition Schema Component

  

{abstract}为true的复杂类型不得用作   {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的摘要。