在其他模式中使用外部XSD模式的一部分

在其他模式中使用外部XSD模式的一部分,xsd,Xsd,假设我有一个外部模式,它为web服务定义了一种信封: <ext:envelope> <ext:message> <!-- anything else --> </ext:message> </ext:envelope> 其中ext是一个外部名称空间 它将定义为 <xs:any namespace="##any" processContents="lax" minOccurs="0" m

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

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

其中ext是一个外部名称空间
它将
定义为

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

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

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


我是否应该扩展ext:message声明?这种“扩展”是可能的吗?

< P>你还有更多的约束要考虑。让我们先假设XSD 1.0,将其上下文化。在这种情况下,在原始XSD和修改后的XSD之间保持分离的机制是使用XSD:redefinite。这允许组合XSD,保持原始源代码和更改之间的分离

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

重定义允许您用自己选择的内容模型替换通配符。它需要是该类型或组的限制

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

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