XML(eXtensible Markup Language,可扩展标记语言)是SGML的一个子集,但比SGML简单,用以创建可相互转换的结构化文本文档和数据文档。下面说明一下与XML相关的一些概念。
-
SGML(Standard Generalized Markup Language,标准通用标记语言),由于IBM公司的三位先驱者Charles GoldFarb、Edward Mosher和Raymond Lorie创立,主要作为大型文档的编制工具。DTD(Document Type Definition,文档类型定义)是SGML文档的核心,它定义了SGML文档必须遵循的一组语法规则。由于它很复杂,所以只是在一些大公司或大项目中使用。直到HTML面世,它还是默默无闻。
-
HTML(Hypertext Markup Language,超文本标记语言),它是在SGML框架中通过DTD定义的标记语言,是SGML的一种应用。它由于结构简单,容易学习而迅速普及,每个人都能很快地建立自已的页面,HTML造就了现时Internet上无数的信息资源。HTML标记只描述文档的外观,而不描述文档的内容本身--里面有什么。HTML是不明白网页内容的,这样就造成了内容搜索的差异和不确定性。另一个问题是,HTML不是可扩展的,这意味着没有一种方便的途径来扩展标记。每一个新标记的引入都会造成系统的不一致性和对标准的修订。这就是为什么现在我们用不同的浏览器浏览同一个网站时表现效果会有差异。
-
XHTML(eXtensible Hypertext Markup Language,可扩展超文本标记语言),它是按XML规则编写的HTML,由于有统一的规则约束,所以它不会出现如HTML一样的不规范、不一致性问题。
-
XML(eXtensible Markup Language,可扩展标记语言),继承了SGML的优点,但又没有了SGML的复杂性。XML专门为WEB应用而设计,和HTML不同,它是一种元标记语言(meta-markup language),也就是说它没有一套能够适用于各个领域中所有用户的固守的标签和元素,相反,它允许开发者根据自已的需要定义自已的元素,XML中的X(eXtensible)就是说明了这一点。它的特点有:
-
XML使用Unicode字符集,可生成英文、中文、希腊文或梵文等多种语言。
-
可将多个来源(包括其他XML文档和二进制文件)汇合进一个XML文档。
-
可利用DTD或Schema(模式)管理一致性问题。DTD主要用于文档型文档,Schema主要用数据型文档。
-
具有很好的扩展性,可定义自已的元素和属性。
-
通过XML可从关系数据库管理系统中提取数据到结构化文档。它还被设计成可对各种数据对象进行操作。
-
在一个设计良好的XML应用中,XML标记不涉及文档如何显示,只表示文档的结构。
XML被设计用来存储、支持和交换数据,而不是用来显示数据的。通常,XML被用于数据交换,而不是数据存储。 -
-
元数据,定义数据的数据。
-
标记语言是一种定义文档的格式语言。SGML、XML、XHML、HTML都属标记语言。
XML文档是什么?它有时是一个文件,有时是关系数据库中的一条记录,有时是由Object Request Broker(对象请求代理程序)传送的一个对象,有时是到达网络接口的一个字节流。XML文档可使不同系统、不同平台的数据实现统一接口,这就是XML真正的威力所在。下面列举几个使用XML的领域:
-
文档设计和管理,可利用XML维护公司的文档资料。
-
Web开发,利用XHTML和XSLT实现的Web页面扩展性更好,更容易维护。
-
数据库应用和程序开发,可从数据库中提取数据并生成XML文档,实现信息的跨平台、跨系统沟通。
-
定义其它语言,WML和WAP就是用通过XML建立的。
XML不是什么?
-
XML只是一种标记语言,不是一种编程语言。不存在一种编译器,把XML文档转化成可执行二进制代码。
-
XML不是一种网络传输协议,但通过网络协议传输的数据格式则可以是XML格式的。
-
XML不是数据库,不能替代Oracle或MySQL这类的关系数据库管理系统。
Table of Contents
创建一个简单的index.xml文档:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="basic.xsl"?> <basic>Hello World</basic>
下面创建一个名为basic.xsl的XML样式表(XSL),以便在浏览器中显示XML文档内容:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>a basic stylesheet</title> </head> <body> <xsl:value-of select="/" /> </body> </html> </xsl:template> </xsl:stylesheet>
接着在浏览器中打开index.xml文档,则可显示“Hello World”。上面两个文档都是合法的XML文件,具体的语法规则下面会详细介绍,上例可先给大家一个感性的认识。
合法的XML文档可有种意思,一个是良构文档(well-format),即符合XML规则书写的文档;另一种是有效文档,是已验证符合一个DTD的文档。
-
XML是区分大小写的;
-
所有元素的起始和结束标注必须成对出现,且要正确嵌套;
-
如果使XML说明,则它必须是XML文档的第一行:
<?xml version="1.0"?>
-
元素属性必须用引号引起来,单、双引号都可以,但必须成对出现。如:
<basic attr="1.0"> <basic attr='1.0'>
-
XML命名规则:
-
XML名以下划线或字母开始;
-
XML名可包含字母、数字、句点、下划线和冒号;
-
XML名不能包含空格;
-
XML名不能以数字开始,但可包含数字;
-
XML名区分大小写。
-
-
保留标记字符,如果要在XML中显示<或&之类的标记,就要使用字符的实体形式,XML中有五种预先定义了的实体:
< 表示<字符 > 表示>字符 & 表示&字符 ' 表示'字符 " 表示"字符
我们也可用ENTITY自定义实体:
<!ENTITY linux "linux is a very good system"> 这样我们可用&linux;来调用。
-
XML文档内容中的空格是有意义的,在转换后会保留。
-
空元素以<开始并以/>结束,如<br/>。
符合XML语法规则的XML文档称为良构文档,这些规则如下:
-
应当只有一个父标志,由父标志派生所有其它子标志,在一个文档中不能存在多个父标志。
-
嵌套元素应按正确的顺序开始和结束。
-
子标志应在父标志完成前关闭。
-
属性值应放在双引号中。
通过某个DTD或Schema验证的文档称为有效XML文档。
-
XML声明:
-
version,定义XML规范的版本号,到现在为止,只有一个版本号1.0。
-
encoding,指定文档的编码系统。
-
standalone,定义文档是独立的还是需要装入其他元素才能正确分析。如果XML文档没有外部实体或DTD,则可以设置为no,否则设置为yes。可用该值提高性能:如果为no,则可提高处理速度;如果设置为yes,则首先要分析文档,确定需要其他哪些文件,然后才能完全分析文档。
-
-
根元素,每篇XML文档都需要有且只能有一个根元素。由元素是文档的第一个元素,包含其它所有元素。下例的portal就是根元素,如:
<portal> <name>jims</name> <email></email> ... </portal>
-
属性,每个元素都可以设置一个或多个属性,如:
<portal> <name id='1',sex="male">Jims</name> </portal>
元素和属性都可以表示信息,什么时候使用元素,什么时候使用属性呢?属性信息表现能力有限,它只能表示字符串。所以当需灵活表示信息时应该使用元素。一般把信息主体放到元素中,属性只放一些注释或额外的信息。
-
CDATA部份,它用<![CDATA[和]]>表示,它们之间的数据作为原始字符显示,唯一不能出现的标志是]]>。
-
注释,注释是很重要,不论是在编写程序和文档时,所以XML也提供了注释功能,以<!--开头-->结尾的一对区间为注释。在以-->结束之前,不能出现“--”号,“---”更不允许。
-
处理指令,处理指令以<?开头以?>结尾。如PHP处理指令可写成,<?php ... ?>。处理指令是标记,而不是元素。因此,与注释一样,处理指令可出现在XML文档的标签外的任何位置,包括根元素之前或之后。最常见的处理指令是,xml-stylesheet样式表指令,它会告诉浏览器在显示文档时应用什么样式表。如:
<?xml-stylesheet href="sample.css" type="text/css"?> <portal> <name>...</name> ... </portal>
Table of Contents
由于XML可自定义标签,所以每个人定义的标签集都会不同,如果没有一套标准来规定标签的定义原则,则应用程序就不能对XML文档进行处理。解决该问题的方案采用DTD,DTD(Document Type Definition,文档类型定义),用于定义XML文档的编写规则。如哪些元素可出现在文档中,及元素的内容和属性的要求等。应用程序会利用这个DTD对文档进行检验,符合DTD约束规则的XML文档称之为有效文档,可以进行下一步处理,否则会报错,应用程序可捕获该错误进行相应的异常处理。检验过程是可选,这要视具体应用而定。
要使用DTD进行有效性检验,就要使用文档类型定义声明指定DTD。如:
<?xml version="1.0" standalone="no"?> <!DOCTYPE portal SYSTEM "http://www.w3c.com/dtd/portal.dtd"> <portal> <name>Jims</name> <email>Jims@163.com</email> <email>Jims@21cn.com</email> </portal>
文档类型声明位于XML声明之后,根元素之前。如果dtd文档位于本机,可用路径名直接指出dtd文档的位置。portal.dtd的内容如下:
<!ELEMENT portal (name,email*)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)>
上面的内容也可直接写到XML文档内,这种dtd声明方式叫内部dtd子集,如: