344Asp;高编程 Chinapub.com 下载 1.根标记 另一个需要知道的术语是根标记。它表示最外层的标记,一个XML文档只能有一个根。 例如再来看看 Author的例子: <Authors> aUthor <au_id>172-32-1176</auid au fname>Johnson</aufname> <auid>213-46-8915</auid au.lname>Green</aulname> <au_fname>Marjorie</au_fname> </Author> <Author> <auid>238-95-7766</ <au_lname>Carson</au au_fname>cheryl</au </Author> </Authors> 这里的根标记是< Authors>。因为这里只有一个根标记,故以上表述是合法的。但下面的 代码是错误的: aUthors> <Author> <auid>172-32-1176</au_id au_lname>white</au_lname <au_ fname>Johnson</au_fname> </Author> /Authors: <Authors> auid>213-46-8915≤/auid> au_lname>Green</au_lname> au_fname>Marjorie</au_fname: </Author> <Author> <auid>238-95-7766</auid> <au_fname>cheryl</au_fname> </Author> 这个例子里在顶层上有两个标记,因此这是无效的 2.<?xml>标记 这不是一个真正的XML标记,而是一个代表特殊处理指令的标记。<?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的例子: 这里的根标记是< A u t h o r s >。因为这里只有一个根标记,故以上表述是合法的。但下面的 代码是错误的: 这个例子里在顶层上有两个标记,因此这是无效的。 2. <?xml>标记 这不是一个真正的 X M L标记,而是一个代表特殊处理指令的标记。 < ? 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也用属性定义元素的特性,并且也必须是形式化的。属性必须用引 号封闭起来,例如 <BOOK ISBN-'1-861002-61-0'>Professional Active Server Pages 3.0</BOOK> HTML允许不用引号,但在XML中这是非法的 4.特殊字符 有一些在标准的XML字符串中不能使用的特殊字符,如表11-2所示 表11-2XML中的特殊字符及其替代字符 字符 替代的字符 例如下面的XML是非法的: <BOOK>Advanced Rocket Science dave Al</BoOK> 而以下XML是合法的 <BOOK> Advanced Rocket science by Dave & Al</BOOK> 大多数能自动生成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 ; < & l t ; > & 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)> < ELEMENT au id (CDATA I ELEMENT au_lname (CDATA)> < ElEMENT au_fname (CDATA) <I ELEMENT address (CDATA)> < ELEMENT city (CDATA)> < ELEMENT state (CDATA)> <!ELEMENT zip (cDaTA) < I ELEMENT contract (CDATA)> 这实际上很简单。它说明了文档由零个或多个 AUTHOR单元组成。 AUTHOR后面的加号 指的是“一个或多个”。每个 AUTHOR元素由九个其他元素构成。每个子元素都包含字符数据 (CDATA) DTD有两个缺点 不是XML 不能为每一个元素指定数据类型,比如整数、日期等。 CDATA仅表示元素只包含字符 数据,并不确定元素内容的实际类型。 因为这些原因,微软向W3C建议使用模式。如果将上面的DTD文档转换为模式,上面的 内容将变成 < Schema ID=" Author”> cLement name='auid/> <Element name=_lname'/> <Element name='aufname'/> Element name='phone'/ <Element name='address/> <Element name=city/> <Element name=zip/> <Element name=contract"/ </Schema> 再加上数据类型,将得到: <Schema ID="Author"> Element nameeauid' type='string/> <Element name=au_lname'type='string'/> <Element name=au_ fname 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="phone"typem'string <Element name="address type="string <Element ni state"type=string/> Element name"zip'type='string/> <Element nameecontract" type="boolean/> </Schema> 现在模式不仅详细指出了可使用的元素,而且指明了数据类型。虽然DTD的 CDATA等价 于一个字符串,但模式还允许其他数据类型,例如 contract元素就包含布尔型数据 但有一点很重要,模式仍不是一个标准,所以这里没有更详细地叙述其结构和布局,以 及如何使用它们。本章的内容实际上是关于如何在ASP应用程序中使用XML数据,这可能也 意味着将使用微软的ⅹML工具。微软使用自己的模式格式,别的公司使用DTD,现在还没有 统一的标准。在本章后面的部分,将介绍当ADO生成XML时所使用的模式 因为以上内容是XML的一个核心部分,所以不得不提到它们,并且你在其他文档中也能 看到模式和DTD。然而使用XML数据的方法对模式本身并没有很大影响,因此我们把有关这 方面的详细讨论写到了其他书中。 如果感兴趣的话可以参考W3CWeb站点(网址wwww3corg/XML中的详细介绍。 11.14名称空间 XML有一个问题:由于可以给一个元素取任意的名字,所以很有可能使用了别人用过的 相同名字,或甚至在不同的XML文档中使用了相同的名字来表示不同的意思。例如,考虑下 面的代码: <contract>Yes</contract> 这是从pubs数据库中的 authors表中取出来的,表示该作者是一个签过合同的作者。但是 如果一个XML文档中包含以下内容,情况会是怎样? <contract>F:/contacts/1999. doc</contract> 这 Contract元素确定了包含合同的文档 当这两个XML文档分开时,不会出现问题,但如果把这两个文档结合起来,如何分辨 contract元素到底属于哪一个文档?这就是需要有名称空间( namespace)的原因,因为名称空间 唯一地确定了哪个元素属于哪个模式。 通过在根标记中定义属性 miNs,将名称空间加入到XML文档,这需要一个统一资源标识 符( Uniform resource identifier,URI)。这个URI只是一个能唯一地确定名称空间的名称。尽 管任何唯一的名字都可以用作URI,但你会发现我们经常使用web站点的URL。例如看一下 contract的问题,它有两个不同类型的值。如果把来自两个不同源的XML数据组合起来,将得 到以下结果: <Authors> aUthor <auid>172-32-1176</auid <au fname>Johnson</au_fname> <contract>Yes</contract> contract>F:/contacts/1999. doc</contract </Author>
现在模式不仅详细指出了可使用的元素,而且指明了数据类型。虽然 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文档 <autHorsxmlns:pubs=http://www.wroxco.uk/ms/pubsdb xmlns:wrox=http://www.wroxco.uk/authors> <Autho auid>172-32-1176</au_id cau_lname>white</au_lname> cau fname>Johnson</au fname> <pubs: contract>Yes</pubs: contract> <wrox: contract>F:/contacts/Johnson1999 doc</wrox: contract> </Author> 这里通过加入 xmlns属性来确定两个名称空间。其结构是: xmlns: short_ namea URI short name就是在XML文档中用来联系元素和标记的名称。你很快将看到如何使用它。 URI只是一个名字,在ⅹML文档中唯一地确定名称空间。这里需要着重注意的是,URI只是纯 粹的一个名字,实际上并不连接到URL,也不隐含任何与Web服务器的连接。这只是一种唯 地确定每个名称空间的方法。只要它们在XML文档中是唯一的,可以用任何名称来命名。 在XML元素中,通过在标记前面加上适当的 short name来指定元素属于哪一个名称空间。 <pubs: contract>Yes</pubs: contract> <wrox: contract>F:/contacts/1999. doc</wrox: contract> 这里,第一个元素属于名为pubs的名称空间,第二个元素则属于名为wrox的名称空间 也可以将名称空间应用于属性,例如 <authOrsxmlns:pubs=http://www.wroxco.uk/ms/pubsdb xmlns:wrox.http://www. uk/ authors·> <pubs: au id pubs: type="UID2172-32-1176</pubs: auid> <au lname>white</au_lname <au_ fname>Johnson</au_fname> <pubs: contract>Yes</pubs: contract> wrox: contract>F:/contacts/Johnson1999 doc</wrox: contract> </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 高级编程 下载