关于xml的约束文件DTD与Schema

1、 XML

1.1 xml简介

       xml全称为Extensible Markup Language,可扩展的标记语言。
       类似于html语言,html语言用各种规定好的标签来封装文本数据。而不同的是html使用的标签html语言规定好的,每个标签都有自己特定的功能。
       xml这门语言它没有定义任何的标记,而标记是由使用者自己来定义,但是由于标签名称以及属性名称都由用户自己来命名,导致别人在使用的时候很不方便。
       所以给xml语言定义了一些约束文档,这些约束文档就专门用来约束当前这个xml中能够书写的具体的标签以及属性等信息。

1.2 xml作用

  • 程序的配置文件(最常见)
    主要配置一些具有复杂层级关系的数据
  • 数据传输:
    不同语言之间的数据交换
  • 数据存储:
    可以用作小型数据库

2、约束文件

基于以上的简介,由于xml的标签由用户自己定义,因此在开发的时候,每个人都可以根据自己的需求来定义xml标签,这样导致项目中的xml难以维护,因此需要使用一定的规范机制来约束xml文件中的标签书写。
而约束文件分为两类:

  • DTD约束
    DTD(Document Type Definition)
  • Schema约束
    XSD (XML Schema Definition)

2.1 DTD约束

2.1.1 先自己定义一个xml文档:

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user>
        <name>zhangsan</name>
        <age>23</age>
        <addr>shanghai</addr>
    </user>
    <user>
        <name>lisi</name>
        <age>24</age>
        <addr>beijing</addr>
    </user>
</users>

2.1.2 书写DTD来约束xml文件

拓展名为dtd,在xml文件中有多少个标签,就在dtd中写多少个ELEMENT标签

<?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT users (user+) >
<!ELEMENT user (name,age,addr) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA)>
<!ELEMENT addr (#PCDATA)>

2.1.3 引入DTD约束

DTD主要用来约束xml文件,DTD可以单独写在文件中(外部引入),也可以直接定义在xml中(内联),可以在xml中引入第三方的公共DTD。

  • 内联方式:
    在xml根标签中直接书写

    <!DOCTYPE  根标签名 [
    具体的标签的约束
    ]>
    
    <?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>
    
  • 外部DTD的引入方式:
    外部DTD主要指的一个独立的DTD文件。
    首先要书写DTD文件,然后在要被约束的xml文件中引入

    <!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
    
    • 文档根结点 指的是当前xml中的根标签。
    • SYSTEM 引入的系统中存在文件
    • “DTD文件的URL” DTD存放的位置
  • 引入公共的DTD:

    <!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
    
    • 文档根结点 指的是当前xml中的根标签。
    • PUBLIC 表示当前引入的DTD是公共的DTD

2.1.4 DTD语法

当定义DTD约束xml时候,这时需要在DTD中使用ELEMENT来定义当前xml中可以出现的标签名称。

  • 格式:
    <!ELEMENT 标签名 约束> 
    
    约束来限定当前标签中可以有的子标签,或者当前标签中可以书写的内容
    在定义标签名的时候,约束中可以使用一些符号标签具体出现次数
    • ? 零次或者一次
    • * 零次或者多次
    • + 一次或者多次
      users (user+) 表示当前的users标签下可以有一个或者多个user标签
    • , 用来限定当前的子标签出现的顺序
      user (name,age,addr) user标签下只能有name age addr 子标签,并且必须按照name age addr的顺序书写
    • | 二选一
      user (name|age,addr) user下可以name或者age ,但必须有addr,并且addr必须name或age后面
    • #PCDATA
      表明该元素可包含任何字符数据,但不能在其中包含任何子元素。只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明
    • EMPTY
      表明该元素不能有任何子元素或文本,仅可以使用属性。
    • ANY
      表明该元素中可以包含任何DTD中定义的元素内容 如:<!ELEMENT note ANY>
    • <!ELEMENT age EMPTY >
    当前的age标签是个空标签,它不能有文本内容。

2.2 Schema约束

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

2.2.1 书写xml文件

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book>
        <name>JavaWEB</name>
        <author>老毕</author>
        <price>182</price>
    </book>
    <book>
        <name>SSH</name>
        <author>老于</author>
        <price>152</price>
    </book>
</books>

2.2.2 定义schema文件

在定义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>

2.2.3 在xml中引入schema文件

  • 外联
    • 编写根标签

      <books>
      
    • 引用约束地址

      xsi:schemaLocation="默认空间  约束地址.xsd">
      
    • 引用实例名称空间(固定)
      在定义Schema文件的时候,由于这个Schema文件本身就是xml,它也要受到别的约束。而这个约束是W3C组织提前定义好的,
      在Schema文件中需要提前引入进来在根标签中使用属性进行进入:

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      
    • 默认名称空间

      xmlns="http://www.itcast.org/book"  
      
    例:
    <books 
    	xmlns="http://www.itcast.org/book"         
     	xsi:schemaLocation="http://www.itcast.org/book 	book.xsd"   
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    >
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值