Schema系列文章

1、XML对Schema文档的引用123

2、Schema文档概述123

3、Schema之简单元素、复合元素和属性

4、Schema约束

5、Schema指示器

6、如何创建一份XMLSchema And XML Elements

用指示器(Indicators)我们可以控制文件中元素的使用方法,有七种指示器:

1、顺序指示器:All、Choice、Sequence;

2、出现次数指示器:maxOccurs  、minOccurs;

3、组指示器:Groupname、attributeGroup name;

  • 顺序指示器(Indicators)用于指定元素的顺序

    <all>指示器(Indicators)指明了子元件可以以任何次序出现,并且每个子元件只能出现一次:

    <xs:element  name ="Author"><xs:complexType  ><xs:all ><xs:element  name ="firstname" type ="xs:string"/><xs:element  name ="lastname"  type ="xs:string"/></xs:all></xs:complexType></xs:element>
    

    <choice>指示器(Indicators)指明了随便的子元素都可以出现:在多个子元件里只能选择一个:

    <xs:element  name ="Author"><xs:complexType  ><xs:choice ><xs:element  name ="firstname" type ="xs:string"/><xs:element  name ="lastname"  type ="xs:string"/></xs:choice></xs:complexType></xs:element>
    

    <sequence>指示器(Indicators)指定了子元素必须以一个指明的顺序出现:

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

  • 出现的次数指示器:

    最多出现次数指示器(Indicators)指明了一个元素可以出现的最多次数;
    最少出现次数指示器(Indicators)指明了一个元素要出现的最小次数:

    <xs:element  name ="Author"><xs:complexType  ><xs:sequence ><xs:element  name ="firstname" type ="xs:string" minOccurs ="0"/><xs:element  name ="lastname"  type ="xs:string" maxOccurs ="2"/></xs:sequence></xs:complexType></xs:element>
    

    tips:为使元件可以重复出现无数次,可以设置maxOccurs="unbounded"的状态;

  • 组指示器(Indicators)用于定义相关的元素组:

    1、元素组:你必须在组声明里定义一个all, choice,或sequence元素。下面的例子定义了一个名为"persongroup"的组:

    <xs:group  name ="persongroup"><xs:sequence ><xs:element  name ="firstname"/><xs:element  name ="lastname"/></xs:sequence></xs:group>
    

    定义了一个组后,你可以在另一个组参考它,像这样:

    <xs:group  name ="persongroup"><xs:sequence ><xs:element  name ="firstname"/><xs:element  name ="lastname"/></xs:sequence></xs:group><xs:element  name ="person" type ="personinfo"></xs:element><xs:complexType  name ="personinfo"><xs:sequence ><xs:group  ref ="persongroup"/><xs:element  name ="country"  type ="xs:string"/></xs:sequence></xs:complexType>
    

    2、属性组的声明:

    <xs:attributeGroup  name ="personattrgroup"><xs:attribute  name ="firstname"  type ="xs:string"/><xs:attribute  name ="lastname"  type ="xs:string"/><xs:attribute  name ="birthday" type ="xs:date"/></xs:attributeGroup>
    

    属性组声明好以后,我们可以这样引用:

    <xs:attributeGroup name="personattrgroup"><xs:attribute name="firstname" type="xs:string"/><xs:attribute name="lastname" type="xs:string"/><xs:attribute name="birthday" type="xs:date"/></xs:attributeGroup>
    <xs:element name="person"><xs:complexType><xs:attributeGroup ref="personattrgroup"/></xs:complexType></xs:element>

其他:

<any>元素可以使我们在XML文档中添加没有被schema 定义过的新元素从而扩充XML文档;

<anyAttribute>元素可使我们在XML文档中添加未被schema指定过的属性;

<xs:element name="person"><xs:complexType><xs:sequence><xs:element name="firstname" type="xs:string"/><xs:element name="lastname" type="xs:string"/><xs:any minOccurs="0"/></xs:sequence></xs:complexType></xs:element>

我们可以在"person"元素的内容里扩充任意元素(在<lastname>的后面);

请看下面名为"children.xsd"的schema文件:

<?xml version="1.0" encoding="ISO-8859-1"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="children"><xs:complexType><xs:sequence><xs:element name="childname" type="xs:string"maxOccurs="unbounded"/></xs:sequence></xs:complexType>
</xs:element>
</xs:schema>

下面的XML文件(叫做"Myfamily.xml"),用上了来自"family.xsd" 和"children.xsd"两篇不同schema的组件

<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns="http://www.microsoft.com"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:SchemaLocation="http://www.microsoft.com family.xsd
http://www.w3schools.com children.xsd">
<person>
<firstname>Hege</firstname>
<lastname>Refsnes</lastname><children><childname>Cecilie</childname>
</children>
</person>
<person>
<firstname>Stale</firstname><lastname>Refsnes</lastname>
</person>
</persons>

<any> 和<anyAttribute>元素是用于制造可扩展文档的!它们允许文档含有没有在主要XML schema里声明过的其它新元素。

元素替代:substitutionGroup

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo"><xs:sequence><xs:element ref="name"/></xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo"/>
<xs:element name="kunde" substitutionGroup="customer"/>

