Chinaopub.com 下载 第11章使用XML数据 读者可能会觉得在一本ASP书中讲述本章内容不太合适,事实上扩展标记语言( e Tensible Markup Language,xML)正在越来越深入我们的生活,这是一件好事。XML可以跨越所有边 界,要获得真正独立的、跨平台的数据传送格式,XML可能是唯一的选择 这种说法可能会令人感到沮丧,但在计算机业内XML几乎得到了所有大型(或小型)开发 厂商的认可。标准能达到如此的统一,过去也只有在TCP/P协议被采纳为网络协议的标准时 出现过这种现象。XML是一种国际标准,受一个工业标准团体的控制,得到全世界的广泛支 持,并成为为数不多的只有一个标准的技术之 读者可能会觉得很奇怪,当今世界各种标准的变化就像季节更替一样频繁,即使是单个 标准也被多个公司分成数段以追求竞争优势。然而,XML却是个例外,因为它确实获得了许 多公司的广泛支持。令人惊奇的是所有的人似乎都在努力实现并遵循这种唯一的标准。如果 回想一下过去给工业界造成那么多麻烦的有关标准问题的争论,XML就更令人惊奇了 既然XML是一个被普遍实现的标准,因此,在ASP中使用它也很简单。如果使用ASP创 建一个web站点,那么很有可能会使用某种形式的数据库来存储数据。而XML是另一种存储 数据的格式,其应用也越来越广泛,因此必须掌握它。当然XML的功能不仅于此 本章将讨论以下内容 XML数据的含义 ·文档对象模型( Document Object Model,DOM是什么以及如何使用 Active X数据对象(ADO)怎样使用XML以及如何提高性能 ·如何才能使ⅩML看上去更美观 尽管立刻得到全面支持还不大可能,但我们已经看到XML支持确实已引入到IE和ADO中。 困难在于IE和ADO的发展速度不一致,所以它们之间的交互还不够理想,故本章没有介绍人 们所希望的有关数据传输的万能技术。在写这本书时,IE和ADO的结合还不是紧密,但它们 都在不断改进。所以尽管现在还没有新版本发布的具体消息,但ADO和IE将来肯定会更好地 结合 11.1XML的定义 在给ⅹML一个明确的定义之前,最好了解什么是标记语言。首先这里有一个问题,因为 语言”这个术语用得并不恰当。实际上,ⅹML并不是编程语言,而VB或C++才是真正的编 程语言,ⅹML只是定义了如何标记文本或文档的一套规则。那么“标记”又是指什么?标记 个文档是指标识出文档的某些部分有特殊含义的过程。这可能难以理解,我们举一个有关 超文本标记语言( Hypertext Markup Language,HIML)的例子,因为“HTML”中的“M”就 代表了标记( Markup) HTML是一套规定文档布局的标记。HTML包含了一些预先定义好的标记,每一种标记都 有各自的含义,例如:
下载 第11章 使用XML数据 读者可能会觉得在一本A S P书中讲述本章内容不太合适,事实上扩展标记语言 ( e X t e n s i b l e Markup Language,X M L )正在越来越深入我们的生活,这是一件好事。 X M L可以跨越所有边 界,要获得真正独立的、跨平台的数据传送格式, X M L可能是唯一的选择。 这种说法可能会令人感到沮丧,但在计算机业内 X M L几乎得到了所有大型 (或小型)开发 厂商的认可。标准能达到如此的统一,过去也只有在 T C P / I P协议被采纳为网络协议的标准时 出现过这种现象。 X M L是一种国际标准,受一个工业标准团体的控制,得到全世界的广泛支 持,并成为为数不多的只有一个标准的技术之一。 读者可能会觉得很奇怪,当今世界各种标准的变化就像季节更替一样频繁,即使是单个 标准也被多个公司分成数段以追求竞争优势。然而, X M L却是个例外,因为它确实获得了许 多公司的广泛支持。令人惊奇的是所有的人似乎都在努力实现并遵循这种唯一的标准。如果 回想一下过去给工业界造成那么多麻烦的有关标准问题的争论, X M L就更令人惊奇了。 既然X M L是一个被普遍实现的标准,因此,在 A S P中使用它也很简单。如果使用 A S P创 建一个We b站点,那么很有可能会使用某种形式的数据库来存储数据。而 X M L是另一种存储 数据的格式,其应用也越来越广泛,因此必须掌握它。当然 X M L的功能不仅于此。 本章将讨论以下内容: • XML数据的含义。 • 文档对象模型(Document Object Model,D O M )是什么以及如何使用。 • Active X 数据对象( A D O )怎样使用X M L以及如何提高性能。 • 如何才能使X M L看上去更美观。 尽管立刻得到全面支持还不大可能,但我们已经看到 X M L支持确实已引入到I E和A D O中。 困难在于I E和A D O的发展速度不一致,所以它们之间的交互还不够理想,故本章没有介绍人 们所希望的有关数据传输的万能技术。在写这本书时, I E和A D O的结合还不是紧密,但它们 都在不断改进。所以尽管现在还没有新版本发布的具体消息,但 A D O和I E将来肯定会更好地 结合。 11.1 XML的定义 在给X M L一个明确的定义之前,最好了解什么是标记语言。首先这里有一个问题,因为 “语言”这个术语用得并不恰当。实际上, X M L并不是编程语言,而 V B或C + +才是真正的编 程语言,X M L只是定义了如何标记文本或文档的一套规则。那么“标记”又是指什么?标记 一个文档是指标识出文档的某些部分有特殊含义的过程。这可能难以理解,我们举一个有关 超文本标记语言 (Hypertext Markup Language,H T M L )的例子,因为“H T M L”中的“M”就 代表了标记( M a r k u p )。 H T M L是一套规定文档布局的标记。 H T M L包含了一些预先定义好的标记,每一种标记都 有各自的含义,例如:
340Asp高箱程 下载 Here we have some text H1>This is a heading This bit is normal tex And finally some more normal text 这是一个含有少量标记的文本。文本以标记开始,在HTML里,该标记表示文 档主体的开始,主体部分以标记结束。在这个文档的主体内有标题,放在和 标记之间:另外还有一些粗体文本,放在和标记之间。这些文本标记为有特殊 含义的文本。 你可能注意到上面的例子没有使用格式化这个词。这是经过仔细考虑的,因为标记和格 式化并不是一回事。标记标定的是文档的一块区域,并没有定义任何格式。然而, 标记却标定文档的这一块区域用粗体显示。这是因为HIML中的标记是隐含了指定格 式的标记 所以请记住,标记语言只是一种规则,定义了如何给一篇文档中的特定部分增加特殊含 义。这种定义可能会起到很好的格式化作用,但这并不是使用标记的唯一原因 11.1.1XML和HTML的差别 尽管XML和HTML都使用标记,但是它们是不同的。其中最主要的区别是XML专门用来 描述文本的结构,而不是用于描述如何显示文本。ⅹML并没有一套固定的标记,例如: Here we have some text This is a heading This bit is normal text This is some ld text nd finally some more normal text 上面的代码看起来与上一节的HTML代码不是完全一样吗?如果它是HTML文档,的确 样。如果把其加载到浏览器,以上内容就会显示如图11-1所示的结果,其作用好像是格式化 文档 I Fle E&t View Favorites Too Help This is a heading This bit is normal text This is some bold text And fnally some more normal text 图11-1浏览器中显示的HTML文档 但是,如果上面的代码是XML文档,那么其中的标记就不具有任何含义,其内容只是说 有一个名为BODY的标记,在这个标记里面有一些文本
这是一个含有少量标记的文本。文本以 标记开始,在 H T M L里,该标记表示文 档主体的开始,主体部分以 标记结束。在这个文档的主体内有标题,放在 和 标记之间;另外还有一些粗体文本,放在 和标记之间。这些文本标记为有特殊 含义的文本。 你可能注意到上面的例子没有使用格式化这个词。这是经过仔细考虑的,因为标记和格 式化并不是一回事。 标记标定的是文档的一块区域,并没有定义任何格式。然而, 标记却标定文档的这一块区域用粗体显示。这是因为 H T M L中的标记是隐含了指定格 式的标记。 所以请记住,标记语言只是一种规则,定义了如何给一篇文档中的特定部分增加特殊含 义。这种定义可能会起到很好的格式化作用,但这并不是使用标记的唯一原因。 11.1.1 XML和H T M L的差别 尽管X M L和H T M L都使用标记,但是它们是不同的。其中最主要的区别是 X M L专门用来 描述文本的结构,而不是用于描述如何显示文本。 X M L并没有一套固定的标记,例如: 上面的代码看起来与上一节的 H T M L代码不是完全一样吗?如果它是 H T M L文档,的确一 样。如果把其加载到浏览器,以上内容就会显示如图 11 - 1所示的结果,其作用好像是格式化 文档。 图11-1 浏览器中显示的H T M L文档 但是,如果上面的代码是 X M L文档,那么其中的标记就不具有任何含义,其内容只是说 明: • 有一个名为B O D Y的标记,在这个标记里面有一些文本。 340计计ASP 3 高级编程 下载
第1使数341 下载 有一个名为H的标记,在这个标记里面有一些文本 有一个名为B的标记,在这个标记里面有一些文本 如果以上代码作为一个XML文档(文件的扩展名为xm)加载到I浏览器中,可以看得非常 清楚,其结果如图11-2所示 Here we have some text This is a heading This is some bold text And finally some more normal text e Done 图11-2浏览器中显示的XML文档 IE解释该XML文档并将其显示出来。请注意,IE并没对这个XML文档做任何处理,仅仅 是显示出来而已。浏览器知道如何解释HTML文档,并且知道如何用标记所定义的格式来显 文档。同样,浏览器也知道如何解释XML文档,但由于XML标记不定义格式,所以文档不 会得到格式化,于是原样显示这些标记 但IE实际上还是做了一点格式编排,使ⅩML更易读了。它把标记分为不同的层 次,所以我们看到了一套结构化的标记,且I没有解释这些标记。 迄今为止所学的XML文档由标记文档某些部分的标记组成。那么XML使用数据会有什么 问题呢,再看另一个例子。这个例子在前面的章节中出现过,读者会发现ⅹML在这里十分 uthors auid>172-32-1176White auid>213-46-8915 au_lname>Green sau_fname>Marjorie 238-95-7766 au_lname>carsoncheryl 上面的例子中使用了几对不同的标记。一开始,你可能会认为这些标记一定有其含义 他们都有一个有意义的名称,定义了 Author的一个列表、单个 Author以及一些与 Author有 关的值。在前面的章节中,这些内容出现了多次,当在一个浏览器中查看时,我们可以把 它格式化成一个表来显示。但因为这是XML,XML中的标记不代表任何意义,如图11-3所
• 有一个名为H 1的标记,在这个标记里面有一些文本。 • 有一个名为B的标记,在这个标记里面有一些文本。 如果以上代码作为一个X M L文档(文件的扩展名为. x m l )加载到I E浏览器中,可以看得非常 清楚,其结果如图11 - 2所示。 图11-2 浏览器中显示的X M L文档 I E解释该X M L文档并将其显示出来。请注意, I E并没对这个X M L文档做任何处理,仅仅 是显示出来而已。浏览器知道如何解释 H T M L文档,并且知道如何用标记所定义的格式来显 示文档。同样,浏览器也知道如何解释 X M L文档,但由于X M L标记不定义格式,所以文档不 会得到格式化,于是原样显示这些标记。 但I E实际上还是做了一点格式编排,使 X M L更易读了。它把标记分为不同的层 次,所以我们看到了一套结构化的标记,且 I E没有解释这些标记。 迄今为止所学的X M L文档由标记文档某些部分的标记组成。那么 X M L使用数据会有什么 问题呢,再看另一个例子。这个例子在前面的章节中出现过,读者会发现 X M L在这里十分有 意义。 上面的例子中使用了几对不同的标记。一开始,你可能会认为这些标记一定有其含义。 他们都有一个有意义的名称,定义了 A u t h o r的一个列表、单个 A u t h o r以及一些与 A u t h o r有 关的值。在前面的章节中,这些内容出现了多次,当在一个浏览器中查看时,我们可以把 它格式化成一个表来显示。但因为这是 X M L,X M L中的标记不代表任何意义,如图 11 - 3所 示。 第11章 使用X M L数据计计341 下载
342 SP3高级编程 China pub coM 下载 BMtp//uc/ mywebs/AsPC1 AuthorsAEXML,xm回区 File Edit View Favorites Tools Help 172-32-1176 Johnson Green ame>Marjorie 238-95-7766 tau Iname Carson cau_fname> cheryl /Author 厂厂 Loce intranet 图11-3IE浏览器中显示的XML 可见,这里IE没有对其进行任何处理。所以即使这些标记对我们来说是有意义的,但它 们对XML却没有。事实上,这段代码可以写成如下形式: 172-32-1176 white Johnson /HubbaHubbaHubba> 213-46-8915 bar>GreenMarjorie/qwerty> 238-95-7766 cheryl hUbba> 浏览器只是把这些标记原封不动地显示出来,如图11-4所示 标记可以是你所喜欢的任意符号。当然,一开始就给其一个有意义的名字是很直观的 ⅹML的可读性十分强,所以一般使用能描述其内容的标记名字。 在此,已经看到XML由一系列能描述文档各部分的标记组成。在以上使用 Author信息的 例子中,使用ⅹML来描述数据,使用了代表数据字段名的标记名。这就是XML能作为一种数 据交换格式的真正含义。它是标准的文本,所以可以很容易地从一台机器传送到另一台机器 但它并不是一种专用格式,所以任何人都可以读懂,并且如果标记名取得有意义的话,XML 数据就具有“自我描述”的功能
图11-3 IE 浏览器中显示的X M L 可见,这里I E没有对其进行任何处理。所以即使这些标记对我们来说是有意义的,但它 们对X M L却没有。事实上,这段代码可以写成如下形式: 浏览器只是把这些标记原封不动地显示出来,如图 11 - 4所示。 标记可以是你所喜欢的任意符号。当然,一开始就给其一个有意义的名字是很直观的。 X M L的可读性十分强,所以一般使用能描述其内容的标记名字。 在此,已经看到 X M L由一系列能描述文档各部分的标记组成。在以上使用 A u t h o r信息的 例子中,使用X M L来描述数据,使用了代表数据字段名的标记名。这就是 X M L能作为一种数 据交换格式的真正含义。它是标准的文本,所以可以很容易地从一台机器传送到另一台机器。 但它并不是一种专用格式,所以任何人都可以读懂,并且如果标记名取得有意义的话, X M L 数据就具有“自我描述”的功能。 342计计ASP 3 高级编程 下载
Chinapub.coM 第1使用数343 下载 ahttp://kubrick/mywebs/ASP3C11/HubbaAXML File Edit View Favorites Tool: Help 172-32-1176 white qwerty>Johnson HubbaHubbaHubba> 213-468915 Marjorie 238-957766 Carson cheryl 厂 Local intranet 图11-4浏览器显示的代码 现在你应该理解了XML数据的含义,下面再来看一些术语,以及XML的不同方法 11.12标记和元素 使用了“标记”这个名字来确定某些HTML的标记,比如或。元素是指利用这 些标记而形成的一个整体。例如 Some bold text and text 这一行由两个开始标记和两个结束标记组成,但只有两个元素。B元素由下面这一行 Some bold text and italic text 而I元素由下面这一行组成: italic 因此,一个元素由一个开始标记和一个结束标记组成,它们把文本包围在中间,其中也 可以包括其他子元素。这一点很重要,因为这牵涉到一个“形式化的XML”的概念,其中每 个开始标记都必须有一个对应的结束标记。这一点与HTML40及其以前的版本不同,在那 些HTML版本中,某些标记没有结束标记(例如和)和 第二种方法只使用一个开始标记,但在标记后面加上斜杠: 形式化的XML的另一层含义是ⅹML的标记是大小写敏感的,所以在这种情况下开始标记 和结束标记必须一致。这也意味着下面这一行是无效的XML
图11-4 浏览器显示的代码 现在你应该理解了X M L数据的含义,下面再来看一些术语,以及 X M L的不同方法。 11.1.2 标记和元素 使用了“标记”这个名字来确定某些 H T M L的标记,比如或。元素是指利用这 些标记而形成的一个整体。例如: 这一行由两个开始标记和两个结束标记组成,但只有两个元素。 B元素由下面这一行组 成: 而I元素由下面这一行组成: 因此,一个元素由一个开始标记和一个结束标记组成,它们把文本包围在中间,其中也 可以包括其他子元素。这一点很重要,因为这牵涉到一个“形式化的 X M L”的概念,其中每 一个开始标记都必须有一个对应的结束标记。这一点与 HTML 4.0及其以前的版本不同,在那 些H T M L版本中,某些标记没有结束标记 (例如和 )和标记。 如果使用X M L来描述数据,有可能在一些域中不包含数据。在这种情况下,标记就为空。 在X M L中有两种方法可以定义空标记。第一种方法是使用一个开始标记和一个结束标记,但 其中没有内容: 第二种方法只使用一个开始标记,但在标记后面加上斜杠: 形式化的X M L的另一层含义是X M L的标记是大小写敏感的,所以在这种情况下开始标记 和结束标记必须一致。这也意味着下面这一行是无效的 X M L: 第11章 使用X M L数据计计343 下载
344Asp;高编程 Chinapub.com 下载 1.根标记 另一个需要知道的术语是根标记。它表示最外层的标记,一个XML文档只能有一个根。 例如再来看看 Author的例子: aUthor 172-32-1176Johnson 213-46-8915Green Marjorie 238-95-7766Carsoncheryl 这里的根标记是。因为这里只有一个根标记,故以上表述是合法的。但下面的 代码是错误的: aUthors> 172-32-1176whiteJohnson /Authors: auid>213-46-8915≤/auid> au_lname>Green au_fname>Marjorie 238-95-7766 cheryl 这个例子里在顶层上有两个标记,因此这是无效的 2.标记 这不是一个真正的XML标记,而是一个代表特殊处理指令的标记。标记是用于每 个XML文档首行的特殊标记,可以确定版本号和语言信息。例如: <?xml version=1.0? 这一行确定了XML的版本,即当前缺省的版本是1.0版。目前,1.0版也是ⅹML的唯一版 本,但在XML文档中指定后,可在以后校对版本信息。 这个标记也可以定义XML数据中使用的语言种类。这很重要,因为在数据中包含的字符 可能不是标准的英文ASCⅡ码字符集。可以通过在“?xml”处理指令中增加 encoding属性来
1. 根标记 另一个需要知道的术语是根标记。它表示最外层的标记,一个 X M L文档只能有一个根。 例如再来看看A u t h o r的例子: 这里的根标记是。因为这里只有一个根标记,故以上表述是合法的。但下面的 代码是错误的: 这个例子里在顶层上有两个标记,因此这是无效的。 2. 标记 这不是一个真正的 X M L标记,而是一个代表特殊处理指令的标记。 标记是用于每 个X M L文档首行的特殊标记,可以确定版本号和语言信息。例如: 这一行确定了X M L的版本,即当前缺省的版本是 1 . 0版。目前,1 . 0版也是X M L的唯一版 本,但在X M L文档中指定后,可在以后校对版本信息。 这个标记也可以定义 X M L数据中使用的语言种类。这很重要,因为在数据中包含的字符 可能不是标准的英文 A S CⅡ码字符集。可以通过在“ ? x m l”处理指令中增加 e n c o d i n g属性来 344计计ASP 3 高级编程 下载
第1章使用数345 下载 指定文档所用的编码方法。 ? xml version=·1.0” encoding=“iso-8859-1·?: 表11-1是一些常用语言及其字符集的列表。 表11-1常用语言及其字符集 Latin 1(Western Europe, Latin America) ISO-8859-2 Latin 3(SE Europe) ISO-8859-3 Latin 4(Scandinavia/Baltic) ISO-88594 Latin/Arabic ISO-8859-6 Latin/ greek ISO-8859-7 ISO-88599 Latin/Lappish/Nordic/Eskimo ISO-8859-10 EUC-JP或 Shift jis 如果想了解更多的有关国际化的细节,可以参考WC中关于这方面主题的网页 其网址是wwww3corg/ nternational。 3.属性 与HTML一样,XML也用属性定义元素的特性,并且也必须是形式化的。属性必须用引 号封闭起来,例如 Professional Active Server Pages 3.0 HTML允许不用引号,但在XML中这是非法的 4.特殊字符 有一些在标准的XML字符串中不能使用的特殊字符,如表11-2所示 表11-2XML中的特殊字符及其替代字符 字符 替代的字符 例如下面的XML是非法的: Advanced Rocket Science dave Al 而以下XML是合法的 Advanced Rocket science by Dave & Al 大多数能自动生成XML的工具把这些字符转换成特殊的对应字符,但在自己生成XML时, 要注意必须使用长格式。在XML文档中使用这些单独的字符是非法的,如果文档中有这些字 符,大多数XML处理程序将出错
指定文档所用的编码方法。 表11 - 1是一些常用语言及其字符集的列表。 表11-1 常用语言及其字符集 语 言 字 符 集 U n i c o d e ( 8位) U T F - 8 Latin 1(Western Europe, Latin America) I S O - 8 8 5 9 - 1 Latin 2(Central/Eastern Europe) I S O - 8 8 5 9 - 2 Latin 3(SE Europe) I S O - 8 8 5 9 - 3 Latin 4(Scandinavia/Baltic) I S O - 8 8 5 9 - 4 L a t i n / C y r i l l i c I S O - 8 8 5 9 - 5 L a t i n / A r a b i c I S O - 8 8 5 9 - 6 L a t i n / G r e e k I S O - 8 8 5 9 - 7 L a t i n / H e b r e w I S O - 8 8 5 9 - 8 L a t i n / Tu r k i s h I S O - 8 8 5 9 - 9 L a t i n / L a p p i s h / N o r d i c / E s k i m o I S O - 8 8 5 9 - 1 0 J a p a n e s e E U C - J P或S h i f t _ J I S 如果想了解更多的有关国际化的细节,可以参考 W 3 C中关于这方面主题的网页 , 其网址是w w w. w 3 c . o rg / I n t e r n a t i o n a l /。 3. 属性 与H T M L一样,X M L也用属性定义元素的特性,并且也必须是形式化的。属性必须用引 号封闭起来,例如: H T M L允许不用引号,但在X M L中这是非法的。 4. 特殊字符 有一些在标准的X M L字符串中不能使用的特殊字符,如表 11 - 2所示。 表11-2 XML中的特殊字符及其替代字符 字 符 替代的字符 & &a m p ; & g t ; " & q u o t ; ' & a p o s ; 例如下面的X M L是非法的: 而以下X M L是合法的: 大多数能自动生成X M L的工具把这些字符转换成特殊的对应字符,但在自己生成 X M L时, 要注意必须使用长格式。在 X M L文档中使用这些单独的字符是非法的,如果文档中有这些字 符,大多数X M L处理程序将出错。 第11章 使用X M L数据计计345 下载
346Asp;高箱程 Chinaopub.com 下载 11.13模式和文档类型定义 我们一开始就声明了XML标记实际上不代表任何意义,可以给标记取任何名字,但怎 才能知道什么类型的标记在文档中是允许使用的?因此必须使用文档类型定义( Document Type Definition,DTD)或模式( Schema)。模式和DTD的功能几乎是一样的,都规定了哪些元 素在文档中可以使用,并可以把一个形式化的ⅩML文档转变为一个有效的XML文档。也就是 说它被正确标记(即有良好形式),并且只包含允许的元素和属性。 既用DTD也用模式的原因是因为微软觉得DTD在有些地方显得比较笨拙。DTD是一种定 义XML文档结构的文本文件,但DTD本身并不是XML,有完全不同的语法规则。这就有点反 常,所以在这一点上我们赞成微软的观点。如果处理XML文档,那么定义那些文档的结构也 应该是XML,这就是模式所做的,即模式是DTD的XML等价物。 下面看一个典型的DTD,它用于 authors XML文档,来自于pubs数据库: city state, zip, contract)> 这实际上很简单。它说明了文档由零个或多个 AUTHOR单元组成。 AUTHOR后面的加号 指的是“一个或多个”。每个 AUTHOR元素由九个其他元素构成。每个子元素都包含字符数据 (CDATA) DTD有两个缺点 不是XML 不能为每一个元素指定数据类型,比如整数、日期等。 CDATA仅表示元素只包含字符 数据,并不确定元素内容的实际类型。 因为这些原因,微软向W3C建议使用模式。如果将上面的DTD文档转换为模式,上面的 内容将变成 cLement name='auid/> Element name='phone'/ 再加上数据类型,将得到: Element nameeauid' type='string/>
11.1.3 模式和文档类型定义 我们一开始就声明了 X M L标记实际上不代表任何意义,可以给标记取任何名字,但怎么 才能知道什么类型的标记在文档中是允许使用的?因此必须使用文档类型定义 ( D o c u m e n t Type Definition,D T D )或模式( S c h e m a )。模式和D T D的功能几乎是一样的,都规定了哪些元 素在文档中可以使用,并可以把一个形式化的 X M L文档转变为一个有效的 X M L文档。也就是 说它被正确标记(即有良好形式),并且只包含允许的元素和属性。 既用D T D也用模式的原因是因为微软觉得 D T D在有些地方显得比较笨拙。 D T D是一种定 义X M L文档结构的文本文件,但 D T D本身并不是X M L,有完全不同的语法规则。这就有点反 常,所以在这一点上我们赞成微软的观点。如果处理 X M L文档,那么定义那些文档的结构也 应该是X M L,这就是模式所做的,即模式是 D T D的X M L等价物。 下面看一个典型的D T D,它用于authors XML文档,来自于p u b s数据库: 这实际上很简单。它说明了文档由零个或多个 A U T H O R单元组成。A U T H O R后面的加号 指的是“一个或多个”。每个A U T H O R元素由九个其他元素构成。每个子元素都包含字符数据 ( C D ATA )。 D T D有两个缺点: • 不是X M L。 • 不能为每一个元素指定数据类型,比如整数、日期等。 C D ATA仅表示元素只包含字符 数据,并不确定元素内容的实际类型。 因为这些原因,微软向 W 3 C建议使用模式。如果将上面的 D T D文档转换为模式,上面的 内容将变成: 再加上数据类型,将得到: 346计计ASP 3 高级编程 下载
第1使用数347 下载 Element name"zip'type='string/> 现在模式不仅详细指出了可使用的元素,而且指明了数据类型。虽然DTD的 CDATA等价 于一个字符串,但模式还允许其他数据类型,例如 contract元素就包含布尔型数据 但有一点很重要,模式仍不是一个标准,所以这里没有更详细地叙述其结构和布局,以 及如何使用它们。本章的内容实际上是关于如何在ASP应用程序中使用XML数据,这可能也 意味着将使用微软的ⅹML工具。微软使用自己的模式格式,别的公司使用DTD,现在还没有 统一的标准。在本章后面的部分,将介绍当ADO生成XML时所使用的模式 因为以上内容是XML的一个核心部分,所以不得不提到它们,并且你在其他文档中也能 看到模式和DTD。然而使用XML数据的方法对模式本身并没有很大影响,因此我们把有关这 方面的详细讨论写到了其他书中。 如果感兴趣的话可以参考W3CWeb站点(网址wwww3corg/XML中的详细介绍。 11.14名称空间 XML有一个问题:由于可以给一个元素取任意的名字,所以很有可能使用了别人用过的 相同名字,或甚至在不同的XML文档中使用了相同的名字来表示不同的意思。例如,考虑下 面的代码: Yes 这是从pubs数据库中的 authors表中取出来的,表示该作者是一个签过合同的作者。但是 如果一个XML文档中包含以下内容,情况会是怎样? F:/contacts/1999. doc 这 Contract元素确定了包含合同的文档 当这两个XML文档分开时,不会出现问题,但如果把这两个文档结合起来,如何分辨 contract元素到底属于哪一个文档?这就是需要有名称空间( namespace)的原因,因为名称空间 唯一地确定了哪个元素属于哪个模式。 通过在根标记中定义属性 miNs,将名称空间加入到XML文档,这需要一个统一资源标识 符( Uniform resource identifier,URI)。这个URI只是一个能唯一地确定名称空间的名称。尽 管任何唯一的名字都可以用作URI,但你会发现我们经常使用web站点的URL。例如看一下 contract的问题,它有两个不同类型的值。如果把来自两个不同源的XML数据组合起来,将得 到以下结果: aUthor 172-32-1176Johnson Yes contract>F:/contacts/1999. doc
现在模式不仅详细指出了可使用的元素,而且指明了数据类型。虽然 D T D的C D ATA等价 于一个字符串,但模式还允许其他数据类型,例如 c o n t r a c t元素就包含布尔型数据。 但有一点很重要,模式仍不是一个标准,所以这里没有更详细地叙述其结构和布局,以 及如何使用它们。本章的内容实际上是关于如何在 A S P应用程序中使用 X M L数据,这可能也 意味着将使用微软的 X M L工具。微软使用自己的模式格式,别的公司使用 D T D,现在还没有 统一的标准。在本章后面的部分,将介绍当 A D O生成X M L时所使用的模式。 因为以上内容是 X M L的一个核心部分,所以不得不提到它们,并且你在其他文档中也能 看到模式和D T D。然而使用X M L数据的方法对模式本身并没有很大影响,因此我们把有关这 方面的详细讨论写到了其他书中。 如果感兴趣的话可以参考W3C We b站点(网址w w w. w 3 c . o rg / X M L / )中的详细介绍。 11.1.4 名称空间 X M L有一个问题:由于可以给一个元素取任意的名字,所以很有可能使用了别人用过的 相同名字,或甚至在不同的 X M L文档中使用了相同的名字来表示不同的意思。例如,考虑下 面的代码: 这是从p u b s数据库中的a u t h o r s表中取出来的,表示该作者是一个签过合同的作者。但是 如果一个X M L文档中包含以下内容,情况会是怎样? 这C o n t r a c t元素确定了包含合同的文档。 当这两个 X M L文档分开时,不会出现问题,但如果把这两个文档结合起来,如何分辨 c o n t r a c t元素到底属于哪一个文档?这就是需要有名称空间 ( n a m e s p a c e )的原因,因为名称空间 唯一地确定了哪个元素属于哪个模式。 通过在根标记中定义属性x m l n s,将名称空间加入到X M L文档,这需要一个统一资源标识 符(Uniform Resource Identifier,U R I )。这个U R I只是一个能唯一地确定名称空间的名称。尽 管任何唯一的名字都可以用作 U R I,但你会发现我们经常使用 We b站点的U R L。例如看一下 c o n t r a c t的问题,它有两个不同类型的值。如果把来自两个不同源的 X M L数据组合起来,将得 到以下结果: 第11章 使用X M L数据计计347 下载
348Asp高箱程 Chinapub.com 下载 如何才能分辨这两个 contract元素?答案就是使用名称空间。于是,把它加入XML文档 172-32-1176white cau fname>Johnson Yes F:/contacts/Johnson1999 doc 这里通过加入 xmlns属性来确定两个名称空间。其结构是: xmlns: short_ namea URI short name就是在XML文档中用来联系元素和标记的名称。你很快将看到如何使用它。 URI只是一个名字,在ⅹML文档中唯一地确定名称空间。这里需要着重注意的是,URI只是纯 粹的一个名字,实际上并不连接到URL,也不隐含任何与Web服务器的连接。这只是一种唯 地确定每个名称空间的方法。只要它们在XML文档中是唯一的,可以用任何名称来命名。 在XML元素中,通过在标记前面加上适当的 short name来指定元素属于哪一个名称空间。 Yes F:/contacts/1999. doc 这里,第一个元素属于名为pubs的名称空间,第二个元素则属于名为wrox的名称空间 也可以将名称空间应用于属性,例如 whiteJohnson Yes wrox: contract>F:/contacts/Johnson1999 doc </Authors 这里把名称空间应用于auid元素的type属性,通过使用不同的名称空间或不使用名称空 间把这个type属性与文档中其他元素的type属性唯一地区分开来 以上主要讲述的意思是名称空间能确保正确地解释数据。如果ⅹML文档含有某些需要进 行特殊处理的信息,或者说包含一些特殊的信息,那么名称空间可以识别它们。使此XML与 那些凑巧包含相同元素或属性的XML区分开 同样,这是一个需要花费大量时间进行研究的领域,它已经超出了本章的范围。我们的 真正目的只是想让读者理解什么是名称空间,在后面你会看到更多有关这方面的内容。在此 并不想详细地研究它们,但现在你至少不会对它们是什么感到迷惑了。 11.1.5文档对象模型 文档对象模型( Document Object Model,DOM)是针对HTML和XML文档的API,定义了 文档的逻辑结构以及访问它们的方法。这确实很重要,因为它定义了一个标准的访问和处理 XML结构的方法。下面看一个简单的XML文档,然后再看看如何使用DOM
如何才能分辨这两个c o n t r a c t元素?答案就是使用名称空间。于是,把它加入 X M L文档: 这里通过加入x m l n s属性来确定两个名称空间。其结构是: s h o rt _ n a m e就是在X M L文档中用来联系元素和标记的名称。你很快将看到如何使用它。 U R I只是一个名字,在X M L文档中唯一地确定名称空间。这里需要着重注意的是, U R I只是纯 粹的一个名字,实际上并不连接到 U R L,也不隐含任何与 We b服务器的连接。这只是一种唯 一地确定每个名称空间的方法。只要它们在 X M L文档中是唯一的,可以用任何名称来命名。 在X M L元素中,通过在标记前面加上适当的 s h o rt _ n a m e来指定元素属于哪一个名称空间。 这里,第一个元素属于名为 p u b s的名称空间,第二个元素则属于名为 w r o x的名称空间。 也可以将名称空间应用于属性,例如: 这里把名称空间应用于 a u _ i d元素的t y p e属性,通过使用不同的名称空间或不使用名称空 间把这个t y p e属性与文档中其他元素的t y p e属性唯一地区分开来。 以上主要讲述的意思是名称空间能确保正确地解释数据。如果 X M L文档含有某些需要进 行特殊处理的信息,或者说包含一些特殊的信息,那么名称空间可以识别它们。使此 X M L与 那些凑巧包含相同元素或属性的 X M L区分开。 同样,这是一个需要花费大量时间进行研究的领域,它已经超出了本章的范围。我们的 真正目的只是想让读者理解什么是名称空间,在后面你会看到更多有关这方面的内容。在此 并不想详细地研究它们,但现在你至少不会对它们是什么感到迷惑了。 11.1.5 文档对象模型 文档对象模型(Document Object Model,D O M )是针对H T M L和X M L文档的A P I,定义了 文档的逻辑结构以及访问它们的方法。这确实很重要,因为它定义了一个标准的访问和处理 X M L结构的方法。下面看一个简单的 X M L文档,然后再看看如何使用 D O M。 348计计ASP 3 高级编程 下载