xml之schema

好,继续

前一篇初步认识了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,终于到了~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值