有效的XML文档——Schema

Schema概述

XML Schema是针对DTD存在的缺点而设计。

DTD缺点:

⑴DTD不是用XML语言编写的,需要不同的分析器技术。

⑵DTD不支持名称空间。

⑶DTD在支持继承和子类方面存在局限性。

⑷DTD没有数据类型的概念,无法对特定元素施加数据类型,对强制性结构化数据无计可施。

与DTD相比,XML Schema具有一致性、完备性、规范性和准确性、面向对象特征、扩展性。

XML Schema的基本结构

XML Schema文档示例:

XML Schema文档是一种特殊的XML文档,要遵循XML语法规则,是一个独立于XML文档的文本文件,扩展名为. xsd。XML Schema文档基本结构:

<?xml version="1.0"  encoding="GB2312"?>

<xsd: schema name=" slschema" xmlns: xsd="http://www.w3.org/2001/XMLSchema">

...

</xsd: schema>

XML Schema的主要控件:

⒈类型

XML Schema的类型包括复杂类型和简单类型

复杂类型:带有子元素或使用属性的元素。例如:

<student>

<sno>2013001</sno>

<sname>张三</sname>

</student>

简单类型:不包含任何子元素和属性,只含有文本内容。例如:<mobilephone>13613891234</mobilephone>

⒉元素声明

元素是XML Schema的重要组成部分,一个XML文档中可能不包含任何属性或文本数据,但必须包含元素(至少包含一个根元素)。

XML Schema通过element元素声明来定义XML文档中的元素:

<element name="元素名称" type="数据类型" minOccurs="int" maxOccurs="int"/>

  • name属性用于指明XML元素的名称
  • type属性用于指明XML元素的数据类型,可以选取XML内置的数据类型或用户自定义的数据类型
  • minOccurs属性用于指明XML元素的最小出现次数,最小为值0,是可选属性。
  • maxOccurs属性用于指明XML元素的最多出现次数,最小值为1,最大值为unbounded,表示无限次,是可选属性。

⒊属性声明

XML Schema有关于元素声明属性的语法,需要注意:第一,只有复杂类型的元素才能拥有属性,简单类型的元素没有属性;第二,元素可以有简单类型或复杂类型,而属性只能有简单类型。属性声明语法格式如下:

<element name="element_name" type="dataType">

<xsd:complexType name="dataType">

<xsd:attribute name="attribute_name"type="simple_type" use="use_method" default="value" fixed="value">

</xsd:attribute>

</xsd:complexType>

  • element_name指对应XML 文件中元素的名称。
  • attribute_name指属性的名称。
  • simple_type指属性的数据类型,可以是内置的数据类型,也可以是由 simple_type元素所定义的自定义数据类型。
  • use_method指明XML 元素中属性的实际取值要求,可以是 optional、required、prohibited。其中, optional 表示该属性值可有可无,是默认值; required 表示该属性值必须存在,此属性值至少出现一次;prohibited 表示该属性值不可出现,用于在 restriction 元素中限制属性的使用。
  • default 指属性的默认值。
  • fixed指如果属性存在,则其内容只能是由本属性指定的值,不可更改。

注意:声明属性时,一定要设置属性名称(name)与属性类型(type)

⒋组定义

原素组是指把若干个若干个元素组成一组,声明格式如下:

<xsd:group name="组名称">

<xsd:sequence>

<xsd:element nane="element1" type="datatype"/>

<xsd:element nane="element2" type="datatype"/>

...

</xsd:sequence>

</xsd:group>

注意:元素组必须是schema根元素的直接子元素。其他类型元素若需要将元素组作为子元素,必须通过引用来实现。

⒌注释

便于阅读理解XML Schema添加注释语句解释说明。可以使用<!--  -->注释方式,还可以使用专门的<annotation/>元素。

<annotation/>元素含有两个子元素,如下:

  • <documentation/>:该元素里主要存放适合阅读的信息。
  • <appinfo/>:该元素里主要存放针对其他应用程序的信息。

<annotation/>元素里可以出现任意多个<documentation/>和<appinfo/>子元素,且没有顺序要求。

XML Schema中的数据类型

XML Schema定义了两种主要的数据类型:简单类型和复杂类型。两个类型的主要区别是复杂类型可以像数据一样包含其他函数,而简单类型只能包含数据。

简单类型:

XML Schema的简单类型分为两种:一种是XML Schema内置的简单数据类型。如:

string:字符串数据

boolean:二元类型True或False

date:历法日历,格式为CCYY-MM-DD

dateTime:历法日期和时间

time:24小时格式时间,可根据时区调节

decimal:任意精度和位数的十进制数

integer:整数

float:标准32为浮点数

另一种是用户自定义的简单数据类型,自定义类型使用<simpleType>标记。如:

<xsd:simpleType name="name">

<xsd:restriction base="xsd:datatypes">

<xsd:facets_element value="value"/>

...

</xsd:restriction>

</xsd:simpleType>

  • name属性用于指明用户定义的数据类型名称。
  • restriction 子元素定义用户自定义元素(simpleType)使用的数据类型。
  • base属性指明自定义数据类型派生于哪个基本数据类型。
  • facets_element子元素用于描述自定义数据类型的约束规则,如长度、范围、枚举类型、联合类型等。

自定义数据的约束规则:

minInclusive 内容范围的最小值,且包含此值

maxInclusive 内容范围的最大值,且包含此值

minExclusive 内容范围的最小值,且不包含此值

maxExclusive 内容范围的最大值,且不包含此值

length元素内容的长度

minLength元素内容的最小长度

maxLength元素内容的最大长度

enumeration枚举列表,元素内容从此列表内容中选择其中之一

list允许用户输入多个数据,数据间用空白间隔

pattern正规语法定义数据的组合类型

union元素内可包含多种不同数据类型, 但同时只能存在一种

totalDigits限制有效数字的最大位数

fractionDigits限制小数点后的位数

pattern用于指定数据类型的值必须匹配指定的正则表达式。如下图:

ebfea1716fae4b9491d8e390da337b42.jpg

 复杂类型:

复杂类型元素是指含有子元素或属性的元素,XML Schema中用< complexType>标记来定义,可以指定元素与元素或元素与属性的从属关系。语法格式如下:

<xsd:elementname="元素名称" type="数据类型">

<xsd:complexTypename="数据类型">

<!--子元素描述部分-->

<xsd:sequence>

...

</xsd:sequence>

</xsd:complexType>

</xsd:element>

  • "元素名称"用于指明复杂类型元素的名称。
  • "数据类型"指自定义数据类型的名称。
  • <sequence>子元素表示在其定义范围内的所有元素都必须按顺序出现。除了<sequence>子元素外,其他可选的子元素如下图所列, 用于定义复杂类型所包含的内容模式。

7e5a045fca994202b32daf510bdd587a.jpg

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值