XML的schema约束

* XML的schema约束

 

           * schema和DTD的对比(面试题):

                           * DTD约束只能引进一个文件,schema可以引进多个。

                            * schema符合XML的语法结构。           

                            * 可以解析schema文档。

                            * schema对名称空间支持的好。(名称空间可以理解为java中的包结构java.utli.sql之类的)                    

                            * schem支持更多的数据类型,自定义的数据类型。

  

  * 预先定义元素和属性

       * schema的后缀名是.xsd

       * 只能有一个根节点,根节点名称就是schema。

* schema约束的开发步骤  

  1、 开发schema的约束文档

              * 首先引入W3C的名称空间(固定的值),然后可以使用其提供的标签了。

                      * 在根节点上,使用属性xmlns(xml namespace:XML名称空间)

                      * xmlns="http://www.w3.org/2001/XMLSchema"

               * 定义元素

                         * <element name="书架"></element>

                * 判断是否是复杂还是简单的元素

                         * 如果是简单元素,则element处有属性type="数据的类型"  

                         * 如果是复杂

                                   * 声明标签是复杂的元素    <complexType></complexType>

                                   * 子元素之间的关系    <sequence></sequence>   

    * 起名:targetNamespace  目标名称空间

                          * 值是任意的切不能重复:http://www.itcast.cn/1110  

    * elementFormDefault  : 代表(xx.xml文档中)元素书写的格式

 

                          * qualified(使用)      :质量好的

 

                          * unqualified         :质量不好的 

  2、在XML文档中引入自己编写的schema文档

                    * 引入W3C名称空间,告知我是实例文档。

                              * xmlns="http://www.w3.org/2001/XMLSchema-instance"

                    * 引入自己编写的schema的文档

                              * xmlns="http://www.itcast.cn/1110"

                     * 问题:元素上不能有相同的属性名称

                               * 解决:起别名--   :aa

                               * 技巧:在出概率小的标签上起别名 

    * 引入自己编写的schema文档的地址

      * schemaLocation属性是W3C提供的,如果W3C名称空间要是有别名,先把别名写上。      

        *引进自己写的sehema文档地址: 别名:schemaLocation=

                                          即:xsi;schemaLocation=”{namespace} {location} -->

                                          xsi:schemaLocation="名称空间 + schema文件的地址"

    

    * 名称空间的概念

      

      * 编写完schema文档,起唯一的名称空间。

                * 在编写XML文档,通过xmlns来引入名称空间。

 schema约束文件book.xsd

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
    * 引入W3C的名称
        * 在根节点上,使用属性xmlns(xml namespace)
        * xmlns="http://www.w3.org/2001/XMLSchema"
    * 定义元素
        * <element name="书架"></element>
    * 判断是否是复杂还是简单的元素
        * 如果是简单    在element有属性    type="数据的类型"    
        * 如果是复杂    
            * 声明标签是复杂的元素    <complexType>
            * 子元素之间的关系    <sequence>
    * 起名:targetNamespace    目标名称空间(起名)
        * 值是任意的:http://www.itcast.cn/1110
        
    * elementFormDefault    : 
        * qualified(使用)    :质量好的
        * unqualified        :质量不好的
        
    * 编写属性
        * <attribute name="出版社" type="string" use="required" ></attribute>
            * name    属性名称
            * type     属性类型
            * user    属性约束
 -->
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.itcast.cn/1110" elementFormDefault="qualified">
    
    <!-- 复杂元素 -->
    <element name="书架">
        <!-- 复杂元素 -->
        <complexType>
            <!-- 有顺序的 -->
            <sequence maxOccurs="unbounded">
                <element name="书">
                    <!-- 复杂的元素 -->
                    <complexType>
                        <!-- 有顺序的 -->
                        <sequence>
                            <!-- 简单元素 -->
                            <element name="书名" type="string"></element>
                            <element name="作者" type="string"></element>
                            <element name="售价" type="double"></element>
                            <element name="简介" type="string"></element>
                        </sequence>
                        
                        <!-- 书的属性 -->
                        <attribute name="出版社" type="string" use="required" ></attribute>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>

配置文件book.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- 
    * 引入W3C名称空间,我是实例文档。
        * xmlns="http://www.w3.org/2001/XMLSchema-instance"
    * 引入自己编写的schema的文档
        * xmlns="http://www.itcast.cn/1110"
    * 问题:元素上不能有相同的属性名称
        * 解决:起别名        :aa
        * 技巧:在下面出现标签的概率小起别名
    * 引入自己编写的schema文档的地址
        * schemaLocation属性是W3C提供的,如果W3C名称空间要是有别名的话,先把别名写上。
            xsi:schemaLocation="名称空间   schema文件的地址"
 -->

<书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns="http://www.itcast.cn/1110"
        xsi:schemaLocation="http://www.itcast.cn/1110 book.xsd"
    >
    <书 出版社="清华出版社">
        <书名>javaweb开发大全</书名>
        <作者>班长</作者>
        <售价>99.8</售价>
        <简介>这是不错啊</简介>
        
    </>
    <书 出版社="清华出版社">
        <书名>javaweb开发大全</书名>
        <作者>班长</作者>
        <售价>99.8</售价>
        <简介>这是不错啊</简介>
    </>
    <书 出版社="清华出版社">
        <书名>javaweb开发大全</书名>
        <作者>班长</作者>
        <售价>99.8</售价>
        <简介>这是不错啊</简介>
    </>
</书架>

 

posted on 2019-06-12 17:04  backend  阅读(582)  评论(0编辑  收藏  举报

导航