⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 +

📁 介绍了数据库方面的基础知识
💻
字号:
作者:xmllover
email: sqllover@163.net
日期:2001-7-16 15:41:06
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这些技术,我会在以后的文章中进一步进行讨论,请大家等待。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -