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

Can two elements have different names but same type in XSD?

考虑两种情况:

我有一个 XML 看起来像:

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

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

我还有一个 XML 看起来像:

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

名字和姓氏都应出现的位置(因此是一个序列)。

我尝试使用以下架构:

<?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>

运气不好。

请记住,在这两种情况下,我都必须将 "info" 作为元素名称。

我该如何解决这个问题?

内容模型中不能同时出现两个名称相同但类型不同的元素。

但是,您可以将选择向下推,这样 personinfo 可以是 option1option2 的选择,也可以是 firstname 和 [= 的序列15=]:

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

  <xs:element name="personinfo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="info">
          <xs:complexType>
            <xs:choice>
              <xs:choice>
                <xs:element name="option1" type="xs:string"/>
                <xs:element name="option2" type="xs:string"/>
              </xs:choice>
              <xs:sequence>
                <xs:element name="firstname" type="xs:string"/>
                <xs:element name="lastname" type="xs:string"/>
              </xs:sequence>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

此 XSD 将成功使您的两个 XML 文档有效。