如何通过名称空间区分 XSD 中的元素

How to differentiate elements in an XSD by namespaces

给定以下 XML 片段:

...
<ns1:Method>
  <Parameter1 />
  <Parameter2 />
</ns1:Method>

<ns2:Method>
  <Parameter3 />
</ns2:Method>
...

是否可以编写一个 XML 架构定义,通过其名称空间将 MethodcomplexType 区分开来,以便命名为 Method 的多个不同类型是可能的?

在此示例中,命名空间 ns1 中的 Method 元素应具有 2 个子元素,而命名空间 ns2 中的元素应仅具有 1 个子元素。

不仅可以使用名称空间来区分其他名称相同的组件(包括元素),这也是创建名称空间的原因。

XML 架构的目标命名空间成为 XSD 中定义的每个元素名称的一部分。您可以通过 xsd:import.

组合来自多个具有不同命名空间的 XSD 的声明

不过请注意,虽然您的不同 Method 元素可以通过命名空间来区分,但如果可能的话,通过它们的本地名称来区分元素可能仍然更好:

<CalculateAreaMethod>
  <Height/>
  <Width/>
</CalculateAreaMethod>

<GetTemperatureMethod>
  <Location/>
</GetTemperatureMethod>

最后,根据属性值区分元素类型的另一个选项是 XSD 1.1 的条件类型分配,它将支持这种命名:

<Method name="CalculateAreaMethod">
  <Height/>
  <Width/>
</Method>

<Method name="GetTemperatureMethod">
  <Location/>
</Method>