目录
一.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>