【问题标题】:Can we define an xsd with same named element with different attributes, Will this be a valid xsd?我们可以定义一个具有不同属性的相同命名元素的 xsd,这将是一个有效的 xsd 吗?
【发布时间】:2015-11-19 21:58:43
【问题描述】:

我想合并两个具有相同命名空间和元素名称但属性不同的 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>

【问题讨论】:

  • 在这种情况下您不能这样做,但只有在 element 将在另一个复杂类型中声明时才能这样做。
  • 实际上我没有任何补充,因为这些是由两个不同的 web 服务 wsdl 生成的 xsd

标签: xml xsd schema


【解决方案1】:

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

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

  1. 将 middleName 属性设为可选
  2. 将 createStudent 的复杂类型设为全局。创建另一个 complexType 扩展第一个并添加额外的属性“middleName”。然后在 XML 中使用 xsi:type 属性来确定要验证的类型。

选项 1 将始终允许没有 middleName 属性的 createStudent。 选项 2 需要更改 XML 以识别类型。 您的选择。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      • 2021-09-22
      • 1970-01-01
      相关资源
      最近更新 更多