深入探讨SQL Server 2000对XML的支持(四)

<script type="text/javascript"> google_ad_client = "pub-8800625213955058"; /* 336x280, 创建于 07-11-21 */ google_ad_slot = "0989131976"; google_ad_width = 336; google_ad_height = 280; // </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> XPath查询 架构和模板   XPath查询也可以被内嵌进一个XML模板文件中,下面的代码是一个包含XPath查询的简单的XML模板文件。 <Northwind xmlns:sql= "urn:schemas-microsoft-com: xml-sql"> <sql:xpath-query mapping-schema= "file4.xdr"> /Customer[@CustomerID= 'ALFKI']/Order </sql:xpath-query> </Northwind>   这个查询使用了一个架构(schema)返回CustomerID号为ALFKI的用户的所有的订单,如果想要使XPath语句运行,必须使用一个XDR架构文件映射不同的XML元素和属性到相应的数据库表和字段名。下面给出了这个架构文件。 <?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> <element type="Employee"> <sql:relationship key-relation="Orders" key="EmployeeID" foreign-relation="Employees" foreign-key="EmployeeID" /> </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"/> <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" dt:type="idref" sql:id-prefix="Emp-" /> <AttributeType name="LastName" /> <AttributeType name="FirstName" /> <AttributeType name="Title" /> <attribute type="EmployeeID"/> <attribute type="LastName" /> <attribute type="FirstName" /> <attribute type="Title" /> </ElementType> </Schema>   如果您想深入了解架构文件的话,请参看SQL Server 2000的用户文档或等待我的以后的文章。   和内嵌在XML模板文件中的SQL查询语句一样,XPath查询语句使用urn:schemas-microsoft-com:xml-sql和sql作为前缀,共同标示用在模板中的自定义元素和属性,对于XPath查询而言,我们使用一个名为xpath-query的元素来标识查询语法,这个元素也有一个名为mapping-schema的属性,用来标示相应用以映射表和字段到特定的XML项目的架构文件所在的路径。   下面的代码给出了另一个使用更复杂XPath查询的模板文件。 <Northwind xmlns:sql= "urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema= "listing4.xdr"> /Customer[@CustomerID= 'ALFKI']/Order/ Employee[@LastName='Suyama'] </sql:xpath-query> </Northwind>   当执行这个模板文件时,XPath查询返回与某个客户签下订单的雇员(employee)的姓名,结果如下: <Northwind xmlns:sql= "urn:schemas-microsoft-com:xml-sql"> <Employee EmployeeID="Emp-6" LastName="Suyama" FirstName="Michael" Title="Sales Representative"/> </Northwind>   模板文件中使用的XPath查询也可以使用参数,处理过程很象在XSL样式表中使用参数一样。象XSL一样,使用$指定一个变量。下面的代码说明了如何在一个包含XPath查询的模板文件中整合变量。 <Northwind xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:header> <sql:param name="ID"/> </sql:header> <sql:xpath-query mapping-schema="listing4.xdr"> {{should this be "listing6.xdr"?}} /Customer/Order[@OrderID=$ID] </sql:xpath-query> </Northwind>   通过在URL中传递参数名和相应的参数值,我们就可以完成把参数传递到模板中的操作。结果如下: <Northwind xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <Order OrderID="Ord-10643" EmployeeID= "6" OrderDate="1997-08-25T00:00:00" RequiredDate= "1997-09-22T00:00:00" ShippedDate= "1997-09-02T00:00:00"> <Employee EmployeeID="Emp-6" LastName= "Suyama" FirstName="Michael" Title= "Sales Representative" /> <OrderDetail ProductID="Prod-28" UnitPrice= "45.6" Quantity="15"> <Discount>0.25</Discount> </OrderDetail> <OrderDetail ProductID="Prod-39" UnitPrice= "18" Quantity="21"> <Discount>0.25</Discount> </OrderDetail> <OrderDetail ProductID="Prod-46" UnitPrice= "12" Quantity="2"> <Discount>0.25</Discount> </OrderDetail> </Order> </Northwind>   小结   通过使用上面我介绍的几种技术,我们可以直接从SQL Server 2000数据库中直接取得XML数据。如我所介绍,URL查询、XML模板文件、XDR架构和XPath查询提供了强大的功能,从SQL Server 2000中直接获得XML数据。除此之外,还有很多重要的概念,由于篇幅有限在本文中不可能详述,如FOR XML EXPLICIT查询和OPENXML这些技术,我会在以后的文章中进一步进行讨论,请大家等待。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值