根据上面的约束,可以有两份不同的合法的XML文件:

<customer><name>John Smith</name></customer>

Or

<kunde><navn>John Smith</navn>
</kunde>

关闭替代元素:为了防止其他元素被已指定的元素替代(Element Substitution),可以用block属性;
<xs:element name="name" type="xs:string" block="substitution"/>

关于元素替代的注意事项:

1、可替代元素类型应和标题元素的类型相同,或是从中派生出来的。如果可替代元素类型和标题元素的类型相同,你就不需要再指明可替代元素的类型了;
2、可替代元素组里的所有元素(标题元素和可替代元素)必须声明为“全域元素(global element)”,否则它是不会作用的;
“全域元素”是"schema"元素下面的直接子元素。“本地元素”是嵌套在别的元素里的元素

更多参考http://www.cnblogs.com/caoxch/archive/2006/11/17/563856.html

转载于:https://www.cnblogs.com/LittleFeiHu/archive/2010/12/03/1894840.html

Schema指示器(Indicators)相关推荐

  1. 223_动态设置页面指示器indicators

    223_动态设置页面指示器indicators 有时候我们的ViewPager或者什么页面是动态的 是从服务器返回的 那么我们就不知道一共有多少个指示器,也就是多少个原点 for (int i = 0 ...

  2. XSD(Schema)教程

    http://www.cnblogs.com/caoxch/archive/2006/11/17/563856.html XSD(Schema)教程 [转] schema教程 XML Schema是以 ...

  3. Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)

    前言:经常会看到有一些app的banner界面可以实现循环播放多个广告图片和手动滑动循环.本以为单纯的ViewPager就可以实现这些功能.但是蛋疼的事情来了,ViewPager并不支持循环翻页.所以 ...

  4. Python基础教程— Struct模块

    struct模块提供了用于在字节字符串和Python原生数据类型之间转换函数,比如数字和字符串. 该模块作用是完成Python数值和C语言结构体的Python字符串形式间的转换. 这可以用于处理存储在 ...

  5. VScode配置C++环境

    文章目录 第一步:下载安装 第二步:环境配置 第三步 下载安装VSCode(已经装好了请跳到第四步) 第四步:安装VSCode cpp相关的插件 第五步:配置c++的.vscode文件 第六步:配置c ...

  6. 仿淘宝实现鼠标移入图片,图片放大功能

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 一口气说完网络安全设备的功能和作用

    防火墙 防火墙,是在不同网络(如可信任的内部网络和不可信任的公共外部网络)或同一网络的不同安全域之间建立一个安全控制点,通过允许.拒绝或重新定向经过防火墙的数据流,实现对进.出内部网络的服务和访问的审 ...

  8. EDR(端点、端点检测与响应中心、可视化展现)

    EDR基本原理与框架 EDR定义    端点检测和响应是一种主动式端点安全解决方案,通过记录终端与网络事件(例如用户,文件,进程,注册表,内存和网络事件),并将这些信息本地存储在端点或集中数据库.结合 ...

  9. SChema中group指示器的使用

    <?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSpy v2011 (h ...

最新文章

  1. 杭州电子科技大学计算机组成原理期末试卷,杭州电子科技大学计算机组成原理期末样卷(A)...
  2. 打破信息孤岛完成EAI
  3. wordpress后台404页面
  4. DevOps,到底是开发还是运维?
  5. 分享干货:靠刷算法题,真的可以刷进大厂吗?
  6. lsm tree java_BasicTreeUI
  7. Mybatis: 接口编程的实现
  8. JavaScript数据结构——散列表(Hash table,也叫哈希表)
  9. protected的继承方式有什么特点_草莓的授粉方式有哪些?各有什么特点
  10. 2016CCF-CCSP竞赛:第1题-虚拟机设计(共3题)
  11. fastdfs5.10 centos6.9 安装配置
  12. 加速晶圆代工业务创新 开创智能互联世界
  13. 黑苹果hackintosh wifi驱动安装
  14. 固态硬盘简称是不是ssd_小白科普:没想到你是这样的固态硬盘
  15. 第一章 信息化与信息系统习题
  16. 前端H5面试题Js:JavaScript字符串的常用方法有哪些?
  17. 让我带你一起了解一下 ls -l 命令输出的内容都有哪些意义,以及文件权限如何调整
  18. 我的中国“芯”——资深后端工程师成长分享——“胡”说IC工程师完美进阶
  19. Openstack API 开发 快速入门
  20. 20164305 徐广皓《网络对抗》Exp9 Web安全基础实践

热门文章

  1. python读取lst文件
  2. Python量化交易平台开发教程系列5-底层接口对接
  3. 远程VPS和本地电脑之间无法粘贴复制及分享文件
  4. python:numpy的corrcoef计算相关系数
  5. c语言数组判断不及格人数,C语言编程 运用数组求不及格人数
  6. Bandizip去除广告,注册图标,状态栏文本
  7. 山东大学为什么火了_关于最近很“火”的话题,山东大学学伴制度的看法
  8. CTFSHOW 萌新赛 萌新记忆
  9. android的app图标大全,安卓app图标
  10. 初识Typora 符号