Xml 学习之 “刘姥姥进大观园“ -----xml概述

深入到xml中,才发现xml中的概念有如此之多,结构,验证,元素。元素还有多种类型,什么“实体引用”、CDATTA,空白的意义。XML文档也有N多的种类,什么XPath, XSL,XPointer,DTD,XHTML。真是举不胜举啊,这一头裁进来,犹如刘姥姥进了大观园。

  将一大堆的技术名词放一边,咱还是先了解一下xml的基本概念
 

Xml的概念

    Xml明确定义了结构化、描述和交换数据的方法。XMLHTML不同,它不对数据进行格式化处理。HTML<P>代表段落,<b>代表加粗。 HTML定义了数据如何显示,但没有定义每个元素表示什么内容。因此如果获取了HTML格式的数据,可以立即显示它,但要对数据进行整理和其他操作是就非常困难。

   不过,如果使用<id> <Email><QQ>等来描述数据就可以立即识别出数据代表的意思。

1.1  XML元素

      XML元素是XML文档的核心。 XML元素与HTML中的元素概念相同。区别是:XML的元素命令比较松散,而HTML是限制的。 XML的结构要求是严谨的,每个元素都需要关闭。 HTML则没有这样的要求。结构严谨的HTML,则也可以认为是XMLXML的元素名称并没有具体的限制。所以,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中可以: 

 <href=”cwbboy.cnblogs.com”>cwbboy</a>

        其中:href便是<a>元素的属性了。 cwbboy.cnblogs.com”是属性href的值。属性值可以用双引号,单引号,甚至不用任何符号包括。 一个元素可以拥有这多个属性,不同的属性用空格分隔。

<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部分组成,基中,三部分是可选的。按以下顺序排序:

l       序言(Prolog,可选)

l       DTD(可选)

l       文档根(Document Root 必选)

l       结属(Epilog,可选)

  以上几部分中,只有文档根是必选的。

 下面详细介绍这四部分:

1.   序言

      XMl文档的序言部分一般包含的信息出现在文档或根元素开始标记之前。它包括应用于整个文档的信息,如字符编码、文档结构和样式表引用。另外,它还包括XML声明、注释和处理指令,XML文档序言是可选的。

XML声明是序言使用最多的一部分了。有许多解析器甚至不接受没有XML声明的文档。XML声明包含以下几部分:

l         XML语言的版本(version)  ,目前我们使用的版本是1.0

l         文档内容的编码(encoding.这部分是可选的,如果将文档保存成UTF-8UTF-16,解释器会自动确定共编码。.

l         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. 结尾

结尾与序言相似,很少使用。