1XML基础1.1XML简介XML被设计用来传输和存储数据。HTML被设计用来显示数据。1.1.1应该掌握的基础知识:在您继续学习之前,需要对以下知识有基本的了解:HTML/XHTMLJavaScript如果您希望首先学习这些项目,请在我们的首页访问这些教程。1.1.2什么是XML?XML指可扩展标记语言(EXtensibleMarkupLanguage)XML是一种标记语言,很类似HTMLXML的设计宗旨是传输数据,而非显示数据XML标签没有被预定义。您需要自行定义标签。XML被设计为具有自我描述性。XML是W3C的推荐标准1.1.3XML与HTML的主要差异XML不是HTML的替代。XML和HTML为不同的目的而设计:XML被设计为传输和存储数据,其焦点是数据的内容。HTML被设计用来显示数据,其焦点是数据的外观。HTML旨在显示信息,而XML旨在传输信息。1.1.4没有任何行为的XMLXML是不作为的。也许这有点难以理解,但是XML不会做任何事情。XML被设计用来结构化、存储以及传输信息。下面是John写给George的便签,存储为XML:notetoGeorge/tofromJohn/fromheadingReminder/headingbodyDon'tforgetthemeeting!/body/note上面的这条便签具有自我描述性。它拥有标题以及留言,同时包含了发送者和接受者的信息。但是,这个XML文档仍然没有做任何事情。它仅仅是包装在XML标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。1.1.5XML仅仅是纯文本XML没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理XML。不过,能够读懂XML的应用程序可以有针对性地处理XML的标签。标签的功能性意义依赖于应用程序的特性。1.1.6通过XML您可以发明自己的标签上例中的标签没有在任何XML标准中定义过(比如to和from)。这些标签是由文档的创作者发明的。这是因为XML没有预定义的标签。在HTML中使用的标签(以及HTML的结构)是预定义的。HTML文档只使用在HTML标准中定义过的标签(比如p、h1等等)。XML允许创作者定义自己的标签和自己的文档结构。1.1.7XML不是对HTML的替代XML是对HTML的补充。XML不会替代HTML,理解这一点很重要。在大多数web应用程序中,XML用于传输数据,而HTML用于格式化并显示数据。对XML最好的描述是:XML是独立于软件和硬件的信息传输工具。1.1.8XML是W3C的推荐标准可扩展标记语言(XML)于1998年2月10日成为W3C的推荐标准。如需有关W3CXML活动的更多信息,请访问我们的W3C教程。1.1.9XML无所不在当我们看到XML标准突飞猛进的开发进度,以及大批的软件开发商采用这个标准的日新月异的速度时,真的是不禁感叹这真是令人叹为观止。目前,XML在Web中起到的作用不会亚于一直作为Web基石的HTML。XML无所不在。XML是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。1.2XML的用途XML应用于web开发的许多方面,常用于简化数据的存储和共享。1.2.1XML把数据从HTML分离如果你需要在HTML文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑HTML。通过XML,数据能够存储在独立的XML文件中。这样你就可以专注于使用HTML进行布局和显示,并确保修改底层数据不再需要对HTML进行任何的改变。通过使用几行JavaScript,你就可以读取一个外部XML文件,然后更新HTML中的数据内容。提示:您将在稍后的章节学习更多这方面的内容。1.2.2XML简化数据共享在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。XML数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。这让创建不同应用程序可以共享的数据变得更加容易。1.2.3XML简化数据传输通过XML,可以在不兼容的系统之间轻松地交换数据。对开发人员来说,其中一项最费时的挑战一直是在因特网上的不兼容系统之间交换数据。由于可以通过各种不兼容的应用程序来读取数据,以XML交换数据降低了这种复杂性。1.2.4XML简化平台的变更升级到新的系统(硬件或软件平台),总是非常费时的。必须转换大量的数据,不兼容的数据经常会丢失。XML数据以文本格式存储。这使得XML在不损失数据的情况下,更容易扩展或升级到新的操作系统、新应用程序或新的浏览器。1.2.5XML使您的数据更有用由于XML独立于硬件、软件以及应用程序,XML使您的数据更可用,也更有用。不同的应用程序都能够访问您的数据,不仅仅在HTML页中,也可以从XML数据源中进行访问。通过XML,您的数据可供各种阅读设备使用(手持的计算机、语音设备、新闻阅读器等),还可以供盲人或其他残障人士使用。1.2.6XML用于创建新的Internet语言很多新的Internet语言是通过XML创建的:其中的例子包括:XHTML-最新的HTML版本WSDL-用于描述可用的webserviceWAP和WML-用于手持设备的标记语言RSS-用于RSSfeed的语言RDF和OWL-用于描述资源和本体SMIL-用于描述针针对web的多媒体1.2.7假如开发人员都是理性的假如他们都是理性的,就让未来的应用程序使用XML来交换数据吧。未来也许会出现某种字处理软件、电子表格程序以及数据库,它们可以使用纯文本格式读取彼此的数据,而不需要使用任何的转换程序。我们现在能做的只有祈祷微软公司和所有其他的软件开发商在这一方面取得一致了。1.3XML树结构XML文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。1.3.1一个XML文档实例XML使用简单的具有自我描述性的语法:?xmlversion=1.0encoding=ISO-8859-1?notetoGeorge/tofromJohn/fromheadingReminder/headingbodyDon'tforgetthemeeting!/body/note第一行是XML声明。它定义XML的版本(1.0)和所使用的编码(ISO-8859-1=Latin-1/西欧字符集)。下一行描述文档的根元素(像在说:“本文档是一个便签”):note接下来4行描述根的4个子元素(to,from,heading以及body):toGeorge/tofromJohn/fromheadingReminder/headingbodyDon'tforgetthemeeting!/body最后一行定义根元素的结尾:/note从本例可以设想,该XML文档包含了John给George的一张便签。XML具有出色的自我描述性,你同意吗?1.3.2XML文档形成一种树结构XML文档必须包含根元素。该元素是所有其他元素的父元素。XML文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。所有元素均可拥有子元素:rootchildsubchild...../subchild/child/root父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。所有元素均可拥有文本内容和属性(类似HTML中)。1.3.3实例上图表示下面的XML中的一本书:bookstorebookcategory=COOKINGtitlelang=enEverydayItalian/titleauthorGiadaDeLaurentiis/authoryear2005/yearprice30.00/price/bookbookcategory=CHILDRENtitlelang=enHarryPotter/titleauthorJK.Rowling/authoryear2005/yearprice29.99/price/bookbookcategory=WEBtitlelang=enLearningXML/titleauthorErikT.Ray/authoryear2003/yearprice39.95/price/book/bookstore例子中的根元素是bookstore。文档中的所有book元素都被包含在bookstore中。book元素有4个子元素:title、author、year、price。1.4XML语法规则XML的语法规则很简单,且很有逻辑。这些规则很容易学习,也很容易使用。1.4.1所有XML元素都须有关闭标签在HTML,经常会看到没有关闭标签的元素:pThisisaparagraphpThisisanotherparagraph在XML中,省略关闭标签是非法的。所有元素都必须有关闭标签:pThisisaparagraph/ppThisisanotherparagraph/p注释:您也许已经注意到XML声明没有关闭标签。这不是错误。声明不属于XML本身的组成部分。它不是XML元素,也不需要关闭标签。1.4.2XML标签对大小写敏感XML元素使用XML标签进行定义。XML标签对大小写敏感。在XML中,标签Letter与标签letter是不同的。必须使用相同的大小写来编写打开标签和关闭标签:Message这是错误的。/messagemessage这是正确的。/message注释:打开标签和关闭标签通常被称为开始标签和结束标签。不论您喜欢哪种术语,它们的概念都是相同的。1.4.3XML必须正确地嵌套在HTML中,常会看到没有正确嵌套的元素:biThistextisboldanditalic/b/i在XML中,所有元素都必须彼此正确地嵌套:biThistextisboldanditalic/i/b在上例中,正确嵌套的意思是:由于i元素是在b元素内打开的,那么它必须在b元素内关闭。1.4.4XML文档必须有根元素XML文档必须有一个元素是所有其他元素的父元素。该元素称为根元素。rootchildsubchild...../subchild/child/root1.4.5XML的属性值须加引号与HTML类似,XML也可拥有属性(名称/值的对)。在XML中,XML的属性值须加引号。请研究下面的两个XML文档。第一个是错误的,第二个是正确的:notedate=08/08/2008toGeorge/tofromJohn/from/notenotedate=08/08/2008toGeorge/tofromJohn/from/note在第一个文档中的错误是,note元素中的date属性没有加引号。1.4.6实体引用在XML中,一些字符拥有特殊的意义。如果你把字符放在XML元素中,会发生错误,这是因为解析器会把它当作新元素的开始。这样会产生XML错误:messageifsalary1000then/message为了避免这个错误,请用实体引用来代替字符:messageifsalary<1000then/message在XML中,有5个预定义的实体引用:<小于>大于&&和号''单引号"引号注释:在XML中,只有字符和&确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。1.4.7XML中的注释在XML中编写注释的语法与HTML的语法很相似:!-