什么是XML?

618 阅读3分钟

一、HTML与XML的区别与联系

HTML (Hyper Text Markup Language)超文本标记语言
XML(Extentsible Markup Language)可扩展标记语言

1.html 不区分大小写,xml严格区分大小写
2.html 标签都是预定义的,xml 标签都是自定义,可扩展的,具体良好的人机可读性
3.html 用于数据的展示,xml用于数据的存储与传递

总结:二者只是在结构上大致相同,本质上存在明显区别。

二、XML的用途:

1、Java程序的配置描述文件
2、用于保存程序产生的数据
3、网络间的数据传输

三、XML文档结构:

1、第一行必须是XML声明
2、有且只有一个根节点
3、XML标签的书写规则与HTML相同

首先谈谈什么是XML声明。

XML声明说明XML文档的基本信息,包括版本号与字符集,必须写在XML的第一行。

<?xml version="1.0" encoding="UTF-8"?>

其次谈谈根节点。

举个例子,以hr.xml文件为例子,下文中的hr标签就是根节点,一个xml文档中只能有一个文档节点,可以用浏览器打开一个xml文档来检查其有无语法错误,当然idea中也可以根据是否爆红来检查语法。

<?xml version="1.0" encoding="UTF-8"?>
<hr>
   <employee no = "3309">
    	<name>张三</name>
        <age>31</age>
        <salary>4000</salary>
        <department>
            <dname>会计部</dname>
            <adress>XX大厦-B103</adress>
        </department>
    </employee>
      <employee no = "3310">
    	<name>李四</name>
        <age>23</age>
        <salary>3000</salary>
        <department>
            <dname>工程部</dname>
            <adress>XX大厦-B104</adress>
        </department>
    </employee>
</hr>

最后谈谈xml的书写规则:

1、合法的标签名
2、合理使用属性
3、有序的子元素
4、适当的注释与缩进
5、特殊字符与CDATA标签的使用

首先标签名需要有意义,建议用英文名
小写字母,单词之间使用"-"进行分割
建议多级标签之间不要存在重名的情况。

适当的注释与缩进

特殊字符与CDATA标签的使用

当有大量特殊符号需要替换,或者xml文档中有一部分文本我们不希望xml进行解析的时候,我们可以使用CDATA标签,其表达式为

<![CDATA["开始,到"]]>结束

例如:

<lessson>
	<content>
    	本节我们来学习html中a标签的使用:
        <body>
        	<a href = "index.html">首页</a>
        </body>
    </content>
</lesson>

我们不想解析标签内部的内容,做如下修改:

<lessson>
	<content>
    	<![CDATA[
    	本节我们来学习html中a标签的使用:
        <body>
        	<a href = "index.html">首页</a>
        </body>
        ]]>
    </content>
</lesson>

四、XML文档语义约束

XML文档语义约束有两种方式,一种是DTD类型,一种是XML Schema类型。

1、DTD

DTD(Document Type Definition,文档类型定义) 是一种简单易用的语义约束方式,扩展名为.dtd文件 举例hr.dtd。

<!ELEMENT hr (employee+)>
<!ELEMENT employee (name,age,salary,department)>
<!ATTLIST employee no CDATA "">
<!ELEMENT name (#PCDATA)>
标签用来定义文档中允许出现的节点及节点数量
<!ELEMENT hr (employee)> 表示hr节点下只允许出现一个employee子节点
<!ELEMENT employee (name,age,salary,department)> employee节点下必须包含以下四个节点,且按顺序出现。
<!ELEMENT name (#PCDATA)>定义name标签只能是文本,没有任何子元素,#PCDATA代表当前节点为纯文本元素。
如果某个子节点需要多次出现定义为<!ELEMENT hr (employee+)>
<!ELEMENT hr (employee*)> 代表hr节点下可能出现0到n个employee节点,及要不不出现,要不出现多个

在XML文件中如何引入DTD文件?需要引入标签,书写格式如下:

<!DOCTYPE 根节点 SYSTEM "dtd文件路径">
示例:
<!DOCTYPE hr SYSTEM "hr.dtd"> 表示加载与hr.xml文件相同路径下的dtd

下面我们尝试写以下dtd文件,以hr.dtd文件为例子,这里需要注意的是dtd文件本质上也是一种xml文件,因此也需要引入XML文档说明。

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT hr (employee+)> <!--表示hr.xml可以出现多个employee节点-->
<!ELEMENT employee (name,age,salary,department)> <!--这里要注意在父节点后必须跟一个空格,否则不生效,同时,子节点的顺序不能颠倒-->
<!ATTLIST employee no CDATA ""> <!--第一个表示节点的名字employee,第二个为属性的名字no,第三个表示节点的类型,用CDATA, ""表示没有填写时的默认值。-->
<!ELEMENT name (#PCDATA)> <!--name是纯文本节点-->
<!ELEMENT age (#PCDATA)>  <!--age是纯文本节点-->
<!ELEMENT salary (#PCDATA)>  <!--salary是纯文本节点-->
<!ELEMENT department (dname,address)>

2、XML Schema

XML Schema比DTD更为复杂,提供了更多的功能
XML Schema提供了数据类型,格式限定,数据范围等特点
XML Schema是W3C标准
XML Schema以.xsd为后缀

下面是针对hr.xml文件所写的hr.xsd文件

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
	<element name = "hr">
    <!--complexType标签含义是复杂节点,包含子节点时必须使用这个标签-->
    	<complexType>
        	<sequence> <!--表示按照顺序进行书写-->
            	<element name="employee" minOccurs="1" maxOccurs="999"> <!--employee节点的出现次数-->
                	<complexType>
                   		 <sequence>
                         	<element name="name" type = "string"> </element>
                            <element name="age" type = "integer"> </element>
                            <element name="salary" type = "integer"> </element>
                            <element name="department"> 
                            	<complexType>
                                     <sequence>
                         			   <element name="dname" type = "string"> </element>
                                       <element name="address" type = "string"> </element>
                                     </sequence>
                                </complexType>
                            </element>
                         </sequence>
                         <attribute name="no" type="string" use="required"></attribute>
                         <!--employee节点属性-->
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>

在hr.xml文件中进行引用

<?xml version="1.0" encoding="UTF-8"?>
<hr  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="hr.xsd"> <!--声明这个xml文档的约束使用Schema-->

   <employee no = "3309">
    	<name>张三</name>
        <age>31</age>
        <salary>4000</salary>
        <department>
            <dname>会计部</dname>
            <adress>XX大厦-B103</adress>
        </department>
    </employee>
      <employee no = "3310">
    	<name>李四</name>
        <age>23</age>
        <salary>3000</salary>
        <department>
            <dname>工程部</dname>
            <adress>XX大厦-B104</adress>
        </department>
    </employee>
</hr>