javaWeb -- XML详细介绍

笔记摘要:

    这里主要介绍了XML的概念,语法,以及DTD(XML文件约束)技术


1.xml概述

        1.1 xml:xml一种数据存储格式,这种数据存储格式在存储数据内容的同时,还能够保存数据之间的关系
        1.2 xml保存数据的方法:xml利用标签来保存数据的内容,利用标签之间的嵌套关系来保存数据之间的关系。
        1.3 xml的应用场景:
                1.3.1 利用xml跨平台的特性,用来在不同的操作系统不同的开发语言之间传输数据。如果说java是一门跨平台的语言,那xml就是跨平台的数据。
                1.3.2 利用xml可以保存具有关系的数据的特性,还常常被用来做为配置文件使用。
        1.4 xml文件:把xml格式的数据保存到文件中,这样的文件通常起后缀名为.xml,这样的文件就叫做xml文件,xml文件是xml数据最常见的存在形式,
                   但是,这不是xml的唯一存在形式(在内存中或在网络中也可以存在),不要把xml狭隘的理解成xml文件。
        1.5 xml校验:浏览器除了内置html解析引擎外还内置了xml解析器,利用浏览器打开xml格式的数据,就可以进行xml校验。


2.xml语法

     2.1 文档声明:一个格式良好的xml必须包含也只能包含一个文档声明,并且文档声明必须出现在xml文档第一行,其前不能有其他任何内容。
     2.1.1 最简单的写法:<?xml version="1.0" ?>其中的version代表当前xml所遵循的规范版本。
                 <?xml version="1.0" ?>
                  version 代表当前xml所遵循的xml标准。
                  在第二个问号之前应该有一个空格
          注意:问号、引号、空格都必须为英文半角


     2.1.2 使用encoding属性指定文档所使用的字符集编码:<?xml version="1.0" encoding="gb2312" ?>
                    注意:encoding属性指定的编码集和xml真正使用的编码应该一致,如果不一致就会有乱码问题。
                         encoding属性默认值为老外喜欢的iso8859-1
     2.1.3 使用standalone属性指定当前xml文档是否是一个独立文档:<?xml version="1.0" standalone="no" ?>,standalone默认值为yes表示是一个独立文档。
注意:很多的解析器会忽略这个属性,但是学习知识要按标准去学,所以这个属性也要掌握。

     2.2 元素
          2.2.1 元素分为开始标签和结束标签,在开始标签和结束标签之间的文本称为标签体.
              自闭标签:如果一个标签即不含标签体也不包含其他标签,那这样的标签可以把开始标签和结束标签进行合并,这样的标签叫自闭标签。
              例如:<a>xxxxx</a> ----->  <a/>
          2.2.2 一个元素也可以包含若干子元素,但是要注意所有的标签都要进行合理嵌套。
          2.2.3 一个格式良好的xml文档应该具有并且只能有一个根标签,其他标签都应该是这个跟标签的子孙标签。
          2.2.4 元素的命名规范:
                    区分大小写,例如,<P>和<p>是两个不同的标记。
                    不能以数字或标点符号或"_"开头。
                    不能以xml(或XML、或Xml 等)开头。
                    不能包含空格。
                    名称中间不能包含冒号(:)
     2.3 属性
                    一个元素可以包含多个属性,属性的值要用单引号或双引号括起来。如果属性的之中包含双引号,就要用单引号了。
                    属性的命名规范:参照元素的命名规范。

     2.4 注释
                    格式:<!--这是一段注释-->
                    注意:注释不能出现在文档声明之前。
                    实验:把注释写到文档声明之前,用ie打开是没问题,但是用chrome打开是报错的。
                         这就看出来了不同的解析器有不同的处理,我们学习的时候还是按标准去学。
                    注释不能嵌套注释

      2.5 CDATA区、转义字符
                    都可以用来转义特殊字符。
                    2.5.1 CDATA区<![CDATA[这是要转义的内容]]>
                    被CDATA区括起来的内容,将会被浏览器当作文本来处理。
                    2.5.2 转义字符
                    & --> &amp;
                    < --> &lt;
                    >--> &gt;
                    " --> &quot;
                    ' --> &apos;
           2.5.3 CDATA区和转义字符的区别
                    (1)CDATA区可以成段的进行转义,而转义字符一次只能转义一个字符
                    (2)CDATA区转义的字符可以保存数据本来的格式只是通知解析器按文本去处理。转义字符改变了数据本身的内容,利用其他字符替代了转义字符。

         2.6 处理指令:一段指令通知解析器以何种方式解析xml
                    <?xml-stylesheet type="text/css" href="1.css" ?>指定解析器使用1.css去渲染当前的xml数据
                    其实文档声明就是一个最常见的处理指令。

