XML XSD:从导入的 XSD 扩展复杂类型

问题描述 投票:0回答:1

我想扩展在导入的 XSD 中定义的复杂类型。我设置了以下示例:

Base.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/base">
    <xs:complexType name="BaseType">
        <xs:sequence>
            <xs:element name="baseElement" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

扩展.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:base="http://www.example.com/base"
    xmlns="http://www.example.com/extended"
    targetNamespace="http://www.example.com/extended">

    <xs:import namespace="http://www.example.com/base" schemaLocation="Base.xsd" />   
    <xs:complexType name="ExtendedType">
        <xs:complexContent>
            <xs:extension base="base:BaseType">
                <xs:sequence>
                    <xs:element name="extendedElement" type="xs:int" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:element name="ExtendedElement" type="ExtendedType" />
</xs:schema>

示例.xml

<?xml version="1.0" encoding="UTF-8"?>
<extended:ExtendedElement xmlns:extended="http://www.example.com/extended"
    xmlns="http://www.example.com/base"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.com/extended extended.xsd
                                         http://www.example.com/base base.xsd">
                                         
    <baseElement>someString</baseElement>
    <extendedElement>3</extendedElement>
</extended:ExtendedElement>

现在这个 XML 的问题是:我收到一个验证错误,其中一个元素“baseElement”是预期的(即使错误正好显示在这个元素上)。 XSD 定义有问题吗?

xml xsd
1个回答
0
投票

验证错误表明它不需要 XML 中的命名空间限定元素:

发现以元素

'{"http://www.example.com/base":baseElement}'
开头的无效内容。预计会出现
'{baseElement}'
之一。

由于您定义了非限定名称空间

xmlns="http://www.example.com/base"
来指向
http://www.example.com/base
,因此每个非限定 XML 标签都将绑定到此。

通过将其更改为

xmlns:base="http://www.example.com/base"
命名空间,它应该可以工作

© www.soinside.com 2019 - 2024. All rights reserved.