分享
 
 
 

使用 XML 模板

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

使用 XML 模板

下面是模板的一般形式,显示了指定 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 操作类型将示例查询分组。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有