xsd:扩展名不起作用:src-resolve:无法将名称“ BaseObj”解析为一个(n)“类型定义”组件

时间:2019-03-15 20:39:42

标签: xml xslt

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)'类型定义'组件。 据我了解,我导入了所需的模式

1 个答案:

答案 0 :(得分:1)

您的XSD中有两个错误:

  1. BaseObj.xsd中,您的

    targetNamespace="http://dummy//models/BaseObj"
    

    包含多余的/。更改为

    targetNamespace="http://dummy/models/BaseObj"
    
  2. ChildObj.xsd中,您没有为BaseObj元素定义名称空间。看起来像

    <xsd:extension base="BaseObj">
    

    要解决此问题,请将命名空间声明添加到xsd:schema元素中,例如

    ... xmlns:base="http://dummy/models/BaseObj" ...
    

    ,然后将上面的xsd:extension更改为

    <xsd:extension base="base:BaseObj">
    

现在,您的架构应该可以按预期进行验证。