XSD中两个元素可以有不同的名称但类型相同吗?

时间:2015-10-27 02:08:16

标签: xml xsd

考虑两种情况:

我有一个看起来像这样的XML:

<personinfo>
   <info> 
        <option1>Coke</option1>
   </info>
</personinfo>

我应该在option1和option2元素之间进行选择。

我有另一个看起来像这样的XML:

 <personinfo>
       <info> 
            <firstname>Yair</firstname>
            <lastname>Zaslavsky</lastname>
       </info>
    </personinfo>

应该出现firstname和lastname(因此是一个序列)。

我尝试使用以下架构:

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="optionsChoice">
    <xs:choice>
      <xs:element name="option1" type="xs:string"/>
      <xs:element name="option2" type="xs:string"/>
    </xs:choice>
  </xs:complexType>

  <xs:complexType name="optionsSequence">
     <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
  </xs:complexType>

<xs:complexType name="personinfo">
  <xs:choice>
      <xs:element name="info" type="optionsSequence"/>
      <xs:element name="info" type="optionsChoice"/>
    </xs:choice>
</xs:complexType>


</xs:schema>

没有运气。

请记住,我必须拥有&#34; info&#34;作为两种情况下的元素名称。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您不能在内容模型中同时显示两个名称相同但元素不同的元素。

然而,您可以推断选择,以便personinfo可以选择option1option2,也可以选择firstname和{{1} }:

lastname

此XSD将成功验证两个XML文档。