我想扩展在导入的 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 中的命名空间限定元素:
发现以元素
开头的无效内容。预计会出现'{"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"
命名空间,它应该可以工作