第七篇高级应用 第七篇高级应用 第一章XML及其应用 XML是标准扩展语言的简称,是未来web编程的标准。在这一章中,我们将讲述XML 在 ASPNET中的应用 711制作广告条 在这个程序中,我们通过XML语言实现每次访问网页时,将显示不同的广告条。在本 例中,我们只调用了两条广告 源文件: advanceapp intro.aspx Intro.aspx的代码如下 <html> < center><tite广告条演示<ite< enter> <link rel="stylesheet"href="intro. css"> <center form action="intro. aspx "method="post"runat="server"> <h2>广告条演示<h2> asp: adrotator AdvertisementFile="intro. xml" Border Color="black" Border Width=l runat="server"p> </center> body> ntro.xm的代码如下: <Advertisements> <Ad <ImageUrl> /hpl. gif</ImageUrl> <naVigateurl>http://www.yeskycom</navigateuri> < AlternateText>欢迎访问!</ Alternate Text> <Keyword>Computers</Keyword <Impressions>80</Impressions>
第七篇 高级应用 第七篇 高级应用 第一章 XML 及其应用 XML 是标准扩展语言的简称,是未来 Web 编程的标准。在这一章中,我们将讲述 XML 在 ASP.NET 中的应用 7.1.1 制作广告条 在这个程序中,我们通过 XML 语言实现每次访问网页时,将显示不同的广告条。在本 例中,我们只调用了两条广告 源文件:advanceapp\intro.aspx Intro.aspx 的代码如下: <html> <center><title>广告条演示</title></center> <head> <link rel="stylesheet"href="intro.css"> </head> <body> <center> <form action="intro.aspx" method="post" runat="server"> <h2>广告条演示</h2> <asp:adrotator AdvertisementFile="intro.xml" BorderColor="black" BorderWidth=1 runat="server"/> </form> </center> </body> </html> intro.xml 的 代码如下: <Advertisements> <Ad> <ImageUrl>./hp1.gif</ImageUrl> <NavigateUrl>http://www.yesky.com</NavigateUrl> <AlternateText>欢迎访问!</AlternateText> <Keyword>Computers</Keyword> <Impressions>80</Impressions> </Ad>
第七篇高级应用 <ImageUrb> /hp2. gif</ImageUrl> <navIgateurl>http://www.yesky.com</navigateurl> < Alternate Text欢迎访问</ Alternate Text> <Impressions>80</Impressions> </Advertisements> 在 Intro. aspx中,我们使用了< asp: adrotator Advertisement Files=" intro. xml'" Border Color=" black Border width= I runat=" server">这条语句来嵌入 intro. xm文件。运行效果如图: 广眚条演示- MicrosoftInternetExplorer 区 件①)编辑C)查看①)收藏)工具〔)帮助Q 翩瘀碳翻 广告条演示 火速参加“傲群”磁带机 活动 本地 Intranet 当我们点刷新按狃或者按F5键,我们将看到另一条广告条。 广告条演示- Mi crosoft Internet Exp1orsr 口 件①)编辑)查看Q收藏)工具〔)帮助Q 广告条演示 邕本地 Intranet 在本例中,我们用到了 Ad Rotator服务器控件,在xm文件中,我们我们可以定义其属 性:如表所示
第七篇 高级应用 <Ad> <ImageUrl>./hp2.gif</ImageUrl> <NavigateUrl>http://www.yesky.com</NavigateUrl> <AlternateText>欢迎访问</AlternateText> <Keyword>Computers</Keyword> <Impressions>80</Impressions> </Ad> </Advertisements> 在 intro.aspx 中,我们使用了<asp:adrotator AdvertisementFile="intro.xml" BorderColor="black" BorderWidth=1 runat="server"/>这条语句来嵌入 intro.xml 文件。运行效果如图: 当我们点刷新按狃或者按 F5 键,我们将看到另一条广告条。 在本例中,我们用到了 AdRotator 服务器控件,在 xml 文件中,我们我们可以定义其属 性:如表所示:
第七篇高级应用 图象文件的绝对或相对地址 NavigateUrl 当图象被点击时,可访问相应的网 当鼠标移动到图片上时,将显示提示信息 eyword 指定广告条的分类,我们可以利用此属性来 付广告条进行分类 指定图片在表格中的大小 712XML和 dataset控件结合使用 数据访问是一个应用系统的核心。公用语言运行环境( Common language runtime)提 供了管理数据访问应用程序接口(API)的方法。而这些AP将不论它的的数据源是什么, 如 SQL Server, OLEDE,XML等,都能提取出我们所需要的数据。我们在具体编程的时候, 有3个对象将常常用到: Connections,. Commands, and DataSets 对象 描述 Connection 与数据源进行连接。如 SQL Server或者一个 XML文件 对数据进行操纵。如进行删除( delete),提 取( select),更新( update) 显示出所需的数据 为了使我们能使用SQL语句,我们要先导入 System.Data和 System. Data. SQL这两个名 字空间。 语句如下 <%( Import Namespace="System. Data"%> <% Import Namespace="System. Data. SQL"%> 下面的表格是对几个典型的SQL语句的说明: SQL语句 Select(对单个表的操作)| SELECT* from Student Where stuname=小李 Select(对多个表的操作)| SELECT* from Student s, Dept D WhERE Sdept= D dept; Insert INSERT into Student VALUES(小王,21,·男) Delete DELETE from Student Where name=小王 Update UPDATE Student Set age=21 WHERE name=小李
第七篇 高级应用 属性 描述 ImageUrl 图象文件的绝对或相对地址 NavigateUrl 当图象被点击时,可访问相应的网页 AlternateText 当鼠标移动到图片上时,将显示提示信息 Keyword 指定广告条的分类,我们可以利用此属性来 对广告条进行分类 Impressions 指定图片在表格中的大小 7.1.2 XML 和 dataset 控件结合使用 数据访问是一个应用系统的核心。公用语言运行环境(Common Language Runtime)提 供了管理数据访问应用程序接口(API)的方法。而这些 API 将不论它的的数据源是什么, 如 SQL Server, OLEDB, XML 等,都能提取出我们所需要的数据。我们在具体编程的时候, 有 3 个对象将常常用到:Connections, Commands, and DataSets。 对象 描述 Connection 与数据源进行连接。如 SQL Server 或者一个 XML 文件。 Command 对数据进行操纵。如进行删除(delete),提 取(select),更新(update) Dataset 显示出所需的数据 为了使我们能使用 SQL 语句,我们要先导入 System.Data 和 System.Data.SQL 这两个名 字空间。 语句如下: <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SQL" %> 下面的表格是对几个典型的 SQL 语句的说明: SQL 语句 示例 Select(对单个表的操作) SELECT * from Student WHERE stuname = ‘小李’; Select(对多个表的操作) SELECT * from Student S, Dept D WHERE S.dept= D.dept; Insert INSERT into Student VALUES ('小王',21,’男’); Delete DELETE from Student WHERE name=’小王’ ; Update UPDATE Student SET age = 21 WHERE name=’小李’;
第七篇高级应用 在执行查询之前,我们要先构件一个 SQLDataSet Command对象,在执行查询以后,我 们需要把数据转移到 DataSet中,我们可以使用下面的代码: 我们假设有一个test数据库,在这个数据库中有一个 student表 Dim my Connection As New SQLConnection("server=localhost; uid=sa pwd= database=test") Dim my Command As New SQLDataSet Command("select from student", my Connection Dim ds As New Data SetO my Command. FillDataSet(ds, "student") 可能读者不禁要问:为什么要用XML文件存储数据吗?为什么不使用数据库? 这是因为:对很多目的用途来说,用数据库太过浪费了。要使用一个数据库,你必须 安装和支持一个分离的服务器处理进程( a separate server process),它常要求有安装和支持 它的管理员( administrator)。你必须学习SQL语句,并用SQL语句写查询,然后转换数据, 再返回。而如果你用XML文件存储数据,将可减少额外的服务器的负荷。还有,你还找到 了一个编辑数据的简单方法。你只要使用文本编辑器而不必使用复杂的数据库工具。XML 文件很容易备份,和朋友共享,或下载到你的客户端。同样的,你可以方便地通过p上载 新的数据到你的站点 XML还有一个更抽象的优点,即作为层次型的格式比关系型的更好。它可以用一种 很直接的方式来设计数据结构来符合你的需要。你不需要使用一个实体关系编辑器,也不 需要使你的图表( schema)标准化。如果你有一个元素( element)包含了另一个元素,你 可以直接在格式中表示它,而不需要使用表的关联 注意,在很多应用中,依靠文件系统是不够充分的。如果更新很多,文件系统会因为同 时写入而受到破坏。数据库则通常支持事务处理,可以应付所发生的请求而不至于损坏。对 于复杂的查询统计要有反复、及时的更新,此时数据库表现都很优秀。当然,关系型数据库 还有很多优点,包括丰富的查询语言,图表化工具,可伸缩性,存取控制等等。 在下面这样的案例中,正如大多数中小规模的、基于发布信息的站点一样,你可能涉及 的大多数数据存取都是读,而不是写,数据虽然可能很大,但相对来说并没有经常的更新变 化,你也不需要做很复杂的查询,即使你需要做,也将用一个独立的查询工具,那么成熟的 rdbms的优点消失了,而面向对象型的数据模型的优点则可以得到体现。 最后,为你的数据库提供一个查询器外壳来进行SQL查询并将他们转化进入 xml stream 也是完全有可能的。 所以你可以选择这二种方式之一。XML正变成一种非常健壮的,便于编程的工具,作 为某个成熟的数据库的前端工具来进行存储和查询。( oracle的 xsql servlet即是这种技术的 个很好的例子。) 713XML语法 现在我们来介绍一下 XML Schemas: 随着 XML Schema规范的逐渐普及,它成为W3C推荐标准的那一天已经不远了。我们 来看一下这个新的定义文档类型的方法 、定义元素 文档类型定义的工作现在大都是由DTDs来完成的,现在的DTD在功能上有一些限制 随着ⅹML应用的越来越广泛,这些限制逐渐阻碍了XML的发展
第七篇 高级应用 在执行查询之前,我们要先构件一个 SQLDataSetCommand 对象,在执行查询以后,我 们需要把数据转移到 DataSet 中,我们可以使用下面的代码: 我们假设有一个 test 数据库,在这个数据库中有一个 student 表。 Dim myConnection As New SQLConnection("server=localhost;uid=sa;pwd=;database=test") Dim myCommand As New SQLDataSetCommand("select * from student", myConnection) Dim ds As New DataSet() myCommand.FillDataSet(ds, "student") 可能读者不禁要问:为什么要用 XML 文件存储数据吗?为什么不使用数据库? 这是因为:对很多目的用途来说,用数据库太过浪费了。.要使用一个数据库,你必须 安装和支持一个分离的服务器处理进程(a separate server process),它常要求有安装和支持 它的管理员(administrator)。你必须学习 SQL 语句, 并用 SQL 语句写查询,然后转换数据, 再返回。而如果你用 XML 文件存储数据,将可减少额外的服务器的负荷。还有,你还找到 了一个编辑数据的简单方法。你只要使用文本编辑器,而不必使用复杂的数据库工具。XML 文件很容易备份,和朋友共享,或下载到你的客户端。同样的,你可以方便地通过 ftp 上载 新的数据到你的站点。 XML 还有一个更抽象的优点,即作为层次型的格式比关系型的更好。 它可以用一种 很直接的方式来设计数据结构来符合你的需要。你不需要使用一个实体-关系编辑器,也不 需要使你的图表(schema)标准化。 如果你有一个元素(element)包含了另一个元素,你 可以直接在格式中表示它,而不需要使用表的关联。 注意,在很多应用中,依靠文件系统是不够充分的。如果更新很多,文件系统会因为同 时写入而受到破坏。数据库则通常支持事务处理,可以应付所发生的请求而不至于损坏。对 于复杂的查询统计要有反复、及时的更新,此时数据库表现都很优秀。当然,关系型数据库 还有很多优点,包括丰富的查询语言,图表化工具,可伸缩性,存取控制等等。 在下面这样的案例中,正如大多数中小规模的、基于发布信息的站点一样,你可能涉及 的大多数数据存取都是读,而不是写,数据虽然可能很大,但相对来说并没有经常的更新变 化,你也不需要做很复杂的查询,即使你需要做,也将用一个独立的查询工具,那么成熟的 rdbms 的优点消失了,而面向对象型的数据模型的优点则可以得到体现。 最后,为你的数据库提供一个查询器外壳来进行 SQL 查询并将他们转化进入 xml stream 也是完全有可能的。 所以你可以选择这二种方式之一。XML 正变成一种非常健壮的,便于编程的工具,作 为某个成熟的数据库的前端工具来进行存储和查询。(oracle 的 xsql servlet 即是这种技术的 一个很好的例子。) 7.1.3 XML 语法 现在我们来介绍一下 XML Schemas: 随着 XML Schema 规范的逐渐普及,它成为 W3C 推荐标准的那一天已经不远了。我们 来看一下这个新的定义文档类型的方法。 一、定义元素 文档类型定义的工作现在大都是由DTDs来完成的,现在的DTD在功能上有一些限制, 随着 XML 应用的越来越广泛,这些限制逐渐阻碍了 XML 的发展
第七篇高级应用 DTD的语法不同于XML的语法,因而需要文档编写者另外的学习一套符号语言。而软件也 需要另外的一个解析器来对DTD文件进行解析 在DID中没有办法来定义能够从程序语言变量直接映射到ⅩML数据的数据类型和数 据格式。没有一组被人所熟知的基本的元素以供文档编写者选择。DTDs是ⅩML从其前辈 SGML那儿继承过来的(事实上,XML本身就是一种SGML的简化版本),这个相对比较 成熟的技术能够很快的让XML运行起来,并且能够让熟悉SGML的人对XML有更多的感 觉。然而,很快的人们就发现,XML需要一种更具表达能力的解决方案,而不仅仅是DTD。 定义元素需要指定元素的名称、元素的内容模式、元素的属性、以及内嵌的子元素 在 XML Schemas中,元素的内容模式是通过类型来定义的。一个服从于某个特定的 schema 的ⅹML文档只能按照 schema中定义的元素模式来编写,这同DTD的规则是一样的。元素 可以是简单类型的,也可以使复杂类型的。在 Schemas规范中定义了很多的简单类型,例 如: string, Integer和 decimal s简单类型的元素不能在包含子元素和属性,而复杂类型的 元素则能够嵌套子元素,并能够包含有属性。 我们来看看一个简单的定义元素的例子: element name="quantity"type="positive-integer"7> <element name="amount"type="decimal"/> 我们知道在面向对象的观点中,有聚集和继承的概念,可以在已有的类中衍生出新类。 在这儿 Schema借用了这些观点,用户也可以通过聚集和继承来在老元素的基础上定义新的 元素。聚集能够把一组已存在的元素组合成一个新的元素。继承则通过扩展已存在的元素来 定义一个新的元素,并且这个新的元素能够代表被继承的那个元素 比如,如果我们要从 decimal类型中派生一个新的 value元素,并让它有这样的内容模 式:< value unit=" Celsius">42</ value>,我们可以这样的定义: <element name="value> <complex Type base=&single; decimal&single; derived By=&single; extension&single <attribute name=&single, unit&single, type=&single, string &single; / element> 下面我们把time和vaue元素聚集到一个 measurement元素中,形成这样的内容模式: <time>2000-10-0812:00:00GMr<time <value unit="Celsius">42</value> 那么最终我们的 schema元素定义结果就应该是这样的: Element name=&single, measurement&single, type=&single, measurement&single; / <complex Type name=&single, measurement&single <element name=&single, time&single, type=&single, time&single; / <element name=&single, value&single; type=&single, value&single complex Type> 和上面的 schema等同DTD是: <!ELEMENT measurementtime, value)>
第七篇 高级应用 DTD 的语法不同于 XML 的语法,因而需要文档编写者另外的学习一套符号语言。而软件也 需要另外的一个解析器来对 DTD 文件进行解析。 在 DTD 中没有办法来定义能够从程序语言变量直接映射到 XML 数据的数据类型和数 据格式。 没有一组被人所熟知的基本的元素以供文档编写者选择。DTDs 是 XML 从其前辈 SGML 那儿继承过来的(事实上,XML 本身就是一种 SGML 的简化版本),这个相对比较 成熟的技术能够很快的让 XML 运行起来,并且能够让熟悉 SGML 的人对 XML 有更多的感 觉。然而,很快的人们就发现,XML 需要一种更具表达能力的解决方案,而不仅仅是 DTD。 定义元素需要指定元素的名称、元素的内容模式、元素的属性、以及内嵌的子元素。 在 XML Schemas 中,元素的内容模式是通过类型来定义的。一个服从于某个特定的 schema 的 XML 文档只能按照 schema 中定义的元素模式来编写,这同 DTD 的规则是一样的。元素 可以是简单类型的,也可以使复杂类型的。在 Schemas 规范中定义了很多的简单类型,例 如: string,integer 和 decimal。简单类型的元素不能在包含子元素和属性,而复杂类型的 元素则能够嵌套子元素,并能够包含有属性。 我们来看看一个简单的定义元素的例子: <element name="quantity" type="positive-integer"/> <element name="amount" type="decimal"/> 我们知道在面向对象的观点中,有聚集和继承的概念,可以在已有的类中衍生出新类。 在这儿 Schema 借用了这些观点,用户也可以通过聚集和继承来在老元素的基础上定义新的 元素。聚集能够把一组已存在的元素组合成一个新的元素。继承则通过扩展已存在的元素来 定义一个新的元素,并且这个新的元素能够代表被继承的那个元素。 比如,如果我们要从 decimal 类型中派生一个新的 value 元素,并让它有这样的内容模 式:<value unit="Celsius">42</value>,我们可以这样的定义: <element name="value"> <complexType base=&single;decimal&single; derivedBy=&single;extension&single;> <attribute name=&single;unit&single; type=&single;string&single;/> </complexType> </element> 下面我们把 time 和 value 元素聚集到一个 measurement 元素中,形成这样的内容模式: <measurement> <time>2000-10-08 12:00:00 GMT<time/> <value unit="Celsius">42</value> 那么最终我们的 schema 元素定义结果就应该是这样的: <element name=&single;measurement&single; type=&single;measurement&single;/> <complexType name=&single;measurement&single;> <element name=&single;time&single; type=&single;time&single;/> <element name=&single;value&single; type=&single;value&single;/> </complexType> 和上面的 schema 等同 DTD 是: <!ELEMENT measurement (time, value)>