深入到xml中,才发现xml中的概念有如此之多,结构,验证,元素。元素还有多种类型,什么“实体引用”、CDATTA,空白的意义。XML文档也有N 多的种类,什么XPath, XSL,XPointer,DTD,XHTML。真是举不胜举啊,这一头裁进来,犹如刘姥姥进了大观园。
将一大堆的技术名词放一边,咱还是先了解一下xml的基本概念
Xml的概念
Xml明确定义了结构化、描述和交换数据的方法。XML与HTML不同,它不对数据进行格式化处理。HTML中<P>代表段落,< b>代表加粗。 HTML定义了数据如何显示,但没有定义每个元素表示什么内容。因此如果获取了HTML格式的数据,可以立即显示它,但要对数据进行整理和其他操作是就非常困难。
不过,如果使用<id> 、<Email>、<QQ>等来描述数据就可以立即识别出数据代表的意思。
1.1 XML元素
XML元素是XML文档的核心。 XML元素与HTML中的元素概念相同。区别是:XML的元素命令比较松散,而HTML是限制的。 但XML的结构要求是严谨的,每个元素都需要关闭。 HTML则没有这样的要求。结构严谨的HTML,则也可以认为是XML。XML的元素名称并没有具体的限制。所以,HTML中的元素也可以作为XML的元素使用。只要它们结构严谨,所有的元素都关闭!
<html>
<Title><head>联系方式</head></title>
<body>
<h2>列表</h2>
<hr>
</html>
这段代码作为XML格式存在下列问题。<Body>元素没有关闭。<hr>元素也是如此。另外,<Title>元素的开始标记和结束标记大小形式不同。 XML格式应该是下面这样:
<html>
<Title><head>联系方式</head></Title>
<body>
<h2>列表</h2>
<hr></hr>
</body>
</html>
1.2 XML属性
与HTML相似,XML元素可以附加属性。在HTML中可以:
<a href=”cwbboy.cnblogs.com”>cwbboy</a>
其中:href便是<a>元素的属性了。 “cwbboy.cnblogs.com”是属性href的值。属性值可以用双引号,单引号,甚至不用任何符号包括。一个元素可以拥有这多个属性,不同的属性用空格分隔。
<a href=”cwbboy.cnblogs.com”>cwbboy</a>
<table width=”100%” height=’100%’ bgcolor=yellow></table>
但XML的属性要求更严谨,所有的属性值必须在双引号或单引号之中。
<User Nmae=”cwbboy” Address=”Guangzhou”></User>
1.3 XML解析器
与HTML一样,XML也需要解析器对文档进行解析。IE便是HTML的解析器之一,目前IE也能解释XML。
解析器分为两种:非验证性和验证性解释器。非验证性的解析器只检查文档的格式是否良好,也就是说它只按XML1.0 推荐标准中的基本规定验证文档是否是有效的XML文档。而验证性解析器除了验证格式结构外,还能根据另一个定义XML文档内容和结构的文档(DTD文档),检查XML文档中的元素和属性命名是否符合预先的定义。
换句话说,其实两种解析器都需要验证文档,只是验证的参考标准不一样。 “非验证性”的解析器只验证结构,只要遵守了XML 1.0的规范,我们可以任意的命名元素和属性。我们可以用<User>表示一个用户,也可以用<UserName>表示一个用户。 Age表示年龄,<User Age=”Eight”> </User>。至于年龄的属性的值,可以用”Eight” 也可以用数字”8”,总之格式正确就行。 而“验证性”的解析器除了验证结构外,还检查元素的命名。假设定义文档(DTD文档,后面会介绍)中定义了元素为<User>,那你只能用这个User作为元素,甚至定义文档中规定了Age属性只能填数字,而如果你的xml文档中的Age为英文字母的话,验证性解析器将认为你的XML文档是无效的。
大部分时候,我们所说的XML文档,指的是能通过“非验证性”解析器验证的格式良好的XML文档。
1.4 一个完整的XML文档
<?xml version=”1.0”?>
<capitals>
<country name=”china”>北京</country>
<country name=”USA”>华盛顿</country>
</catitals>
XML结构的设计很灵活,并没有公式可以套用。只要遵守xml规范即可。上面的xml文档也可以用如下的方式表式:
<?xml version=”2.0”?>
<data>
<China CapitalCity=” 北京”></China >
<USA CapitalCity=” 华盛顿”></USA>
</data>
1.5 XML文档的组成部分
XML文档最多可以由4部分组成,基中,三部分是可选的。按以下顺序排序:
序言(Prolog,可选)
DTD(可选)
文档根(Document Root 必选)
结属(Epilog,可选)
以上几部分中,只有文档根是必选的。
下面详细介绍这四部分:
1. 序言
XMl文档的序言部分一般包含的信息出现在文档或根元素开始标记之前。它包括应用于整个文档的信息,如字符编码、文档结构和样式表引用。另外,它还包括XML声明、注释和处理指令,XML文档序言是可选的。
XML声明是序言使用最多的一部分了。有许多解析器甚至不接受没有XML声明的文档。XML声明包含以下几部分:
XML语言的版本(version) ,目前我们使用的版本是1.0。
文档内容的编码(encoding.这部分是可选的,如果将文档保存成UTF-8或UTF-16,解释器会自动确定共编码。.
Standalone(默认为no),表示文档是否依赖于外部文件.此部分也是可选的
实际上最简单XML声明只要version 即可:
<?xml version=”1.0”?>
Xml声明的语法与xml元素不同,它以<? 开始,以 ?>结束
2. 文档类型定义(DTD)
文档类型定义描述XML文档的内容。它定义XML文档秘须符合有有效结构和内容,以便将文档描述为有效文档。DTD保证了XML文件的结构是正确的。限制了元素和属性以正确的顺序出现。甚至对元素和属性中的数据值进行了基本验证。比如:限制某个属性值必须为整型,或限制某个属性的值只能为几个可选的值之一)
对于非验证性解析器而言,DTD文档没有任何意义。而验证性解释器在解析某个XML文档时,一旦发现此XML文档指定了DTD文件,便会按照DTD中的定义对XML文档进行验证,一旦xml的内容不符合DTD中的规定。就算此文档符合xml 1.0规范,解析器也认为此文档无效。在.net中,验证失败会抛出异常。
3.文档根
文档根是xml文档的必选部分,它位于序言和DTD之后,在所有的数据元素之前。文档根其实就是普通的XML数据元素,可以保含属性。文档根在一个文档中必须存在,而且只能一个,不允许有重复。
<?xml version=”10”?>
<data>
<China CapitalCity=” 北京”></China >
<USA CapitalCity=” 华盛顿”></USA>
</data>
<ata>便是文档根。
4. 结尾
结尾与序言相似,很少使用。