首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSD命名空间"ns2“问题

XSD命名空间"ns2“问题
EN

Stack Overflow用户
提问于 2015-06-30 07:14:16
回答 1查看 1.3K关注 0票数 3

我在Request.xsd中定义了模式,它将引用common.xsd。我期望输出如下所示

代码语言:javascript
复制
<Request xmlns="http://ws.myref.com/schemas/test" 
        xmlns="http://ps.myref.com/schemas/2008/Common">
 <EmailList>
     <Mail>test@gmail.com</Mmail>
  </EmailList>
</Request>

但是我得到了额外的名称空间"ns2“问题。有人能帮我解决这个问题吗?

代码语言:javascript
复制
<ns2:Request xmlns:ns2="http://ps.myref.com/schemas/test" 
             xmlns="http://ps.myref.com/schemas/Common">
    <ns2:EmailList>
       <Mail>test@gmail.com</Mail>
    </ns2:EmailList>
</ns2:Request>

Request.xsd

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified" targetNamespace="http://ps.myref.com/schemas/schemas/test"
            xmlns="http://ps.myref.com/schemas/schemas/test" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
            xmlns:com="http://ps.myref.com/schemas/Common">
    <xsd:import namespace="http://ps.myref.com/schemas/Common" schemaLocation="../schemas/common/common.xsd"/>
    <xsd:element name="Request">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="EmailLists" type="com:EmailList" minOccurs="0" maxOccurs="1"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

Common.xsd

代码语言:javascript
复制
<?xml version="1.0"?>
<xsd:schema xmlns="http://ps.myref.com/schemas/2008/Common" elementFormDefault="unqualified"
            targetNamespace="http://ps.myref.com/schemas/Common"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xsd:complexType name="EmailList">
        <xsd:sequence>
            <xsd:element name="Mail" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-30 07:49:20

在这种情况下,你的期望是不合理的。

因为类型" EmailList“是在common.xsd文件中的命名空间http://ps.myref.com/schemas/2008/Common下定义的,所以在另一个模式中使用EmailList类型时,您别无选择,只能以某种方式区分它。如果您查看request.xsd,就会发现这里所发生的情况是非常糟糕的:

代码语言:javascript
复制
<xsd:element name="EmailLists" type="com:EmailList" />

在本例中,com:是一个前缀,用于显示该类型是在另一个模式中定义的,并且在与所使用的名称空间不同的名称空间下定义。

同样,当xsd验证器使用request.xsd验证模式实例时,它必须确保您在实例中使用的EmailList类型是在common.xsd模式中定义的相同的EmailList类型,并且它能够这样做的唯一方法是使用命名空间。

因此,你的期望可以概括如下:

“我应该能够自由地将定义在两个不同模式定义中的类型混合在一起,而不需要区分它们,解析器应该理解这一点。”

因此,你现在应该能够看到你的期望是如何不符合逻辑的。

如果您不想在其中使用"ns2:“,那么您唯一的选择就是这样做:

代码语言:javascript
复制
<Request xmlns"http://ps.myref.com/schemas/test">
    <EmailList xmlns"http://ps.myref.com/schemas/test">
       <Mail xmlns="http://ps.myref.com/schemas/Common">test@gmail.com</Mail>
    </EmailList>
</Request>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31131868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档