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

时间:2015-05-13 13:32:46

标签: xml xsd namespaces schema

给出以下XML片段:

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

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

是否可以编写一个XML Schema定义,它将complexType的{​​{1}}与其命名空间不同,以便可以使用多个名为Method的不同类型?

在此示例中,名称空间Method中的Method元素应该有2个子元素,名称空间ns1中的元素应该只有1个子元素。

1 个答案:

答案 0 :(得分:1)

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

XML Schema的目标命名空间成为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>