XML
XML的全称是EXtensible Markup Language,可扩展标记语言编写,XML就是编写标签,与HTML非常类似,扩展名.xml。拥有良好的人机可读性。
用途:
- Java程序的配置描述文件
- 用于保存程序产生的数据
- 网络间的数据传输
XML和HTML的区别
- XML与HTML非常相似,都是编写标签,XML的语法严格,HTML语法松散
- XML没有预定义标签,HTML存在大量预定义标签
- XML重在保存与传输数据,HTML用于显示信息
XML文档结构
- 第一行必须是XML声明
- 有且只有一个根节点
- XML标签的书写规则与HTML相同
XML声明
XML声明说明XML文档的基本信息,包括版本号与字符集,写在XML第一行。
<?xml version="1.0" encoding="UTF-8"?> version:代表版本号1.0/1.1encoding:UTF-8设置字符集,用于支持中文standalone:是否独立- yes:不依赖其他文件
- no:依赖其他文件
XML标签书写规则
合法的标签名
- 标签名要有意义
- 建议使用英文小写字母,单词之间使用
-分割 - 建议多级标签之间不要存在重名的情况
适当的注释与缩进
- 适当的注释与缩进可以让XML文档更容易阅读
合理使用属性
- 标签属性用于描述标签不可或缺的信息
- 对标签分组或为标签设置ID时常用属性表示
有序的子元素
- 在XML多层嵌套的子元素中,标签前后顺序应保持一致
特殊字符与CDATA标签
- 标签体中,出现
<、>特殊字符,会破坏文档结构 - 使用实体引用或者CDATA标签
| 实体引用 | 对应符号 | 说明 |
|---|---|---|
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ' | 单引号 |
" | " | 双引号 |
CDATA 指的是不应由 XML 解析器进行解析的文本数据,从 <![CDATA[ 开始,到]]>结束
<?xml version="1.0" encoding="UTF-8" ?>
<!--人力资源管理系统-->
<hr>
<employee no="3301">
<name>张三</name>
<age>30</age>
<salary>4000</salary>
<department>
<dname>市场部</dname>
<address>xx大厦-B1003</address>
</department>
</employee>
<employee no="3303">
<name>李四</name>
<age>28</age>
<salary>5000</salary>
<department>
<dname>财务部</dname>
<address>xx大厦-B1004</address>
</department>
</employee>
</hr>XML语义约束
XML文档结构正确,但可能不是有效的。XML语义约束有两种定义方式:DTD与XML Schema。
DTD约束
DTD(Document Type Definition,文档类型定义)是一种简单易用的语义约束方式,DTD文件的扩展名为.dtd。
DTD定义节点
利用DTD中的<!ELEMENT>标签,可以定义XML文档中允许出现的节点及数量:
<!ELEMENT hr (employee)> employee>:定义hr节点下只允许出现1个employee子节点<!ELEMENT employee (name,age,salary,department)>:节点下必须包含以下四个节点,且按顺序出现<!ELEMENT name (#PCDATA)>:定义name标签体只能是文本,#PCDATA代表文本元素
如某个子节点需要多次重复出现,则需要在子节点后增加相应的描述符:
<!ELEMENT hr (employee+)>:hr节点下最少出现1个employee子节点<!ELEMENT hr (employee*)>:hr节点下可出现0..n个employee子节点<!ELEMENT hr (employee?)>:hr节点下最多出现1个employee子节点
<?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT hr (employee+)>
<!ELEMENT employee (name,age,salary,department)>
<!ATTLIST employee no CDATA "">
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT salary (#PCDATA)>
<!ELEMENT department (dname,address)>
<!ELEMENT dname (#PCDATA)>
<!ELEMENT address (#PCDATA)>XML引用DTD
在XML中使用<!DOCTYPE>标签来引用DTD文件:
<!DOCTYPE 根节点 SYSTEM "dtd文件路径">:本地引用<!DOCTYPE 根节点 PUBLIC "dtd文件名字" "dtd文件的位置URL">:网络引用
<!DOCTYPE hr SYSTEM "hr.dtd">Schema约束
XML Schema比DTD更为复杂,提供了数据类型、格式限定、数据范围等特性,是 W3C 标准。
<根节点 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="XML地址" xsi:schemaLocation="XSD地址">:引入
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemalocation="hr.xsd">
</hr>定义约束:
<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="hr">
<!--complexType标签代表是复杂节点,包含子节点时必须使用此标签-->
<complexType>
<!--sequence标签代表必须按顺序进行严格书写-->
<sequence>
<!--minOccurs="1" maxOccurs="10" 这个标签最少出现一次,最多出现10次-->
<element name="employee" minOccurs="1" maxOccurs="10">
<complexType>
<sequence>
<!--type="string" 指定类型-->
<element name="name" type="string"/>
<!---->
<element name="age">
<!--简单类型约束-->
<simpleType>
<!--限定-->
<restriction base="integer">
<!--最小限定-->
<minInclusive value="18"/>
<!--最大限定-->
<maxInclusive value="60"/>
</restriction>
</simpleType>
</element>
<element name="salary" type="integer"/>
<element name="department">
<complexType>
<sequence>
<element name="dname" type="string"/>
<element name="address" type="string"/>
</sequence>
</complexType>
</element>
</sequence>
<!--use="required"表示必须存在-->
<attribute name="no" type="string" use="required"/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>Last updated on