3.DTD技术

        3.1 DTD是一门xml约束技术,用来约束xml写法。

        3.2 如何在xml中引入一个DTD
                    3.2.1 外部引入:dtd约束文件存在在一个外部文件中,我们在xml中引入该约束。
                    (1)本地文件引入:该dtd文件存在在本地硬盘中
                                        <!DOCTYPE 根元素的名称 SYSTEM "文件所在的路径">
                    (2)公共位置文件引入:dtd约束文件存在在一个公共网络上,我们在xml引入该约束
                                        <!DOCTYPE 根元素的名称 PUBLIC "dtd名称" "dtd所在的URL">
                    3.2.2 在xml内部写dtd约束
                                        在文档声明下<!DOCTYPE 根元素名称 [dtd约束的内容]>

         3.3 利用dtd约束xml中的元素
                <!ELEMENT 元素名称 元素约束> 
                3.3.1 元素约束
                    (1)存放类型
                                        ANY:当前声明的元素可以包含任意子元素
                                        EMPTY:当前声明的元素不能包含任何元素
                    (2)存放内容:利用小括号括起来的元素的名称,用来表示该元素中可以存放哪些内容
                                 <!ELEMENT "元素名" (可以包含的元素的名称)>
                                  小括号中的内容,可以有多个子元素的名称
                                  如果用“,”分割这些子元素就表明这些子元素必须按指定的顺序出现
                                  如果用“|”分割这些内容就表明这些子元素只能出现其中之一
                                  使用“+”来表明内容可以出现一次或多次
                                  使用“*”来表明内容可以出现零次或多次
                                  使用“?”来表明内容可以出现零次或一次
                                  #PCDATA表明该元素可以包含标签体
                                  可以利用()进行组操作:
                                  <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>

        3.4 利用dtd约束xml中的属性
                                 <!ATTLIST 元素名
                                  属性名 属性类型 属性约束

                3.4.1 属性类型
                  (1)CDATA:表明该属性的值是一个普通的文本值。
                  (2)ENUMERATED:表明该属性的值只能取指定范围内的其中之一
                  (3)ID:表明该属性值在整个文档中必须唯一,注意ID类型的属性的值必须以字母下划线开头,并且不能以数字开头,不能包含空白字符

                3.4.2 属性约束
                  (1)#REQUIRED 来表明当前这个属性是必须存在的属性
                  (2)#IMPLIED 来表明当前这个属性是可选的属性
                  (3)#FIXED "固定值" 来表明当前这个属性具有一个默认的值,可以不明确指定该属性,解析器会帮你加上,如果你硬是指定了一个其他的值,会出错。
                  (4)"默认值" 来表明当前属性具有一个默认的值,如果给这个属性指定一个值就用指定的值,如果不指定呢,就使用默认值。

        3.5 实体:可以理解为对一段内容的引用,如果有一段内容到处在被使用,可以将其设计为一个实体
                3.5.1 引用实体:用在xml中的实体
                声明实体:<!ENTITY 实体名称 "实体内容">
                引用引用实体:&实体名称;

        3.5.2 参数实体:用在DTD文件中的实体
                声明实体:<!ENTITY % 实体名称 "实体内容">
                引用参数实体: %实体名称;

posted @ 2013-03-11 23:41  积小流,成江海  阅读(205)  评论(0编辑  收藏  举报