一.XML详解
1.1 XML是什么
指可扩展标记语言(EXtensible Markup Language), 被设计用来数据交换和存储数据。XML最常用于互联网上的数据交换,其中它被用作一种结构化的编码方式。
1.2 为什么要学习XML(XML的作用)
- 数据交换:方便的实现数据交换,系统配置,内容管理,但是现在比较很少用XML来进行数据交互了,而是用JSON比较多了,因为JSON传输的体积要比XML小很多,更容易传输。
- 配置和设置:XML非常适合存储和管理配置和设置数据,例如应用程序的用户界面和选项。
- 数据分析:XML语言允许处理结构化和半结构化的数据,并且可以使用XML解析器来解析XML并提取有用的信息。这在数据挖掘和大数据分析中非常有用。
二.XML的约束定义
注意:标准的XML的格式,有且只有一个根元素(节点),并且XML区分大小写
说到XML的约束定义就要提到DTD,所以来简单介绍一下
2.1 dtd
文档类型定义(Document Type Definition)是一套关于标记符的语法规则。 这个文件主要的功能是验证XML文件编写的合法性,也就是一个约束,要求你只能按DTD定义的格式写。dtd是一种XML的约束,说白了就是我定义了dtd文件,下面的xml编写必须按照我的约束条件来写。
2.2 元素约束(定义)
1,首先需要在XML声明加入了DTD
<!DOCTYPE root []>
2.元素的分类
<!DOCTYPE element-name EMPTY> 空元素
<!DOCTYPE element-name (#PCDATA)> 文本元素
<!DOCTYPE element-name (e1,e2)> 混合元素
3.元素的限制
次数: 0或1 用 ” ? “代替
0~N:0次到无数次 用 ” * “ 代替
1~N:至少一次 或无数次 用 ” + “ 代替
| : 或
示例如下:
<?xml version="1.0" encoding="UTF-8"?> <!-- 元素的约束 --> <!DOCTYPE persons [ <!-- 根节点下有的节点 --> <!ELEMENT persons (person*)> <!-- 节点下的元素 --> <!ELEMENT person (name,age,contact,br?)> <!-- 文本元素 --> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!-- 元素中可有的子元素 --> <!ELEMENT contact (phone|email)> <!-- 文本元素 --> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> <!-- 空元素 --> <!ELEMENT br EMPTY> ]> <persons> <person> <name>张小明</name> <age>10</age> <contact> <phone>1234567</phone> </contact> <br/> </person> <person> <name>张大明</name> <age>35</age> <contact> <email>123@qq.com</email> </contact> </person> </persons>
2.3 属性定义
语法:<!ATTLIST element-name att_name type desc>
注意:属性的约束也是需要声明的,所有也是写在 <!DOCTYPE root []> 里面
1.属性类型 type
- ID
- (男|女)
- CDATA
- IDREF(reference)
2.属性描述
- #REQUIRED 必填
- #IMPLIED 非必填
- 默认值,只有type为(男|女)类型或者单选时 desc才可以用默认值方式
示例如下:
<?xml version="1.0" encoding="UTF-8"?> <!-- 元素的约束 --> <!DOCTYPE persons [ <!-- 根节点下有的节点 --> <!ELEMENT persons (person*)> <!-- 节点下的元素 --> <!ELEMENT person (name,age,contact,br?)> <!-- 文本元素 --> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!-- 元素中可有的子元素 --> <!ELEMENT contact (phone|email)> <!-- 文本元素 --> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> <!-- 空元素 --> <!ELEMENT br EMPTY> <!-- 属性的约束 --> <!-- 给person设置属性 --> <!ATTLIST person pid ID #REQUIRED sex (男|女) "男" qq CDATA #IMPLIED parent IDREF #IMPLIED > ]> <persons> <person pid="p1" sex="男" qq="aaa" parent="p2"> <name>张小明</name> <age>10</age> <contact> <phone>1234567</phone> </contact> <br/> </person> <person pid="p2"> <name>张大明</name> <age>35</age> <contact> <email>123@qq.com</email> </contact> </person> </persons>