如何通过名称空间区分 XSD 中的元素
How to differentiate elements in an XSD by namespaces
给定以下 XML 片段:
...
<ns1:Method>
<Parameter1 />
<Parameter2 />
</ns1:Method>
<ns2:Method>
<Parameter3 />
</ns2:Method>
...
是否可以编写一个 XML 架构定义,通过其名称空间将 Method
的 complexType
区分开来,以便命名为 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>
给定以下 XML 片段:
...
<ns1:Method>
<Parameter1 />
<Parameter2 />
</ns1:Method>
<ns2:Method>
<Parameter3 />
</ns2:Method>
...
是否可以编写一个 XML 架构定义,通过其名称空间将 Method
的 complexType
区分开来,以便命名为 Method
的多个不同类型是可能的?
在此示例中,命名空间 ns1
中的 Method
元素应具有 2 个子元素,而命名空间 ns2
中的元素应仅具有 1 个子元素。
不仅可以使用名称空间来区分其他名称相同的组件(包括元素),这也是创建名称空间的原因。
XML 架构的目标命名空间成为 XSD 中定义的每个元素名称的一部分。您可以通过 xsd:import
.
不过请注意,虽然您的不同 Method
元素可以通过命名空间来区分,但如果可能的话,通过它们的本地名称来区分元素可能仍然更好:
<CalculateAreaMethod>
<Height/>
<Width/>
</CalculateAreaMethod>
<GetTemperatureMethod>
<Location/>
</GetTemperatureMethod>
最后,根据属性值区分元素类型的另一个选项是 XSD 1.1 的条件类型分配,它将支持这种命名:
<Method name="CalculateAreaMethod">
<Height/>
<Width/>
</Method>
<Method name="GetTemperatureMethod">
<Location/>
</Method>