Xml 仅将少数类型从一个xsd导入到另一个xsd

Xml 仅将少数类型从一个xsd导入到另一个xsd,xml,xsd,schema,Xml,Xsd,Schema,这里的问题是——是否可以从xsd导入类型子集 考虑以下示例: xsd包含三种类型A、b、c 而B.xsd包含两种类型d,e 当我在B.xsd中导入A.xsd时,如下所示: <xs:import namespace="http://www.abc.com/schema/aaa" schemaLocation="A.xsd"/> 我有三种类型——a、b和c。我只想要B.xsd中的类型a。我想在xsd中排除类型b和c。有可能吗?如果是,有哪些选择 谢谢 电脑不,你做不到。但你为什么要

这里的问题是——是否可以从xsd导入类型子集

考虑以下示例: xsd包含三种类型A、b、c 而B.xsd包含两种类型d,e

当我在B.xsd中导入A.xsd时,如下所示:

<xs:import namespace="http://www.abc.com/schema/aaa" schemaLocation="A.xsd"/>

我有三种类型——a、b和c。我只想要B.xsd中的类型a。我想在xsd中排除类型b和c。有可能吗?如果是,有哪些选择

谢谢
电脑

不,你做不到。但你为什么要这么做?多余的未使用类型肯定没有坏处?

用@Michael的话来说,
不,你不能这么做。
如果你对一些规范阅读感兴趣,下面会介绍

至于为什么会有人想这样做,我可以提供一个我经常看到的例子。我不认为它适用于您的场景,但它应该会帮助那些想知道为什么的人

这一切都是从大多数人对模式的期望开始的:准确地验证他们想要什么,而不是更多。然后,我们的思维定势是假设如果XML是模式有效的,那么代码中就没有或几乎没有验证了。这可能是人们可以看到如此多的问题的原因,即使在这里,这些问题涉及各种各样的验证场景,这些场景似乎推动了人们对XSD的需求

我经常遇到的是那些构建自己或参考(例如行业标准)这些复杂类型层次结构和替代组的人,他们意识到,虽然在企业模型中这样做是有意义的,但他们关注的是端到端的视图,企业中的单个系统仅支持该类型层次结构的子集

当XSD被编写为遵循开放内容的特定模式(通过抽象元素或抽象类型元素)时,包含这些额外类型或元素的架构将通过内容的验证,内容的xsi:type引用了错误的类型或使用了错误的替换组成员

说明,考虑一个基本抽象类型<代码>地址<代码>;具体地址:加拿大、美国、墨西哥、英国。例如,使用英国地址而不是加拿大/美国/墨西哥地址对特定业务服务无效


在您的情况下,假设类型
a
不依赖于
b
和/或
c
,唯一的方法是将a.xsd拆分为a'
a',然后在b.xsd中引用a'。有一些方法可以自动完成这项工作,因此从维护的角度来看,开销可能非常低;通过自动XML模式重构(XSR)完成后,A.xsd的未来版本(我假设不是您的)可以轻松地与您的解决方案的其余部分集成。

我从未见过这一点,我问自己这有什么好处。某种类型的类型替换而不是覆盖?如果您只需要类型A,您可以将类型ns1:A扩展为本地类型。感谢Petru和Micheal的输入。我正在处理的场景是使用SpringWS的基于soap的Web服务。它正在导入另一个定义了某些类型的xsd。好的方面是,我可以重用A.xsd中定义的复杂类型。糟糕的是。。我在最终的wsdl中得到了不需要的额外类型。因此,这就是为什么我在寻找是否可以只导入模式的子集。xs:redefinite是一个可怕的怪物,但它经常用于Petru描述的场景:您可以在包含的模式文档中重新定义某些内容,从而使UK地址变为无效。