我们可以用具有不同属性的相同命名元素定义一个 xsd 吗,这将是一个有效的 xsd 吗?
Can we define an xsd with same named element with different attributes, Will this be a valid xsd?
我想合并两个具有相同命名空间和元素名称但不同属性的 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>
不,不能有两个名称和目标命名空间相同但内容不同的全局元素声明。
you can't have two global element declarations with the same name and target namespace, and different content
...但是您 可以 具有相同的 XML 标签但内容不同。我至少可以想到两种方法
- 使 middleName 属性可选
- 使 createStudent 的复杂类型成为全局。创建另一个扩展第一个并添加额外属性 'middleName' 的复杂类型。然后在 XML 中使用 xsi:type 属性来确定要验证的类型。
选项 1 将始终允许没有 middleName 属性的 createStudent。
选项 2 需要更改 XML 来标识类型。
您的选择。
我想合并两个具有相同命名空间和元素名称但不同属性的 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>
不,不能有两个名称和目标命名空间相同但内容不同的全局元素声明。
you can't have two global element declarations with the same name and target namespace, and different content
...但是您 可以 具有相同的 XML 标签但内容不同。我至少可以想到两种方法
- 使 middleName 属性可选
- 使 createStudent 的复杂类型成为全局。创建另一个扩展第一个并添加额外属性 'middleName' 的复杂类型。然后在 XML 中使用 xsi:type 属性来确定要验证的类型。
选项 1 将始终允许没有 middleName 属性的 createStudent。 选项 2 需要更改 XML 来标识类型。 您的选择。