XML概述
定义
- XML(eXtensible Markup Language,可扩展标记语言),也是一种标记语言,类似HTML,但是其一般用于描述数据,而非显示数据。
- XML没有预定义标签,需要用户自行定义标签。
- XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。
作用
- XML是一种通用的数据交换格式,能够方便的封装带有层级关系的数据。
- 在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在起始标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。
- XML在企业开发中,经常用XML作为配置文件。
XML语法
XML文档的组成
文档声明:<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
- 文档声明必须在XML文档的第一行。
- version:版本。encoding:编码,默认utf-8。standalone:文档是否独立(是否依赖约束文档)。
注释:<!--注释-->
元素:
- 包含标签主体:<mytag>some content</mytag>
- 不含标签主体:<mytag />
- 所有标签不允许有交叉嵌套。
- 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
- XML中不会忽略主体内容中出现的空格和换行,即存在暗部。
- 命名规则:元素(标签)的名称可以包含字母、数字、减号、下划线和英文句点,但是一般遵循以下规则:
严格区分大小写:<P>、<p>。只能以字母或下划线开头:abc、_abc。不能以xml(或XML、Xml等)开头。名称字符之间不能有空格或制表符。名称字符之间不能使用冒号。
元素的属性:
- 一个元素可以有多个属性,每个属性都有它自己的名称和取值:<mytag name="value" />
- 属性值一定要用引号(单引号或双引号)引起来。
- 属性名称的命名规范与元素的命名规范相同。
- 元素中的属性是不允许重复的。
- 在XML技术中,标签属性所代表的信息也可以被改成用子元素的形式来描述。
CDATA区
特殊字符
- &:&
- <:<
- >:>
- ":"
- ':'
处理指令(PI,Processing Instruction)
- 用来指挥软件如何解析XML文档。
- 必须以“<?”作为开头,以“?>”作为结尾。
XML约束
XML约束之DTD
概述
DTD(文档类型定义,Document Type Definition):用于定义XML的书写规范。
验证
根据能否对XML文档进行约束模式校验,可以将解析器分为两类:
- 非校验解析器,仅验证XML语法,无法验证XML约束,如IE
- 校验解析器
定义DTD的方式
DTD约束文档可以在XML文档中直接定义,也可以作为单独的文档进行编写(单独的文档必须以UTF-8编码进行保存)。
方式1
在文档中直接定义DTD:
@H_939_301@
<?xml version="1.0" encoding"UTF-8" standalone"yes"?><!DOCTYPE 书架 [ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)>]><书架> <书> <书名>Think in Java</书名> <作者>埃克尔</作者> <售价>108.00元</售价> </书> ...</书架>
方式2
XML文档中引入外部约束,DTD约束文件扩展名为“.dtd”:
- <!DOCTYPE 根元素 SYSTEM "DTD文档路径">
- <!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
DTD语法
元素
DTD文档中使用ELEMENT关键字来声明一个XML元素:<!ELEMENT 元素名称 使用规则>
其中使用规则如下:
- (#PCDATA):指示元素的主体内容只能是普通的文本(Parsed Character Data)。
- EMPTY:用于指示元素的主体为空,比如<br />。
- ANY:用于指示元素的主体内容为任意类型。
- (子元素):指示元素中包含的子元素。
子元素的规则如下:
- 如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
如:<!ELEMENT FILE (TITLE,AUTHOR,EMAIL) - 如果子元素用“|”分开,说明任选其一。
如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL) - 用+、*、?来表示元素出现的次数,如果元素后面没有+*?:表示必须且只能出现一次
+:表示一次或多次。
*:表示零次、一次或多次。
?:表示零次或一次。
如<!ELEMENT MYFILE ((TITLE*,AUTHOR?,EMAIL)* | COMMENT)>