好,继续
前一篇初步认识了xml和dtd,这次我们来认识下schema
XML Schema首先由微软提出,已经被w3c接受并成为一个标准, XML Schema文件使用了XML语法,其后缀名为.XSD,和DTD一样,是以XML文档约束的工具
DTD的约束能力不足,无法对XML实例文档作出更细致的语义限制,在DTD中通常使用两种数据类型,PCDATA(用在元素中),CDATA(用在属性中),这两种代表了日期,数字,字符等。schema就是针对缺点来设计的,schema完全使用xml作为描述手段,有牛人说schema必定取代dtd,好吧,既然这样,在我了解了一点dtd后,直接schema吧……
还是上一篇的例子
<?xml version="1.0" ecoding="utf-8">
<!--student context-->
<student
xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn student.xsl>
<name>
<first>e</first>
<middle>q</middle>
<last>yun</last>
</name>
<sex>boy</sex>
<age>22</age>
<address type="office">
<street>earth</street>
<country>china</country>
</address>
</student>
student.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">//这部分说明为根元素
<xs:element name="student">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name">
<xsd:complexType> //定义了下个复杂类型,用于确定属性集和元素内容
<xsd:sequence> //sequence组合器。规定元素必须按模式中指定的顺序显示,,如果是可选的,也可以不显示
//相似的组合器:all组合器,choice组合器
//all允许元素按任意顺序显示,默认情况下是必须且只显示一次
//choice允许指定多组声明中的一个,用于互斥
<xsd:element name="first" type="xsd:string"/>
<xsd:element name="middle" type="xsd:string"/>
<xsd:element name="last" type="xsd:string"/>
</xsd:sequence>
</complexType>
</element> //结束对name的定义
<xsd:element name="country">
</sequence>
</complexType>
</xsd:element> //结束对student的定义
</xsd:schema> //结束xsd
分析下这个schema,schema中元素的声明用关键字element来实现,在元素定义之前必须定义一个且只能定义一个schema根元素,根元素中包括模式的约束,xml模型命令空间的定义,版本信息,语言信息和其他一些属性
以下说此常用的扩展的元素定义方法
minOccuers和maxOccuer属性定义方法
<xsd:element name="user" type="xsd:string" minOccurs="1" maxOccurs="unbounderd"/>
上例中元素user类型为string,出现次数最少为1,最多为无限制
元素的引用
<xsd:schema xmlns:xsd="http//www.w3.org/2001/XMLSchema">
<xsd:element name="user" type="xsd:string"/>
<xsd:element name="name">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="user"/>
</xsd:sequence>
</xsd:complexType>
</element>
</xsd:schema>
上例中xml文档name节点中引用了user元素,对应的文档如下
<?xml version="1.0"?>
<name>
<user> string </user>
</name>
可是前面的 xsd中在name前不是也定义了uaer吗?这就是xsd的特点了,没有说明,一些元素可出现可不出现,所以有<xsd:sequence>,规定组中的元素以指定的顺序出现在包含元素中
替换元素
<xsd:element name="报刊“,type="xsd:string"/>
<xsd:element name="周刊",type="xsd:string" substitutionGroup="报刊"/> //subsititutionGroup是可选属性,规定可用来替换”报刊“
<xsd:element name="日刊",type="xsd:string" subsitutionGroup="报刊"/>
<xsd:element name="出版物" >
<xsd:complexType>
<xsd:choice minOccuers="1", maxOccurs="1"> //choice允许指定多组声明中的一个,用于互斥
<xsd:element ref="报刊"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
设置默认值和固定值
<xsd:element name="city" type="xsd:string" default="广州"/> // 设定默认值
<xsd:element name="country" type="xsd:string" fixed="中国"/> //设定固定值
好,看了这些,可以写schema了,下面我们来看xsl,终于到了~~