奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> XML >> 使用XML模板
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • .Net的精髓XML和SOAP简

  • 使用XMLHTTP制作域名查

  • 什么是XML

  • XML for Analysis 规范

  • XML for Analysis 规范

  • XML for Analysis 规范

  • 修改大型 XML 文件的有

  • 通过xalan实现关系型数

  • 使用XML模板
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-20

    下面是模板的一般形式,显示了指定 SQL 查询和 XPath 查询的方式:

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"
    sql:xsl='XSL FileName' >
    <sql:header>
    <sql:param>..</sql:param>
    <sql:param>..</sql:param>...n
    </sql:header>
    <sql:query>
    sql statement(s)
    </sql:query>
    <sql:xpath-query mapping-schema="SchemaFileName.xml">
    XPath query
    </sql:xpath-query>
    </ROOT>

    模板中的任何元素都是可选的。元素 <header>、<param>、<query>、<XPath-query> 和特性映射架构在 sql 命名空间中定义。因此,必须在命名空间中声明 xmlns:sql="urn:schemas-microsoft-com:xml-sql"。可对命名空间任意命名;sql 只是一个别名。

    <ROOT>

    指定此标记以提供所得到的 XML 文档的单个顶层元素(也称为根标记)。<ROOT> 标记可以是任何名称。

    <sql:header>

    此标记用于保存所有标题值。在目前的实施方案中,只能在此标记中指定 <sql:param> 元素。<sql:header> 用作包含标记,使您得以定义多个参数。所有的参数定义都在一个位置中,这使得处理参数定义更有效。

    <sql:param>

    该元素用于定义在模板内传递到查询的参数。每个 <param> 元素定义一个参数。可以在 <sql:header> 标记中定义多个 <param> 元素。

    <sql:query>

    该元素用于指定 SQL 查询。可以在模板中指定多个 <sql:query> 元素。

    <sql:xpath-query>

    该元素用于指定 XPath 查询。因为 XPath 查询是在带批注的 XML 数据简化 (XDR) 架构上执行,所以必须使用 mapping-schema 特性指定架构文件名。

    sql:xsl

    该特性用于指定将应用于所得到的 XML 文档的可扩展样式表语言 (XSL) 样式表。在指定映射架构文件时,可以指定相对或绝对路径。指定的相对路径是相对于与 template 类型的虚拟名称关联的目录。例如,如果与 template 类型的虚拟名称相关联的目录是 C:\Template,那么为 sql:xsl 指定的相对路径 Xyz/MyXSL.xml 将映射到 C:\Template\Xyz\MyXSL.xml。

    mapping-schema

    该特性用于标识带批注的 XDR 架构。仅当在模板中执行 XPath 查询时才指定该特性。XPath 查询在带批注的 XDR 架构上执行。在指定映射架构文件时,可以指定相对或绝对路径。指定的相对路径是相对于与 template 类型的虚拟名称关联的目录。例如,如果与 template 类型的虚拟名称关联的目录是 C:\Template,则相对路径(为 mapping-schema 指定的 schema/MSchema.xml)映射到 C:\Template\Schema\MSchema.xml。


    说明 每个 <sql:query> 或 <sql:XPath-query> 表示单独的事务。因此,如果在模板中有多个 <sql:query> 或 <sql:XPath-query> 标记,当一个标记失败时,其它标记将继续。

    如果设置了 contenttype,则 Sqlisapi.dll 将标题信息返回给浏览器。如果没有设置 contenttype,则 urlmon 使用模板文件中的第一个字符确定内容类型。如果模板中的第一个字符是 < 字符或 Unicode 字节顺序标志 (0xFFFE),则将 text/xml 作为内容类型返回给浏览器,且浏览器显示结果。否则,Sqlisapi.dll 不发送用以指导浏览器如何显示结果的内容类型标题信息;因此,在浏览器中将看不到结果。

    可以在 URL 模板中指定模板之前,必须使用用于 SQL Server 的 IIS 虚拟目录管理实用工具创建 template 类型的虚拟名称。有关更多信息,请参见使用用于 SQL Server 的 IIS 虚拟目录管理实用工具。

    存储模板
    模板存储在与 template 类型的虚拟名称关联的目录或它的一个子目录中:

    如果模板存储在与 template 类型的虚拟名称关联的目录中,则 URL 查询的形式如下:
    http://IISServer/nwind/TemplateVirtualName/TemplateFile.xml

    如果模板存储在与 template 类型 (xyz) 的虚拟名称关联的子目录中,则 URL 查询的形式如下:
    http://IISServer/nwind/TemplateVirtualName/xyz/TemplateFile.xml在模板中指定 XSL 样式表可以对查询结果应用可扩展样式表语言 (XSL) 样式表。当使用 HTTP 执行模板时,可以用下列方法指定 XSL 文件: 在模板中使用 sql:xsl 特性。使用 xsl 关键字作为 URL 的一部分,以指定将用于处理所得到的 XML 数据的 XSL 文件。 如果在模板中使用 sql:xsl 指定 XSL 文件并且在 URL 中使用关键字 xsl 指定 XSL 文件,则先对结果应用在模板中指定的 XSL 样式表,然后应用在 URL 中指定的 XSL 文件。示例在下列示例中,nwind 是使用用于 SQL Server 的 IIS 虚拟目录管理实用工具创建的虚拟目录,template 是创建虚拟目录时定义的 template 类型的虚拟名称(创建虚拟目录时可以为其指定任何虚拟名称)。有关更多信息,请参见使用用于 SQL Server 的 IIS 虚拟目录管理实用工具。A. 在模板中指定 sql:xsl 以处理结果在下例中,模板包含简单的 SELECT 语句。按照使用 sql:xsl 指定的 XSL 文件中的说明处理查询结果。<?xml version ='1.0' encoding='UTF-8'?>
    <root xmlns:sql='urn:schemas-microsoft-com:xml-sql'
    sql:xsl='MyXSL.xsl'>
    <sql:query>
    SELECT FirstName, LastName FROM Employees FOR XML AUTO
    </sql:query>
    </root>
    为举例说明,将模板 (TemplateWithXSL.xml) 存储在与 template 类型的虚拟名称 (template) 关联的目录中。XSL 文件 (MyXSL.xsl) 也存储在同一目录中。下面是 XSL 文件:<?xml version='1.0' encoding='UTF-8'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match = 'Employees'>
    <TR>
    <TD><xsl:value-of select = '@FirstName' /></TD>
    <TD><B><xsl:value-of select = '@LastName' /></B></TD>
    </TR>
    </xsl:template>
    <xsl:template match = '/'>
    <HTML>
    <HEAD>
    <STYLE>th { background-color: #CCCCCC }</STYLE>
    </HEAD>
    <BODY>
    <TABLE border='1' style='width:300;'>
    <TR><TH colspan='2'>Employees</TH></TR>
    <TR><TH >First name</TH><TH>Last name</TH></TR>
    <xsl:apply-templates select = 'root' />
    </TABLE>
    </BODY>
    </HTML>
    </xsl:template>
    </xsl:stylesheet>
    下面的 URL 执行模板:http://IISServer/nwind/template/TemplateWithXSL.xml?contenttype=text/html结果以两列表的格式(FirstName 和 LastName)显示。还可在 URL 中指定 XSL 文件,而不是在模板中(使用 sql:xsl)指定该文件。在这种情况下,XSL 文件必须存储在与虚拟根 (nwind) 或其子目录关联的目录中,此时必须在 URL 中指定相对路径。假设 XSL 文件存储在与 nwind 虚拟目录关联的目录中,则下面的 URL 执行模板:http://IISServer/nwind/template/templateFile.xml?xsl=MyXSL.xsl
    如果 XSL 文件存储在虚拟根目录的一个子目录 (x) 中,则下面的 URL 这样指定相对路径:http://IISServer/nwind/template/templateFile.xml?xsl=/x/MyXSL.xsl
    如果在模板中使用 sql:xsl 并且在 URL 中使用关键字 xsl 指定 XSL 文件,则在模板中指定的 XSL 样式表首先应用于结果,然后应用在 URL 中指定的 XSL 文件。

    示例 XPath 查询
    本示例 XPath 查询引用下面两个映射架构。映射架构是带批注的简化 XML-Data (XDR) 架构。有关映射架构的更多信息,请参见使用带批注的 XDR 架构创建 XML 视图。

    说明 在可以使用 URL 执行示例 XPath 查询前,必须创建虚拟根以访问 Northwind 数据库和 template 及 schema 类型的虚拟名称。有关创建示例 nwind 虚拟目录和虚拟名称的信息,请参见创建 nwind 虚拟目录。有关使用 HTTP 访问 Microsoft? SQL Server? 的更多信息,请参见使用 HTTP 访问 SQL Server。

    有两种方法可对带批注的 XDR 架构执行 XPath 查询:

    创建一个模板,在其中包含一个 XPath 查询。然后在 URL(例如 http://IISServer/VirtualRoot/TemplateVirtualName/TemplateFile.xml)中执行该模板。在该模板中,指定将对其执行 XPath 查询的映射架构。在这种情况下,必须将映射架构存储到与 template 类型的虚拟名称相关联的目录(或它的一个子目录,此时将某相对路径指定为模板内 mapping-schema 特性的值)下。

    可直接在 URL(例如 http://IISServer/VirtualRoot/SchemaVirtualName/SchemaFile.xml/XpathQuery)中指定 XPath 查询。在这种情况下,必须将架构文件存储到与 schema 类型的虚拟名称相关联的目录下。
    示例带批注的 XDR 架构
    在本节的所有示例中,为了说明,将在模板中指定 XPath 查询,并使用 HTTP 执行该模板。因此,必须使用此映射架构文件 (SampleSchema1.xml),它保存在与 template 类型虚拟名称相关联的目录下:

    <?xml version="1.0" ?>
    <Schema xmlns="urn:schemas-microsoft-com:xml-data"
    xmlns:dt="urn:schemas-microsoft-com:datatypes"
    xmlns:sql="urn:schemas-microsoft-com:xml-sql">

    <ElementType name="Customer" sql:relation="Customers">
    <AttributeType name="CustomerID" dt:type="id" />
    <AttributeType name="CompanyName" />
    <AttributeType name="ContactName" />
    <AttributeType name="City" />
    <AttributeType name="Fax" />
    <AttributeType name="Orders" dt:type="idrefs" sql:id-prefix="Ord-" />

    <attribute type="CustomerID" />
    <attribute type="CompanyName" />
    <attribute type="ContactName" />
    <attribute type="City" />
    <attribute type="Fax" />
    <attribute type="Orders" sql:relation="Orders" sql:field="OrderID">
    <sql:relationship
    key-relation="Customers"
    key="CustomerID"
    foreign-relation="Orders"
    foreign-key="CustomerID" />
    </attribute>

    <element type="Order">
    <sql:relationship
    key-relation="Customers"
    key="CustomerID"
    foreign-relation="Orders"
    foreign-key="CustomerID" />
    </element>
    </ElementType>

    <ElementType name="Order" sql:relation="Orders">
    <AttributeType name="OrderID" dt:type="id" sql:id-prefix="Ord-" />
    <AttributeType name="EmployeeID" />
    <AttributeType name="OrderDate" />
    <AttributeType name="RequiredDate" />
    <AttributeType name="ShippedDate" />

    <attribute type="OrderID" />
    <attribute type="EmployeeID" />
    <attribute type="OrderDate" />
    <attribute type="RequiredDate" />
    <attribute type="ShippedDate" />

    <element type="OrderDetail">
    <sql:relationship
    key-relation="Orders"
    key="OrderID"
    foreign-relation="[Order Details]"
    foreign-key="OrderID" />
    </element>
    </ElementType>

    <ElementType name="OrderDetail" sql:relation="[Order Details]"
    sql:key-fields="OrderID ProductID">
    <AttributeType name="ProductID" dt:type="idref"
    sql:id-prefix="Prod-" />
    <AttributeType name="UnitPrice"/>
    <AttributeType name="Quantity" />

    <attribute type="ProductID" />
    <attribute type="UnitPrice" sql:field="UnitPrice" />
    <attribute type="Quantity" />

    <element type="Discount" sql:field="Discount"/>
    </ElementType>

    <ElementType name="Discount" dt:type="string"
    sql:relation="[Order Details]"/>

    <ElementType name="Employee" sql:relation="Employees">
    <AttributeType name="EmployeeID" />
    <AttributeType name="LastName" />
    <AttributeType name="FirstName" />
    <AttributeType name="Title" />

    <attribute type="EmployeeID" />
    <attribute type="LastName" />
    <attribute type="FirstName" />
    <attribute type="Title" />
    </ElementType>
    </Schema>

    说明

    按查询所执行的 XPath 操作类型将示例查询分组。

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.