在其他架构中使用外部XSD架构的一部分



假设我有一些外部模式,它为web服务定义了一种信封:

<ext:envelope>
<ext:message>
<!-- anything else -->
</ext:message>
</ext:envelope>

其中ext是一个外部命名空间
它将<ext:message>定义为

<xs:any namespace="##any" processContents="lax" minOccurs="0"
maxOccurs="unbounded" />

这是我的问题:如果我想为我的服务编写WSDL模式,它必须符合这个信封,我如何编写定义如下内容的模式:

<ext:envelope>
<ext:message>
<my:myElement />
</ext:message>
</ext:envelope>

我应该以某种方式扩展ext:message声明吗?这种"延伸"可能吗?

您还需要考虑更多的约束。让我们先假设XSD 1.0,将其置于上下文中。在这种情况下,在原始XSD和修改后的XSD之间保持分离的机制是使用XSD:define。这允许组合XSD,保持原始源和更改之间的分离。

不过,前提条件是要有一个全局复杂类型声明或组,用于定义ext:message的内容模型。

xsd:define允许您将通配符替换为您选择的内容模型。它需要是类型或组的限制

重新定义将为您提供一个等效的XSD,从XSD规范的角度来看,它是很好的。然而,从工具支持的角度来看,如果听到任何支持XSD:define的XSD到代码绑定,我会感到惊讶。

在您的案例中,如果您使用或目标的工具与xsd:define一起工作,那么您就完成了。否则,您可以选择应用一个自动的XML架构重构,它能够在不使用XSD:define的情况下创建XSD文件。实际上,自动转换可以完成手动操作,但对于正在进行的维护来说,它是一个更好的选择。结果xsd(没有重新定义)实际上是相同的(因为它们代表PSVI模型),并且可以由不支持xsd:define的工具使用。

最新更新