当前位置: 首页 > 知识库问答 >
问题:

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

甄阿苏
2023-03-14

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

问题:

基础架构类型.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 验证 XSD 基础结构时,它给出了以下错误:

rail:tBasePlacedElement已经声明。错误位置:xs:schema/xs:redefine/xs:complex type。src-expressed f:

然而,使用Oxygen XML Editor和Liquid Studio等标准工具成功验证了相同的xsd。

有人可以帮助了解问题所在。

提前谢谢你。

共有1个答案

别峻
2023-03-14

我担心,问题是xs的规范:重定义在边缘有些模糊。XSD 1.1的作者认为修复互操作性问题是一项不可能的任务,这就是XSD 1.1说

注意:本节其余部分中描述的重定义特征为 ·已弃用·并可能从本规范的未来版本中删除。鼓励架构作者在需要与本规范的更高版本的互操作性或兼容性的情况下避免使用它。

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

 类似资料: