我们可以使用具有不同属性的相同命名元素定义xsd吗?这是一个有效的xsd吗?

时间:2015-11-19 10:35:13

标签: xml xsd schema

我想合并两个具有相同名称空间和元素名称但不同属性的xsd:

<s:schema ......>
<s:element name="CreateStudent">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="ID" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="FirstName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="LastName" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>


<s:element name="CreateStudent">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="ID" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="FirstName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="LastName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="MiddleName" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>

2 个答案:

答案 0 :(得分:1)

不,你不能拥有两个具有相同名称和目标命名空间以及不同内容的全局元素声明。

答案 1 :(得分:1)

  

你不能拥有两个具有相同名称和目标命名空间以及不同内容的全局元素声明

...但 可以具有不同内容的相同XML标记。我至少有两种方法可以想到

  1. 使middleName属性可选
  2. 使复杂类型的createStudent全局化。创建另一个扩展第一个的complexType,并添加额外的属性&#39; middleName&#39;。然后在XML中使用xsi:type属性来标识要对其进行验证的类型。
  3. 选项1将始终允许不带middleName属性的createStudent。 选项2需要更改XML以标识类型。 你的选择。