XML语言
什么是XML?
XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。它被设计的宗旨是传输数据,而非显示数据。 XML标签没有被预定义,需要用户自行定义标签。 XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。 XML被广泛认为是继Java之后在Internet上最激动人心的新技术。
XML技术用于解决什么问题?
在现实生活中存在大量有关系的数据,如右图所示。
问题:这样的数据该如何表示并交给计算机处理呢?
XML语言出现的根本目的在于描述向上图那种有关系的数据。
XML是一种通用的数据交换格式。
在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在起始标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。
XML中的数据必须通过软件程序来解析执行或显示,如IE;这样的解析程序称之为Parser(解析器)。
<?xml version="1.0" encoding="UTF-8"?> <中国> <北京> <海淀></海淀> <丰台></丰台> </北京> <山东> <济南></济南> <青岛></青岛> </山东> <湖北> <武汉></武汉> <荆州></荆州> </湖北> </中国>
XML常见应用:
XML技术除用于保存有关系的数据之外,它还经常用作软件配置文件,以描述程序模块之间的关系。(如后面将要学习到的Struts、Spring和Hibernate都是基于XML作为配置文件的)
在一个软件系统中,通过XML配置文件可以提高系统的灵活性。即程序的行为是通过XML文件来配置的,而不是硬编码。
数据交换:不同语言之间用来交换数据
小型数据库:用来当数据库存储数据。
XML语法:
XML语法:
一个XML文件分为如下几部分内容:
文档声明 元素 属性 注释 CDATA区 、特殊字符 处理指令(PI:Processing Instruction)
文档声明
在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行。并且必须指定
最简单的语法:
<?xml version=“1.0”?>
用encoding属性说明文档所使用的字符编码。保存在磁盘上的文件编码要与声明的编码一致。如:
<?xml version=“1.0” encoding=“GB2312”?>
用standalone属性说明文档是否独立,即是否依赖其他文档。 如:
<?xml version=“1.0” standalone=“yes”?>
yes不用引入外部的文件,no需要引入。(不常用)
元素
标签
XML元素指XML文件中出现的标签。
一个标签分为起始和结束标签(不能省略)。一个标签有如下几种书写形式:
包含标签主体:<mytag>some content</mytag>
不含标签主体:<mytag/>
一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套。
<mytag1><mytag2></mytag1></mytag2> WRONG!
一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
标签的空格、换行
对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的。
由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。
命名规范
一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:
区分大小写,例如,<P>和<p>是两个不同的标记。
不能以数字或“-” (中划线)开头。
不能以xml(或XML、或Xml 等)开头。
不能包含空格。
名称中间不能包含冒号(:)。
属性
一个元素可以有多个属性,每个属性都有它自己的名称和取值,例如:<mytag name=“value” …/>
属性值一定要用引号(单引号或双引号)引起来。
属性名称的命名规范与元素的命名规范相同
元素中的属性是不允许重复的
在XML技术中,标签属性所代表的信息也可以被改成用子元素的形式来描述,例如:
<mytag> <name> <firstName/> <lastName/> </name> </mytag>
注释
XML中的注释语法为:<!--这是注释-->
注意:
XML声明之前不能有注释
注释不能嵌套,例如:
转义字符
注:< 和 & 的符号要用转义字符, > “ ‘ 可以不使用转义字符。
CDATA区
CDATA是Character Data的缩写
作用:把标签当做普通文本内容;
语法:<![CDATA[内容]]>
<![CDATA[ <itcast>www.itcast.cn</itcast> ]]>
以上红色部分被当做普通文本而不是标签
处理指令
处理指令,简称PI(Processing Instruction)。
作用:用来指挥软件如何解析XML文档。
语法:必须以“<?”作为开头,以“?>”作为结尾。 常用处理指令:
常用处理指令:
XML声明:
<?xml version=“1.0” encoding=“GB2312”?>
xml-stylesheet指令: 作用:指示XML文档所使用的CSS样式XSL。
<?xml-stylesheet type=“text/css” href=“some.css”?>
注:对中文命名的标签元素不起作用
XML语法规则总结
所有 XML 元素都须有关闭标签
XML 标签对大小写敏感 XML
必须正确地嵌套顺序
XML 文档必须有根元素(只有一个)
XML 的属性值须加引号
特殊字符必须转义 --- CDATA
XML 中的空格、回车换行会解析时被保留
XML约束:
为什么需要约束
1.XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错。(如:Tomcat)
2.XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束。
两个概念:
格式良好的XML:遵循XML语法的XML
有效的XML:遵循约束文档的XML
3.总之:约束文档定义了在XML中允许出现的元素名称、属性及元素出现的顺序等等。
XML约束概述
1.什么是XML约束
在XML技术里,可以编写一个文档来约束一个XML
文档的书写规范,这称之为XML约束。
2.为什么需要XML约束
3.常用的约束技术
XML DTD
XML Schema
DTD约束快束入门
DTD概述
1.DTD(Document Type Definition),全称为文档类型定义。
2.书写完成DTD,并且约束成功后,可以总结书写的过程,更方便记忆。
复杂标签:<!ELEMENT 标签名 (子节点)>
简单标签:<!ELEMENT 标签名 (#PCDATA)>
引入DTD:<!DOCTYPE 根节点 SYSTEM “dtd的地址”>
将DTD与XML文档关联三种方式
DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写
1.使用内部DTD
<!DOCTYPE 根节点 [ DTD的代码 ]>
2.使用外部DTD
<!DOCTYPE 根节点 SYSTEM “DTD的地址” >
3.使用网络DTD
<!DOCTYPE 根节点 PUBLIC “DTD的名称” “DTD的地址” >
常见的使用网络DTD约束有 Struts2的框架
在xml文件内编写DTD
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE 书架 [ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> ]> <书架> <书> <书名>Java就业培训教程</书名> <作者>张孝祥</作者> <售价>39.00元</售价> </书> ... </书架>
引入外部DTD文档
XML使用DOCTYPE声明语句来指明它所遵循的DTD文档,有两种形式:
当引用的DTD文档在本地时,采用如下方式:
<!DOCTYPE 根元素 SYSTEM “DTD文档路径”>
如:
<!DOCTYPE 书架 SYSTEM “book.dtd”>
当引用的DTD文档在公共网络上时,采用如下方式:
<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
如:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
DTD约束语法细节
元素定义 属性定义 实体定义
元素(ELEMENT)定义
在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)>