如何定义复合元素?

请看这个复合 XML 元素,"employee",仅包含其他元素:

<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>

在 XML Schema 中,我们有两种方式来定义复合元素:

1. 通过命名此元素,可直接对"employee"元素进行声明,就像这样:

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

假如您使用上面所描述的方法,那么仅有 "employee" 可使用所规定的复合类型。请注意其子元素,"firstname" 以及 "lastname",被包围在指示器 <sequence>中。这意味着子元素必须以它们被声明的次序出现。您会在 XSD 指示器 这一节学习更多有关指示器的知识。

2. "employee" 元素可以使用 type 属性,这个属性的作用是引用要使用的复合类型的名称:

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

如果您使用了上面所描述的方法,那么若干元素均可以使用相同的复合类型,比如这样:

<xs:element name="employee" type="personinfo"/>
<xs:element name="student" type="personinfo"/>
<xs:element name="member" type="personinfo"/><xs:complexType name="personinfo"><xs:sequence><xs:element name="firstname" type="xs:string"/><xs:element name="lastname" type="xs:string"/></xs:sequence>
</xs:complexType>

您也可以在已有的复合元素之上以某个复合元素为基础,然后添加一些元素,就像这样:

<xs:element name="employee" type="fullpersoninfo"/><xs:complexType name="personinfo"><xs:sequence><xs:element name="firstname" type="xs:string"/><xs:element name="lastname" type="xs:string"/></xs:sequence>
</xs:complexType><xs:complexType name="fullpersoninfo"><xs:complexContent><xs:extension base="personinfo"><xs:sequence><xs:element name="address" type="xs:string"/><xs:element name="city" type="xs:string"/><xs:element name="country" type="xs:string"/></xs:sequence></xs:extension></xs:complexContent>
</xs:complexType>

schema学习系列三: schema中的复杂元素相关推荐

  1. 数据库MYSQL学习系列三

    数据库MYSQL学习系列三 三.MYSQL事务与存储引擎 3.1-数据库事务 什么是事务 一系列有序的数据库操作: o要么全部成功 o要么全部回退到操作前的状态 o中间状态对其他连接不可见 事务的 ...

  2. Pyside2 学习系列三:PyInstaller打包项目瘦身(超详细的Pyside2 攻略)

    继上一篇文章打包后,发现包太大了,我们现在开始进行瘦身优化. 本项目的所有演示代码:github可在这里下载. 打包只用的工具为PyInstaller. 不想细看的朋友 可以直接跳到 最后 方法对比 ...

  3. idea学习系列三之版本管理工具

    idea学习系列三之版本管理工具 上一篇文章主要介绍了将idea中常用的快捷键,快捷键要想熟练那就得在实际的工作中多使用,刚开始可能很麻烦经常去笔记中找,不过用多了自然就熟练了. 这篇文件将会介绍一下 ...

  4. Vue+Electron学习系列 (三) -- 自动更新

    Vue+Electron学习系列 ​​​​​​​1️⃣Vue+Electron学习系列 (一) -- 初识​​​​​​​ 2️⃣ Vue+Electron学习系列 (二) -- 打包发布 3️⃣ Vu ...

  5. JavaScript学习(三十五)—拖动元素

    JavaScript学习(三十五)-拖动元素 代码如下: <!DOCTYPE html> <html lang="en"><head><m ...

  6. 动态规划系列---求数组中两个元素差的最大值

    题目 求数组中两个元素差的最大值(后面的元素减去前面的元素):对应实际生活中的股票买卖,找出一只股票走势里面可能的最大收益: 思路 类似于求数组连续和的最大值:  保存最大差值和最小值,遍历数组,如果 ...

  7. NMock学习系列(三)--- NMock在DDD领域驱动的单元测试中的应用

    介绍 领域驱动设计涵盖的知识点比较多,其中代码的架构.设计.编写基本上只占到其中的很小一部分,其它的大部分讲解的是需求的获取方式.项目的管理方式等知识.本篇就是针对这一小部分的知识点位来展开的.所以本 ...

  8. webservice 教程学习系列(一)——schema约束

    最近同事在做一个webservice 接口的调用,我比较感兴趣,所以就找时间学习了一下.在此写下我学习的全过程,算是记个笔记吧!如有不足或者错误之处,欢迎指摘. 因为大部分的webservice是通过 ...

  9. Java NIO学习系列三:Selector

    前面的两篇文章中总结了Java NIO中的两大基础组件Buffer和Channel的相关知识点,在NIO中都是通过Channel和Buffer的协作来读写数据的,在这个基础上通过selector来协调 ...

最新文章

  1. 如何将Mac OS X10.9下的Python2.7升级到最新的Python3.3
  2. 算法设计与分析 0 算法与性能:GCD与冒泡排序
  3. python 多维 条件获取
  4. RDA8955的新版本SDK串口接收数据的问题记录
  5. 有个小问题,大家一起研究。
  6. BugkuCTF-WEB题文件包含
  7. Python的pyproject.toml文件中的tool.poetry.dev-dependencies选项
  8. FPGA芯片手册阅读技巧
  9. 『MXNet』第四弹_Gluon自定义层
  10. 蓝桥杯省赛2017年Java组B组
  11. 使用github客户端上传本地项目到github
  12. C++视频教程资源链接合集
  13. W5500+STM32F103C8T6进行TCP通信(modbus)
  14. python-微信公众个性二维码生成-生成自己名片二维码-链接二维码【超酷】
  15. 同时使用SVN和Git进行版本控制
  16. 王之泰201771010131《面向对象程序设计(java)》第十周学习总结
  17. 数据分析的重要性分析
  18. android kitkat(4.4以上)各个版本的特性解析
  19. 白噪声校验matlab,白噪声的测试MATLAB程序.doc
  20. python过滤敏感词记录

热门文章

  1. 【开发随记】国密SM2的简单运用和踩坑
  2. JAVA中的三大集合框架
  3. 想要一览众山小,就得有爬上山顶的决心和爬山的坚持,两者缺一不可! ----2020年度总结
  4. 一文搞懂Java8新特性
  5. 【Python】快速排序求第N大的数字
  6. 商城项目登录功能实现(动图)
  7. 遇到问题----/var/log/messages被写满占空间
  8. matlab实现图像清晰化,基于MatLab的数字图像清晰化方法.pdf
  9. 计算机无法打开压缩包,电脑压缩文件为什么打不开?手把手教你解决压缩文件打不开的问题...
  10. linux服务器是什么