XSD验证错误:具有目标名称空间的重新定义架构中不存在元素

问题描述

目标: 在我的项目中,由不同的团队在不同级别上进行数据准备。我们用于数据准备的格式是XML。 为了满足上述需求,我们准备了具有不同层(不同目标名称空间)的XSD,并且每个XSD层都将继承先前的XSD层并对其进行扩展(感谢XSD重新定义)。

enter image description here

问题:

infrastructureTypes.xsd:

<xs:schema xmlns:rail="http://www.railml.org/schemas/2016" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.railml.org/schemas/2016" elementFormDefault="qualified" version="2.3">
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
<xs:include schemaLocation="railwayUnits.xsd"/>
<xs:include schemaLocation="railwayBaseTypes.xsd"/>
<xs:complexType name="tBasePlacedElement">
    <xs:complexContent>
        <xs:extension base="rail:tElementWithIDAndName">
            <xs:sequence>
                <xs:element name="geoCoord" type="rail:tGeoCoord" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
            <xs:attributeGroup ref="rail:aRelPosition"/>
            <xs:attributeGroup ref="rail:aAbsPosition"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>   

-----------------
----------------
---------------

infrastructure-GenericADM.xsd:

<xs:schema xmlns="http://www.railml.org/schemas/2016" xmlns:GenericADM="http://www.transport.alstom.com/GenericADM/1" xmlns:rail="http://www.railml.org/schemas/2016" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.railml.org/schemas/2016" elementFormDefault="qualified" version="0.1" vc:minVersion="1.1">
<xs:import namespace="http://www.transport.alstom.com/GenericADM/1" schemaLocation="GenericADM.xsd"/>
<xs:redefine schemaLocation="railML.xsd">
    <xs:complexType name="tBasePlacedElement">
        <xs:complexContent>
            <xs:extension base="rail:tBasePlacedElement">
                <xs:attribute name="kPCorrectedTrolleyValue" type="rail:tLengthM" use="optional"/>
                <xs:attribute name="alternativeKP" type="rail:tLengthM" use="optional"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

当我使用Altova XMLSpy验证XSDs基础结构GenericADM.xsd时,出现以下错误

rail:tBasePlacedElement已经声明。 错误位置:xs:schema / xs:redefine / xs:complexType。 src-expredef:'tBasePlacedElement'在目标名称空间为'http://www.railml.org/schema/2016'的重新定义架构中不存在

但是,使用Oxygen XML Editor和Liquid Studio等标准工具可以成功验证相同的XSD。

有人可以帮助理解问题所在吗?

谢谢。

解决方法

恐怕问题是xs:redefine的规范在边缘有些模糊。 XSD 1.1的作者认为解决互操作性问题是一项不可能的任务,这就是XSD 1.1所说的原因

注意:本节其余部分描述的重定义功能已弃用,并且可能会从本规范的将来版本中删除。在对本规范的更高版本的互操作性或兼容性很重要的情况下,建议架构作者避免使用它。

特别是,规范中确实没有明确定义当模块A通过两条不同的路径引用模块B时会发生什么,其中一条具有xs:redefine步骤。