BaseObj.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://dummy/models/BaseObj"
targetNamespace="http://dummy//models/BaseObj" elementFormDefault="qualified">
<xsd:element name="bo" type="BaseObj" />
<xsd:complexType name="BaseObj">
<xsd:sequence>
<xsd:element name="one" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
ChildObj.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://dummy/models/ChildObj"
targetNamespace="http://dummy/models/ChildObj" elementFormDefault="qualified">
<xsd:import namespace="http://dummy/models/BaseObj" schemaLocation="BaseObj.xsd" />
<xsd:element name="co" type="ChildObj" />
<xsd:complexType name="ChildObj">
<xsd:complexContent>
<xsd:extension base="BaseObj">
<xsd:sequence>
<xsd:element name="two" type="xsd:string" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>`
`
在处理上述ChildObj时,无法识别BaseObj并抛出无法将名称'BaseObj'解析为一个(n)'类型定义'组件。 据我了解,我导入了所需的模式
答案 0 :(得分:1)
您的XSD中有两个错误:
在BaseObj.xsd
中,您的
targetNamespace="http://dummy//models/BaseObj"
包含多余的/
。更改为
targetNamespace="http://dummy/models/BaseObj"
在ChildObj.xsd
中,您没有为BaseObj
元素定义名称空间。看起来像
<xsd:extension base="BaseObj">
要解决此问题,请将命名空间声明添加到xsd:schema
元素中,例如
... xmlns:base="http://dummy/models/BaseObj" ...
,然后将上面的xsd:extension
更改为
<xsd:extension base="base:BaseObj">
现在,您的架构应该可以按预期进行验证。