XSD:无法将名称“类型”解析为(n)“类型定义”组件

Posted

技术标签:

【中文标题】XSD:无法将名称“类型”解析为(n)“类型定义”组件【英文标题】:XSD: Cannot resolve the name 'type' to a(n) 'type definition' component 【发布时间】:2015-02-26 16:36:38 【问题描述】:

我正在定义架构,但在 Eclipse 中对其进行验证时会出现以下错误。

src-resolve:无法将名称“common:Name”解析为(n)“类型定义”组件。

我的架构如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.mycompany.com/myproject/service/v1"              xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:tns="http://www.mycompany.com/myproject/service/v1"            
        xmlns:product="http://www.mycompany.com/otherproject/service/products/v1"
        xmlns:common="http://www.mycompany.com/myproject/service/common/v1" elementFormDefault="qualified">

<xsd:import namespace="http://www.mycompany.com/otherproject/service/products/v1" schemaLocation="products_v1.xsd" />
<xsd:import namespace="http://www.mycompany.com/myproject/service/common/v1" schemaLocation="common_v1.xsd" />          

<xsd:element name="GetProductRequest" type="tns:GetProductRequest">
    <xsd:annotation>
        <xsd:documentation>Get Product Request</xsd:documentation>
    </xsd:annotation>
</xsd:element>  

<xsd:complexType name="GetProuctRequest">
    <xsd:annotation>
        <xsd:documentation>Get Product Request</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>

        <xsd:element name="ID" type="common:ID" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
                <xsd:documentation>ID</xsd:documentation>
            </xsd:annotation>
        </xsd:element>


        <xsd:element name="Name" type="common:Name" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
                <xsd:documentation>Name</xsd:documentation>
            </xsd:annotation>
        </xsd:element>  

    </xsd:sequence>
</xsd:complexType>

.....

common_v1.xsd 如下所示

<xsd:schema targetNamespace="http://www.mycompany.com/myproject/service/common/v1" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:tns="http://www.mycompany.com/myproject/service/common/v1" 
        elementFormDefault="qualified">


<xsd:complexType name="ID">
    <xsd:annotation>
        <xsd:documentation>ID</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element name="X" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
                <xsd:documentation>X</xsd:documentation>
            </xsd:annotation>
        </xsd:element>
        <xsd:element name="Y" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
                <xsd:documentation>Y</xsd:documentation>
            </xsd:annotation>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>  

<xsd:element name="Name" type="xsd:string">
    <xsd:annotation>
        <xsd:documentation>Name</xsd:documentation>
    </xsd:annotation>
</xsd:element>
......

问题是我的架构能够解析 common_v1.xsd 中的一些元素,而另一些则不能。在上面的代码中,common:ID 没有给出任何错误,但是 common:Name 给出了错误。

我不明白为什么有些元素没有解决。

【问题讨论】:

【参考方案1】:

从您显示的内容看来,您在 common 命名空间中有一个元素 Name,但没有类型,您正在尝试在此处使用该类型:

    <xsd:element name="Name" type="common:Name" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
            <xsd:documentation>Name</xsd:documentation>
        </xsd:annotation>
    </xsd:element>

所以要么创建一个类型common:Name,要么改用&lt;xsd:element ref="common:Name" .../&gt;

【讨论】:

【参考方案2】:
    <?xml version="1.0" encoding="UTF-8"?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.bharatsecurity.com/Patients"
     xmlns:tns="http://www.bharatsecurity.com/Patients" 
     elementFormDefault="qualified">
    <element name="patient" type="tns:Patients"></element>

您需要为此 tns 编写复杂类型,否则将导致无法解析类型 (n) 错误,例如:

    <complexType name="Patients">
    <sequence>
    <element name="id" type="int" />
    <element name="name" type="string"></element>
    <element name="gender" type="string"></element>
    <element name="age" type="int"></element>
    </sequence>
    </complexType>
    </schema>

【讨论】:

以上是关于XSD:无法将名称“类型”解析为(n)“类型定义”组件的主要内容,如果未能解决你的问题,请参考以下文章

在 PySpark 中使用 XSD

xsd.exe 生成正确的类型

XSD 到 jaxb 注释类给出了无法解析 xml 元素错误

如何在 XSD 复杂类型定义中混合扩展和限制

Maven Xjc / Jaxb插件无法解析简单的Xsd文件

xsd 后缀文件用啥软件打开