分享
 
 
 

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

王朝mssql·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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这些技术,我会在以后的文章中进一步进行讨论,请大家等待。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有