加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – XSD元素替换组示例?

发布时间:2020-12-16 07:57:47 所属栏目:百科 来源:网络整理
导读:我希望能够为多种扩展类型指定单选类型. 例如,说我们有海,在海里有很多种鱼.所以在XML中我会写: Sea name="Atlantic Ocean" Tuna name="tuna1" / Carp name="carp1" / Carp name="carp2" / Tuna name="tuna2" / Salmon name="salmon1" //Sea XSD xs:complex
我希望能够为多种扩展类型指定单选类型.

例如,说我们有海,在海里有很多种鱼.所以在XML中我会写:

<Sea name="Atlantic Ocean">
 <Tuna name="tuna1" />
 <Carp name="carp1" />
 <Carp name="carp2" />
 <Tuna name="tuna2" />
 <Salmon name="salmon1" />
</Sea>

XSD

<xs:complexType name="Fish">
  </xs:complexType>

  <xs:complexType name="Salmon">
    <xs:complexContent>
      <xs:extension base="Fish">
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Carp">
    <xs:complexContent>
      <xs:extension base="Fish">
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Tuna">
    <xs:complexContent>
      <xs:extension base="Fish">
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Sea">
    <xs:complexContent>
      <xs:extension base="GeoZone">
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:choice>
            <xs:element type="Fish" name="Fish" minOccurs="0" 
                        maxOccurs="unbounded"/>
          </xs:choice>
        </xs:sequence>
        <xs:attribute name="Name" type="xs:string" use="optional" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

不幸的是,这是无效的,因为我只能添加Fish本身而不是其扩展类型.

使用 element substitution group ……

XSD

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

  <xs:element name="Sea">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="FishSubGroup"
                    minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="FishSubGroup" abstract="true"/>

  <xs:element name="Tuna" type="FishType" substitutionGroup="FishSubGroup"/>
  <xs:element name="Carp" type="FishType" substitutionGroup="FishSubGroup"/>
  <xs:element name="Salmon" type="FishType" substitutionGroup="FishSubGroup"/>

  <xs:complexType name="FishType">
    <xs:attribute name="name" type="xs:string"/>
  </xs:complexType>
</xs:schema>

XML

<?xml version="1.0" encoding="UTF-8"?>
<Sea name="Atlantic Ocean">
  <Tuna name="tuna1"/>
  <Carp name="carp1"/>
  <Carp name="carp2"/>
  <Tuna name="tuna2"/>
  <Salmon name="salmon1"/>
</Sea>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读