学习XML的时候,我们自然而然的就想起了HTML,HTML在前面的博客已经做了介绍,下面主要是介绍XML的相关基础。

一、XML?
HTML(Hyper Text Markup Language)超文本标记语言,是用来描述网页文档的一种语言。
XML(EXtensible Markup Language)是一种类似HTML的可扩展标记语言,但是它不是用来显示数据的,而是用来包含和传输数据。一般用来配置文件,携带方面。
1.世界上任何事物都是变化发展的——XML发展历史:

2.XML与HTML的差异:
- XML不是用来替换HTML的技术
- XML和HTML为不同的目的而设计
- XML设计的核心是包含与传输数据
- HTML设计的核心是显示数据
3.XML的树状结构
XML文档形成了一种树结构,从“根部”开始,扩展到“枝叶”。例如:

从上面的实例我们可以看出,XML的组成包括:声明、标签(尖括号)、元素(根元素、父元素、子元素)等等。XML文档中的元素形成一颗文档树。这棵树从根部开始,并扩展到树的最低端。好处是: 结构清晰、易于读取、处理、添加和修改子节点。
4.XML构建模块——元素、属性、实体、PCDATA、CDATA
(1)元素
元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。 元素也可拥有属性。
命名空间:解决名称冲突问题
(2)属性
属性提供关于元素的额外(附加)信息。
XML属性值必须被引号包围,不过单引号和双引号均可使用。
(3)实体
实体是用于定义引用普通文本或特殊字符的快捷方式的变。
实体引用是对实体的引用,为了避免把字符数据和标签中需要用到的一些特殊符号相混淆。
在XML中有5个被预定义的实体引用:

注释:在XML中仅有字符:“<"和”&“是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是一个好习惯。通常来说,所有XML文档中的文本均会被解析器解析。只有CDATA区段(CDATA section)中的文本会被解析器忽略。
(4)CDATA
CDATA指的是不应由XML解析器解析的文本数据(UCDATAUnparsed Character Data)。
在 XML 元素中,"<" 和 "&" 是非法的。"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。
"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。CDATA 部分由 "<![CDATA["
开始,由 "]]>" 结束。
关于 CDATA 部分的注释:
CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。
(5)PCDATA
PCDATA 指的是被解析的字符数据(Parsed Character Data)。
XML 解析器通常会解析 XML 文档中所有的文本。
当某个 XML 元素被解析时,其标签之间的文本也会被解析,所以非法的XML 字符必须被替换为实体引用(entity reference)。
5、XML语法规则:
- XML 文档必须有根元素XML 文档必须有一个元素是所有其他元素的父元素。该元素称为根元素。
- XML文件必须有关闭标签
- XML标记对大小写敏感
- XML元素必须被正确的嵌套
- XML属性必须加引号
上面介绍了XML相关的语法结构以及语法规则。但是这些都是由谁来定义和提供的呢?XML文档是一种结构化的标记文档,其文档的规范性由:DTD (Document Type Definition)和Schema两种方式进行制定
。
二、DTD
1.定义、用途?
文档类型定义(DTD)定义XML文件的结构,为XML文件提供语法与规则;内容既可以定义在XML文件中,也可以定义在XML文件外,使用XML进行数据交换的行业或组织可定义自己的DTD,DTD对于XML是可选内容。
为什么要使用DTD呢?
为了正确交换数据,XML需要确定的结构,所以通过DTD,每一个XML文件可携带一个又关其自身格式的描述;独立的团体可一致的使用某个标准的DTD来交互数据;使用DTD来验证外部接受到的数据或是验证自身的数据。
2.DTD结构
(1)元素
在一个DTD中元素声明使用下面的语法:
<!ELEMENT 元素名称 类别>或者<!ELEMENT 元素名称(元素内容)>
例如:<!ELEMENT 书名(#PCDATA)><!ELEMENT 计算机书籍
(书名,价格,简要介绍)>
a.空元素声明:
<!ELEMENT 元素名称 EMPTY>
例如:<!ELEMENT br EMPTY>
b.带有任何元素的声明:
<!ELEMENT 元素名称 ANY>
例如:<!ELEMENT note ANY>
c.带有子元素的声明:
<!ELEMENT 元素名称 (子元素名称1,子元素名称2...)>
例如:<!ELEMENT note (to,from,heading,body)>
注释:当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。
d.声明只出现一次的元素:
<!ELEMENT 元素名称 (子元素名称)>
例如:<!ELEMENT note (message)>
e.声明最少出现一次的元素
<!ELEMENT 元素名称 (子元素名称+)>
例如:<!ELEMENT note (message+)>
f.声明出现零次或多次的元素
<!ELEMENT 元素名称 (子元素名称*)>
例如:<!ELEMENT note (message*)>
g.声明出现零次或一次的元素
<!ELEMENT 元素名称 (子元素名称?)>
例子:<!ELEMENT note (message?)>
h.声明“非.../既...”类型的内容
<!ELEMENT 元素名称(子元素名称|子元素名称2)>
例子:<!ELEMENT note (to,from,header,(message|body))>
i.声明混合型的内容
<!ELEMENT 元素名称(#PCDATA|子元素名称)*>
例如:<!ELEMENTnote (#PCDATA|to|from|header|message)*>
(2)属性
在DTD中,属性通过ATTLIST来进行声明
语法:<!ATTLIST 元素名称
属性名称 属性类型 默认值>
例如:<!ATTLIST payment
type CDATA "cash">
属性类型:
默认值:
(3)实体
是用于定义引用普通文本或特殊字符的快捷方式的变量
实体引用是对实体的引用
实体可在内部或外部进行声明
a.内部实体声明的语法:
<!ENITY 实体名称 “实体的值”>
例子:<!ENITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
b.外部实体声明的语法:
<!ENITY 实体名称 SYSTEM "URI/URL">
例如:<!ENTITY
writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
三、Schema技术
1.定义、作用?
Schema是用来描述XML文档的结构,是基于XML的DTD替代者,XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。使用Schema可保护数据通信。
2.Schema是DTD的继任者
- 可针对未来的需求进行扩展
- 更完善,功能更强大
- 基于XML编写
- 支持数据类型
- 支持命名空间
总结:XML是一种可扩展的标记语言,DTD是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看XML文档是否符合规范,元素和标签是否正确。一个DTD文档包含:元素、元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。Shcema模式,是DTD的继任者,比DTD的功能更为强大。
XML入门基础
原文:http://blog.csdn.net/mingxuanyun/article/details/18216685