使用 sql:target-namespace 指定目标命名空间(XDR 架构)
重要提示 |
---|
本主题是针对早期应用程序提供的参考,以后不会就该功能继续进行开发。请避免在新的开发工作中使用此功能,而应使用带批注的 XSD 架构来创建 XML 视图。有关详细信息,请参阅带批注的 XSD 架构简介 (SQLXML 4.0)。可以将现有带批注的 XDR 架构转换为 XSD 架构。有关详细信息,请参阅将带批注的 XDR 架构转换为等效的 XSD 架构 (SQLXML 4.0)。 |
可以使用 sql:target-namespace 批注将默认命名空间中的元素和属性放入其他命名空间。只能将 sql:target-namespace 属性添加到 XDR 架构中的 <Schema> 标记。
sql:target-namespace 的值是将用于生成映射架构中指定的元素和属性的命名空间 URI(统一资源标识符)。此 URI 适用于默认命名空间中的所有元素和属性。从针对此架构的查询返回的 XML 文档包含 xmlns:prefix="uri" 声明并相应为元素和属性名称加上前缀。使用的 URI 来自 sql:target-namespace 批注的值。不过,该前缀是随意生成的,不对应于架构中的任何值(即使在架构中使用了这些前缀)。
示例
若要创建使用以下示例的工作示例,必须满足某些要求。有关详细信息,请参阅运行 SQLXML 示例的要求。
A. 指定目标命名空间
在此示例中,使用 sql:target-namespace 批注指定目标命名空间。这样,会将定向到默认命名空间的所有元素和属性重定向到该目标命名空间 (MyNamespace)。
<?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"
sql:target-namespace="urn:MyNamespace">
<ElementType name="Sales.SalesOrderHeader" >
<AttributeType name="SalesOrderID" />
<attribute type="SalesOrderID"/>
</ElementType>
<ElementType name="Sales.Customer" >
<AttributeType name="CustomerID" />
<attribute type="CustomerID" />
<element type="Sales.SalesOrderHeader" >
<sql:relationship
key="CustomerID"
foreign-key="CustomerID"
key-relation="Sales.Customer"
foreign-relation="Sales.SalesOrderHeader" />
</element>
</ElementType>
</Schema>
针对该架构测试示例 XPath 查询
复制上面的架构代码,并将它粘贴到文本文件中。将该文件另存为 TargetNS-Xdr.xml。
复制以下模板,并将它粘贴到文本文件中。在保存 TargetNS-Xdr.xml 的相同目录中将文件另存为 TargetNS-XdrT.xml。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="TargetNS-Xdr.xml" xmlns:x="urn:MyNamespace" > x:Sales.Customer[@CustomerID=1] </sql:xpath-query> </ROOT>
模板中的 XPath 查询将请求在命名空间“MyNamespace”中定义的所有 <Customer> 元素。在模板中将前缀 x 绑定到该命名空间。
为映射架构 (TargetNS-Xdr.xml) 指定的目录路径是相对于模板保存目录的相对路径。也可以指定绝对路径,例如:
mapping-schema="C:\MyDir\TargetNS-Xdr.xml"
创建并使用 SQLXML 4.0 测试脚本 (Sqlxml4test.vbs) 执行该模板。
有关详细信息,请参阅使用 ADO 执行 SQLXML 4.0 查询。
下面是结果集:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<y0:Sales.Customer xmlns:y0="urn:MyNamespace" CustomerID="1">
<y0:Sales.SalesOrderHeader SalesOrderID="43860" />
<y0:Sales.SalesOrderHeader SalesOrderID="44501" />
<y0:Sales.SalesOrderHeader SalesOrderID="45283" />
<y0:Sales.SalesOrderHeader SalesOrderID="46042" />
</y0:Sales.Customer>
</ROOT>
请注意生成的前缀是任意的,但都映射到同一个命名空间。