| | |
| | |
一、建立访问SQL Server 2000的虚拟目录 在通过HTTP访问SQL Server 2000数据库之前,你必须设置一个适当的虚拟目录。利 用SQL Server工具集中IIS虚拟目录管理器 (在SQL Server Tools程序组中点击Configure SQL XML Support启动该工具)在运行IIS的机器上定义并注册一个新的虚拟目录。 该工具 IIS 服务器的名字与虚拟目录必须作为URL的一部分。虚拟目录的信息(包括登录名 、口令和访问权限)用于建立与指定数据库的连接并执行查询。 URL可被定义为: 直接访问数据库对象,例如表。 执行模板文件。 执行XPath查询。 建立XML虚拟目录示例 该示例演示建立一个访问SQL Server 2000的IIS虚拟目录的全过程: 1、在Microsoft SQL Server程序组点击Configure SQL XML Support in IIS。 2、展开一个服务器,然后点击一个WEB站点。 3、在选择的WEB站点上单击右键,将鼠标移至“新建(N)”,点击“Virtual 4、在New Virtual Directory Properties的General页输入虚拟目录名。在此例中, 输入XML及物理路径 (例如C:InterpubWwwrootxml,假设你已在C:InterpubWwwroot 目录中建立xml子目录)。你也可使用Browse按钮选择一个目录。 5、在Security页,选择SQL Server并输入合法的SQL Server登录信息。 6、在Data Source页,在SQL Server框中,输入服务器名,例如“(local)”,当 服务器上存在多个SQL Server实例时,还需指定实例名。在Database框,输入默认数据库名, 7、在Settings页,选择Allow URL queries,Allow template queries,Allow 8、在Virtual Names页,点击New为template(模板)建立虚拟目录。 在Virtual Name Configuration对话框的Virtual name框中输入template(或其 他名字)。在Type列表 中,选择template。输入路径(例如:C:Ine tpubWwwrootxml emplate,假设已建立该目录。)点击Save保存虚拟目录名。 9、其他类型如object、schema的虚拟目录建立同上。 10、点击O 4嫔柚谩? 如此,建立了一个xml虚拟目录。为测试该虚拟目录,浏览器地址栏输入 http://$#@60;IISServer$#@62;/xml?sql=SELECT*FROM+Sysobjects+WHERE+xtype= "u"+FOR+XML+AUTO&root=root并回车。 注意: 为防止不希望的访问,建议为该目录建立一个专门的SQL Server登录帐号,并取消该 帐号所有不必要的权限,尤其是DELETE、DROP、CREATE PROC权限, 最好禁止在该虚拟目录直 接执行SQL语句。永远不要将SA帐号作为该虚拟目录的登录帐号。 二、利用HTTP执行SQL语句 Microsoft SQL Server 2000可通过在URL中执行查询直接访问(假如注册虚拟目录时 选择了允许URL查询)。客户端可通过HTTP的GET和POST方法提交请求。 示例 在下述例子中,xml是用于访问test数据库的虚拟目录。 在查询示例中,如果查询返回多个元素,根元素可通过以下方法之添加: 在查询前添加SELECT "$#@60;ROOT$#@62;",并在其后添加SELECT 传递一个root关键字作为查询的参数,其值为ROOT(或其他任何值) 1、定义一个简单查询 下例返回数据库test中所有用户定义表的名字及建立日期。 http://IISserver/xml?sql=select+name, crdate+from+sysobjects+where+xtype= "u"+for+xml+auto&root=ROOT 2、定义一个涉及多个表的查询 下例中查询返回数据库中所有用户定义表的列的数据类型定义。 http://IISServer/xml?sql= select+s.name+as+表名,s.xtype+as+类别, +c.name+as+列名,+t.name+as+数据类型,+c.length+as+长度 +from+sysobjects+s,systypes+t,syscolumns+c+where+s.xtype= "u"+and+c.id=object_id(s.name)+and+c.xtype= t.xtype+order+by+1,2+for+xml+auto&root=ROOT 3、在查询中定义特殊字符 对于URL有特殊意义的字符,将其替换为“%数字”的形式,如SQL语句中的“LIKE 4、定义contenttype关键字 contenttype关键字规定返回的文档的content-type。在URL中未规定xsl参数 text/XML文档默认的content-type。在URL中规定xsl参数, 默认的contenttype 是 5、定义xsl 关键字 下例返回数据库test中所有用户定义表的名字及建立日期。但这些信息经table.xsl http://IISserver/xml?sql=select+name,crdate+from+sysobjects +where+xtype="u"+for+xml+auto&root=ROOT&xsl=table.xsl 在该例中,.xsl文件存储于该虚拟目录中。其内容如下: $#@60;?xml version="1.0" encoding="GB2312"?$#@62; $#@60;xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"$#@62; $#@60;!--根模板--$#@62; $#@60;xsl:template match="/"$#@62; $#@60;HTML$#@62;$#@60;BODY$#@62; $#@60;xsl:apply-templates select="ROOT"/$#@62; $#@60;/BODY$#@62;$#@60;/HTML$#@62; $#@60;/xsl:template$#@62; $#@60;xsl:template match="ROOT"$#@62; $#@60;TABLE border="1"$#@62; $#@60;xsl:for-each select="sysobjects[0]/@*"$#@62; $#@60;TH$#@62;$#@60;xsl:eval$#@62;this.name$#@60;/xsl:eval $#@60;/xsl:for-each$#@62; $#@60;xsl:apply-templates select="sysobjects"/$#@62; $#@60;/TABLE$#@62; $#@60;/xsl:template$#@62; $#@60;xsl:template match="sysobjects"$#@62; $#@60;TR$#@62; $#@60;xsl:for-each select="@*"$#@62; $#@60;TD$#@62;$#@60;xsl:value-of/$#@62;$#@60;/TD$#@62; $#@60;/xsl:for-each$#@62; $#@60;/TR$#@62; $#@60;/xsl:template$#@62; $#@60;/xsl:stylesheet$#@62; 三、利用HTTP执行模板文件 在URL中编写长的SQL查询非常麻烦,另一个方法是,用模板定义查询(SQL或XPath) 。模板文件名在URL中规定。使用模板你能: 定义SQL查询或XPath查询。 规定执行SQL或XPath查询产生的XML片断的顶级元素。 定义能传递给SQL语句或XPath查询的参数。 声明名字空间 定义应用结果文档的XSL样式表。 另外,如果将所有需要的查询都通过模板定义,并规定不允许在URL中直接执行SQL语句 使用XML模板 模板文件的一般格式是: $#@60;ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" sql:xsl="XSL FileName" $#@62; $#@60;sql:header$#@62; $#@60;sql:param$#@62;..$#@60;/sql:param$#@62; $#@60;sql:param$#@62;..$#@60;/sql:param$#@62;...n $#@60;/sql:header$#@62; $#@60;sql:query$#@62; sql statement(s) $#@60;/sql:query$#@62; $#@60;sql:xpath-query mapping-schema="SchemaFileName.xml"$#@62; XPath query $#@60;/sql:xpath-query$#@62; $#@60;/ROOT$#@62; 在模板中所有部分都是可选的。然而xmlns:sql="urn:schemas-micro soft-com:xml-sql"是必须的。名字空间可命名为任何其他名字,sql只是一个别名。 $#@60;ROOT$#@62; 该标记规定XML文档的顶级元素。$#@60;ROOT$#@62;可取任意名字。 $#@60;sql:header$#@62; 该标记用于包含头信息。在当前的实现,只有$#@60;sql:param$#@62;能被置于该 $#@60;sql:param$#@62; 该元素用于定义一个参数以传递给模板中的查询。每个$#@60;param$#@62;元素定 义一个参数,可以有多个$#@60;param$#@62;元素置于$#@60;sql:header$#@62;标记中。 $#@60;sql:query$#@62; 该元素用于规定SQL查询,可以定义多个$#@60;sql:query$#@62;元素, $#@60;sql:xpath-query$#@62; 规定XPath查询。 sql:xsl 规定作用于XML文档的XSL样式表。 mapping-schema 该属性用于标识XDR大纲。 注意:每个$#@60;sql:query$#@62;或$#@60;sql:XPath-query$#@62;表示一个分离的 事务。因此,如果在模板中有多个 $#@60;sql:query$#@62;或 $#@60;sql:XPath-query$#@62; 标记,如果其中一个失败,其他将继续处理。 使用模板执行SQL查询 下例中,xml是使用IIS Virtual Directory Management for SQL Server utility 建立的虚拟目录,template是建立该虚拟目录时为template类型定义的虚拟名。 示例 建立一个简单的SELECT模板 $#@60;?xml version="1.0" encoding="gb2312"?$#@62; $#@60;ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"$#@62; $#@60;sql:query$#@62; select name,crdate from sysobjects where+xtype="u" for xml auto $#@60;/sql:query$#@62; $#@60;/ROOT$#@62; 该模板保存至一个文件(first.xml),使用下面的URL执行: http://IISServer/xml/template/first.xml 传递参数至模板文件 SQL查询的参数值可在模板中规定。$#@60;sql:header$#@62;用于定义参数,参数可 赋给默认值。默认值在执行模板文件但未提供参数值时使用。 将上面的模板文件改造为: $#@60;?xml version="1.0" encoding="gb2312"?$#@62; $#@60;ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"$#@62; $#@60;sql:header$#@62; $#@60;sql:param name="type"$#@62;u$#@60;/sql:param$#@62; $#@60;/sql:header$#@62; $#@60;sql:query$#@62; select name,crdate from sysobjects where+xtype=@type for xml auto $#@60;/sql:query$#@62; $#@60;/ROOT$#@62; 保存上述文件,用下面的URL执行: http://IISServer/xml/template/first.xml&type=p 即可得到存储过程的名字及建立日期 在模板中规定XSL样式表 XSL样式表可用于处理查询结果。使用HTTP执行一个模板时,可以下述方法之前规定 在模板中使用sql:xsl属性。 在URL中规定使用xsl关键字规定XSL文件。 如果在模板文件及URL中均定义了XSL样式表文件,那么模板中规定的XSL文件首先处 理查询结果,处理后的文件再由在URL中以关键字xsl规定的XSL文件进行处理作为最终的输出 示例 将上例的模式文件first.xml改造为下面的形式: $#@60;?xml version="1.0" encoding="gb2312"?$#@62; $#@60;ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" s $#@60;sql:header$#@62; $#@60;sql:param name="type"$#@62;u$#@60;/sql:param$#@62; $#@60;/sql:header$#@62; $#@60;sql:query$#@62; select name,crdate from sysobjects where+xtype=@type for xml auto $#@60;/sql:query$#@62; $#@60;/ROOT$#@62; 将前面建立的XSL文件table.xsl拷贝至first.xml所在目录。以下面的URL执行: http://IISServer/xml/template/first.xml&type=p 由于经XSL文件处理后的查询结果实际上一个HTML文件,因此在URL中规定返回结果 http://IISServer/xml/template/first.xml&type=p&contenttype=text/html 备注 1、只要权限允许,在模板文件中可应用的SQL语句还包括执行存储过程、建立表、 数据库、删除表、数据库等,几乎所有合法的SQL语句都可执行,因此必须密切关注安全问题 。永远不要将SA作为IIS连接SQL Server 2000的登录帐户。 2、欲了解更多信息请参考SQL Server 2000的Books Online中XML and Internet 3、欲了解更多有关XSL的资料,在SQL Server 2000的Books Online首页上点击“ Microsoft Data Access Component (MDAC) 2.6 and Extensible Markup Language (XML) 2.6 Documentation”;
| |
|
|
| |
| |
|