xml学习笔记(7)Schema约束

xml学习笔记(7)Schema约束

1.关于XML Schema
    XML Schema也是一种用于定义和描述XML文档结构与内容的模式语言,其出现是为了克服DTD的局限性.
    ·XML Schema符合XML语法结构.
    ·DOM、SAX等XML API很容易解析出XML Schema文档中的内容.
    ·XML Schema对名称空间支持得非常好.
    ·XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型.
    ·XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制.
    ·XML Schema不能像DTD一样定义实体,比DTD更复杂,但XML Schema现在已是W3C组织的标准,它正逐步取代DTD.
    XSD(XML Schema Definition)

2.Schema约束
    ·XML Schema文件自身就是一个XML文件,但它的扩展名通常为.xsd.
    ·一个XML Schema文档通常称为模式文档(约束文档),遵循这个文档书写的xml文件称为实例文档.
    ·和XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema.
    ·编写一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,XML文档中编写的元素来自哪里,被谁约束.

3.Schema约束文档示例.
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.itcast.cn"
           elementFormDefault="qualified">
   <xs:schema name='书架'>
      <xs:complexType>
         <xs:sequence maxOccurs='unbounded'>
            <xs:element name='书'>
               <xs:complexType>
                  <xs:sequence>
                     <xs:element name='书名' type='xs:string' />
                     <xs:element name='作者' type='xs:string' />
                     <xs:element name='售价' type='xs:string' />
                  </xs:sequence>
               </xs:complexType>
            </xs:element>
         </xs:sequence>
      </xs:complexType>
   </xs:schema>
</xs:schema>

4.Schema的实例文档示例.
<?xml version="1.0" encoding="UTF-8" ?>
<itcast:书架 xmlns:itcast="http://www.itcast.cn"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.itcast.cn book.xsd" >
   <itcast:书>
      <itcast:书名>JavaScript网页开发</itcast:书名>
      <itcast:作者>张孝祥</itcast:作者>
      <itcast:售价>28.00元</itcast:售价>
   </itcast:书>
</itcast:书架>


5.名称空间
    在XML Schema中,每个约束模式文档都可以被赋予一个唯一的名称空间,名称空间用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示,在XML文件中书写标签时,可以通过名称空间声明(xmlns)来声明当前编写的标签来自哪个Schema约束文档。如:
    <itcast:书架 xmlns:itcast="http://www.itcast.cn">
       <itcast:书>...</itcast:书>
    </itcast:书架>
    此处使用itcast来指向声明的名称,以便于后面对名称空间的引用.
    注意: 名称空间的名字语法容易让人混淆,尽管以http://开始,那个URL并不指向一个包含模式定义的文件,事实上,这个URL:http://www.itcast.cn根本没有指向任何文件,只是一个分配的名字.

    为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在XML文档中的根结点中使用schemaLocation属性来指定,例如:
    <itcast:书架 xmlns:itcast="http://www.itcast.cn"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://www.itcast.cn book.xsd">
    schemaLocation此属性有两个值,第一个值是需要使用的命名空间,第二个值是供命名空间使用的XML schema的位置,两者之间用空格分隔。
    注意: 在使用schemaLocation属性时,也需要指定该属性来自哪里.

    使用默认名称空间:
    ·基本格式
      xmlns="URI"
    ·举例:
      <书架 xmlns="http://www.it315.org/xmlbook/schema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.it315.org/xmlbook/schema book.xsd">
         <书>
            <书名>JavaScript网页开发</书名>
         </书>
      </书架>     

    使用名称空间引入多个XML Schema文档.
      <书架 xmlns="http://www.it315.org/xmlbook/schema"
            xmlns:demo="http://www.it315.org/demo/schema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.it315.org/xmlbook/schemahttp://www.it315.org/xmlbook.xsd
                                http://www.it315.org/demo/schemahttp://www.it315.org/demo.xsd ">
         <书>
            <书名>JavaScript网页开发</书名>
            <作者>张孝祥</作者>
            <售价 demo:币种="人民币">28.00元</售价>
         </书>
      </书架>

    不使用名称空间引入XML Schema文档.
      <书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="xmlbook.xsd">
         <书>
            <书名>JavaScript网页开发</书名>
            <作者>张孝祥</作者>
            <售价 demo:币种="人民币">28.00元</售价>
         </书>
      </书架>

6.Schema语法
    (1)定义简易元素
       <xs:element name="xxx" type="yyy" />  
       xxx指元素名称,yyy指元素数据类型
       常用数据类型
       ·xs:string
       ·xs:decimal
       ·xs:integer
       ·xs:boolean
       ·xs:date
       ·xs:time
    (2)声明属性
       <xs:attribute name="xxx" type="yyy"/>
    (3)XSD限定/Facets
       限定(restriction)用于为XML元素或者属性定义可接受的值,对XML元素的限定被称为facets.
       enumeration 定义可接受值的一个列表
       fractionDigits 定义所允许的最大的小数位数。必须大于等于0。
       length 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
       maxExclusive 定义数值的上限。所允许的值必须小于此值。
       maxInclusive 定义数值的上限。所允许的值必须小于或等于此值。
       maxLength 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
       minExclusive 定义数值的下限。所允许的值必需大于此值。
       minInclusive 定义数值的下限。所允许的值必需大于或等于此值。
       minLength 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。
       pattern 定义可接受的字符的精确序列。
       totalDigits 定义所允许的阿拉伯数字的精确位数。必须大于0。
       whiteSpace 定义空白字符(换行、回车、空格以及制表符)的处理方式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值