2012-09-26 138 views
2

这里的问题是 - 是否有可能从xsd导入类型的子集?从一个xsd导入只有几个类型到另一个

请考虑以下示例: A.xsd包含三个类型a,b,c 而B.xsd包含两个类型d,e。

当我输入A.xsd在B.xsd类似以下内容:

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

我得到的所有三种类型的-a,b和c。我只想在B.xsd中输入一个。我想在xsd中排除类型b和c。有可能这样做吗?如果是,有什么选择?

感谢 PC

+0

我从来没有见过这样的事情,我问自己这有什么好处。某种类型的替换是否覆盖? – OkieOth

+0

如果您只想输入A,则可以将ns1:a类型扩展为本地类型。 –

+0

感谢您输入Petru和Micheal。我正在处理的场景是使用spring-ws的基于soap的web服务。它正在导入另一个定义了某些类型的xsd。好的部分是,我可以重用在A.xsd中定义的复杂类型。不好的部分是..我在最后的wsdl中获得了不需要的额外类型。所以这就是我查看是否可以导入模式子集的原因。 –

回答

1

不,你不能做到这一点。但你为什么想要?剩余未使用的类型肯定没有危害?

0

解释@Michael,No you can't do it.如上所述。如果您对某些规格阅读感兴趣,请描述this is where。至于为什么有人想这样做,我可以提供一个我经常看到的例子。我没有声称它适用于你的情况,但它应该帮助那些想知道为什么。这一切都始于大多数人对模式的期望:确切地验证他们想要的内容,而不再是其他内容。然后,思维集假定如果XML是模式有效的,那么在后面的代码中没有任何验证或剩余的验证。这可能是人们可以看到如此多的问题的原因,即使是在这里,也可以处理各种验证场景,这似乎推动了人们想要用XSD做什么。

我经常碰到的是那些建立自己或引用(如行业标准)这些精心设计的类型层次结构和替代组的人,要意识到尽管在企业模型中使用类似这样的结构是有意义的,端到端视图,企业内部的各个系统仅支持该类型层次结构的一个子集。

当的XSD是创作遵循一定的图案为开放内容(通过抽象元素或抽象的类型元素),则包括这些额外的类型或元件的模式经受通过具有一个xsi内容验证:类型参考错误的类型或使用替换组的错误成员。

为了说明,考虑基本抽象类型Address;具体地址:加拿大,美国,墨西哥,英国。例如。使用英国地址而不是加拿大/美国/墨西哥对于特定的商业服务无效。

在你的情况下,假设型ab和/或c,只有这样,没有依赖性做到这一点就是分裂A.xsdA”aA‘’与休息,然后在B.xsd处参考A'。有很多方法可以自动完成,所以从维护角度来看,开销可能非常低。当通过自动XML模式重构(XSR)完成时,那么未来版本的A.xsd(我认为是不属于你的东西)可以轻松地与解决方案的其余部分集成。

+0

xs:重新定义是一个可怕的怪物,但它经常用于Petru描述的场景:您可以重新定义包含的模式文档中的某些内容,以便英国地址变得无效。 –

相关问题