• xml约束的概念


    1 xml 约束的概念

    • XML 指可扩展标记语言(EXtensible Markup Language)
    • XML 是一种标记语言,很类似 HTML
    • XML 的设计宗旨是传输数据,而非显示数据
    • XML 标签没有被预定义。您需要自行定义标签。
    • XML 被设计为具有自我描述性质。

      因为xml文件是可扩展的,且里面的标签可以自定义的,只要符合xml的最基本要求,那么就可以写一个xml文件。但是在实际应用中,我们需要针对某一个特定的应用,给xml中引入一下语法,这些语法用来检测特定应用的xml文件编写是否正确。例如mybatis中使用的DTD约束,spring中使用的shema约束。

      xml约束就是在特定应用下,为xml编写的一下语法,用来检测这个应用下的xml文件是否正确。

    2 xml约束常用的两种约束

      (1) DTD约束

      描述约束的文件是以.dtd为扩展名,dtd约束作用于xml文档,会有两种方式

    (一)把dtd约束直接写到xml文档中

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE users[
        <!ELEMENT users (user+) >    
        <!ELEMENT user (name,age,addr) >    
        <!ELEMENT name (#PCDATA) >    
        <!ELEMENT age (#PCDATA) >    
        <!ELEMENT addr (#PCDATA) >    
    ]>
    <users>
        <user>
            <name>zhangsan</name>
            <age>23</age>
            <addr>shanghai</addr>
        </user>
        <user>
            <name>lisi</name>
            <age>24</age>
            <addr>beijing</addr>
        </user>
    </users>

    (二)在xml文档中引用一个外部的dtd约束文档(dtd约束文档以.dtd作用扩展名),

    外部引用又包括两种,

    一种是SYSTEM 系统外部约束文档,也就是xml文档和dtd约束文档都在同一台机器上,

    一种是PUBLIC公共外部约束文档,也就是xml文档和dtd约束文档不在同一台机器上,需要通过网络把dtd文档下载到本地

    引用形式如下

    <!DOCTYPE 根元素 SYSTEM "dtd文件路径">
    <!DOCTYPE 根元素 PUBLIC "dtd文件的描述信息" "dtd的url">

    SYSTEM 系统外部约束文档示例

         PUBLIC公共外部约束文档  示例

    <!DOCTYPE mapper  
      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

      DOCTYPE后面的mapper就是整个xml的根标签,  PUBLIC表示引用的dtd约束是一个公共约束

      (2)shema约束

    shema约束简介

    Schema它也来约束xml文件的,DTD在约束xml的时候一个xml中只能引入一个DTD,同时DTD它无法对属性以及标签中的数据做数据类型的限定。
    Schema它是用来代替DTD来约束xml。
    Schema文件本身就是使用xml文件书写的,同时它对需要约束的xml中的数据有严格的限定。
    学习Schema主要来学习W3C组织定义的如何在Schema中去约束xml的标签以及属性,还有属性的数据类型,以及标签中子标签的顺序。 要定义一个Schema文件,这时它的扩展名必须是.xsd在这个文件中根元素必须是schema。 使用Schema来约束xml,Schema在书写的时候,只需要使用W3C组织提前定义的限定标签的,以及限定的属性的那个标签即可。

    shema约束定义案例

    在定义Schema文件的时候,由于这个Schema文件本身就是xml,它也要受到别的约束。而这个约束是W3C组织提前定义好的,
    在Schema文件中需要提前引入进来在根标签中使用属性进行进入:
    <schema  xmlns="http://www.w3.org/2001/XMLSchema"   引入W3C定义的schema书写的约束
    targetNamespace="http://www.itcast.org/book" 给当前的Schema文件起名字(命名空间)
    作用是当哪个xml要引入这个schema约束的时候,必须通过当前targetNamespace 后面书写的uri地址来引入
    <?xml version="1.0" encoding="UTF-8"?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://www.itcast.org/book" 
        elementFormDefault="qualified">
        <element name="books">
            <complexType>
                <sequence>
                    <element name="book">
                        <complexType>
                            <sequence>
                                <element name="name"></element>
                                <element name="author"></element>
                                <element name="price"></element>
                            </sequence>
                        </complexType>
                    </element>
                </sequence>
            </complexType>
        </element>
    </schema>

    在xml文件中引入当前的这个Schema

    schema instance(schema 实例),这个概念类似于类实例(对象),http://www.w3.org/2001/XMLSchema 这个定义schema约束文件的元约束文件的命名空间,通过这个元约束的命名空间定义的schema约束文件就是schema实例。也就是说schema实例其实就是schema约束文件,就像类实例就是类对象一样。

    <books xmlns="http://www.itcast.org/book"   它是schema文件中的targetNamespace 属性的值
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   说明当前的xml是schema一个实例文档,其真正的含义是xml schema instances 命名空间,也就是所有的shema实例都在这里面,是和下面的 sxi:shemaLocation进行绑定的
            xsi:schemaLocation="http://www.itcast.org/book book.xsd"   这个是在引入当前的schema文件的真实路径
        
    >

    在每个xml文件中,我们都会看到   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  这个命名空间是实例命名空间,我们在xml中引入的schema实例,都必须和 "http://www.w3.org/2001/XMLSchema-instance" 进行绑定,绑定是通过一个前缀进行绑定。在books.xml中,这个前缀是xsi  。

    上图未没有进行绑定,报错信息如下:

    The prefix "test" for attribute "test:schemaLocation" associated with an element type "books" is not bound.

    books元素的"test:schemaLocation"属性的前缀没有绑定

    其实schema实例命名空间的前缀可以修改,例如把前缀修改成test,那么上图就不会报错,示例如下图

     

      描述约束的文件以 .xsd为扩展名,在xml中引入多个shema的约束如下

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd"> 
    </beans>

      在引入shema约束时,并没有再另外使用新的标签(DTD约束使用<!DOCTYPE>标签引入约束),而是在根标签中使用xmlns属性来引入约束,xmlns是xml namespace的简写。并通过 xsi:schemaLocation="" 把schema约束的位置进行指定,一般情况下会按照指定的位置到网络中下载约束文件,如果没有网络,需要自己指定本地约束文件。

    
    
    
  • 相关阅读:
    用sqlite3创建数据库实现数据固化功能
    MSP430F169单片机中的LED动态显示
    在GTK中设计简单的菜单栏
    在GTK下设置窗口背景图片
    在GTK+2.0中实现简单的多用户登入系统
    ubuntu 执行sudo apt-get install libgtk2.0-devs安装gtk+-2.0时报错Failed to fetch IP:https://的解决
    Linux下Makefile,静态库,动态库的实现
    Spring 之 BeanFactory 源码
    pig trial-group,foreach
    scala
  • 原文地址:https://www.cnblogs.com/cplinux/p/9734688.html
Copyright © 2020-2023  润新知