使用 sql:field(XDR 架构)
重要提示 |
---|
本主题是针对早期应用程序提供的参考,以后不会就该功能继续进行开发。请避免在新的开发工作中使用此功能,而应使用带批注的 XSD 架构来创建 XML 视图。有关详细信息,请参阅带批注的 XSD 架构简介 (SQLXML 4.0)。可以将现有带批注的 XDR 架构转换为 XSD 架构。有关详细信息,请参阅将带批注的 XDR 架构转换为等效的 XSD 架构 (SQLXML 4.0)。 |
sql:field 批注指定带批注的架构中的元素或属性与数据库中的列之间的映射,并且可以添加到元素或属性中。在带批注的架构的 <AttributeType> 元素上忽略 sql:field 批注。sql:field 属性指定表或视图中的映射列的名称。
例如,在列名与用 XDR 指定的架构中的字段不匹配时,可以使用 sql:field 指定该列名。sql:field 的值必须是列名。不允许使用由四个部分组成的列名,如 database.owner.table.columnname。这适用于将列名作为值的所有批注。
示例
若要创建使用以下示例的工作示例,必须满足某些要求。有关详细信息,请参阅运行 SQLXML 示例的要求。
A. 为 XDR 架构的某个 <attribute> 指定 sql:field
在这个带批注的架构中,对架构的 <attribute> 元素指定 sql:field 批注。sql:field 属性将架构中的 Email 属性映射到 Person.Contact 表中的 EmailAddress 列。
由于 XDR 架构中的属性名称 ContactID 与 Person.Contact 表中的 ContactID 列同名,所以未指定 sql:field。默认情况下执行映射。
<?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="Contacts" sql:relation="Person.Contact" >
<AttributeType name="ContactID" />
<AttributeType name="Email" />
<attribute type="ContactID" />
<attribute type="Email" sql:field="EmailAddress" />
</ElementType>
</Schema>
针对该架构测试示例 XPath 查询
复制上面的架构代码,并将它粘贴到文本文件中。将文件另存为 sqlFieldXdr.xml。
复制以下模板,并将它粘贴到文本文件中。在保存 sqlFieldXdr.xml 的目录中将该文件另存为 sqlFieldXdrT.xml。模板中的查询选择 ContactID 为 1 的客户。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sqlFieldXdr.xml"> /Contacts[@ContactID="1"] </sql:xpath-query> </ROOT>
为映射架构 (sqlFieldXdr.xml) 指定的目录路径是相对于模板保存目录的相对路径。也可以指定绝对路径,例如:
mapping-schema="C:\SqlXmlTest\sqlFieldXdr.xml"
创建并使用 SQLXML 4.0 测试脚本 (Sqlxml4test.vbs) 执行该模板。
有关详细信息,请参阅使用 ADO 执行 SQLXML 4.0 查询。
下面是部分结果集:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Contacts ContactID="1" Email="gustavo0@adventure-works.com" />
</ROOT>
在映射架构中,可以全局声明属性(例如 <AttributeType...>,在 <ElementType> 的范围之外声明),然后在 <attribute type=...> 中引用这些属性,如此架构所示。
在此架构中,对 LastName 属性进行了全局声明,然后在客户 <ElementType> 的范围内引用该属性。
<?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">
<AttributeType name="LastName" />
<ElementType name="Contacts" sql:relation="Person.Contact" >
<AttributeType name="ContactID" />
<AttributeType name="FName" />
<AttributeType name="LName" />
<attribute type="CustomerID" />
<attribute type="FName" sql:field="FirstName" />
<attribute type="LName" sql:field="LastName" />
</ElementType>
</Schema>
B. 为 XDR 架构中的 <element> 指定 sql:field
在这个带批注的架构中,针对架构的 <element> 元素指定 sql:field 批注。sql:field 批注将架构中的 <Email> 子元素映射到 Person.Contact 表中的 EmailAddress 列。
若无显式批注,架构中的 <Contacts> 元素的 <Email> 子元素不会映射到 Person.Contact 表的 EmailAddress 列,因为默认的元素映射指向关系而不是字段(当 <ElementType> 包含 textOnly 属性时例外)。
<?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="Email" />
<ElementType name="Contacts" sql:relation="Person.Contact" >
<AttributeType name="ContactID" />
<attribute type="ContactID" />
<element type="Email" sql:field="EmailAddress" />
</ElementType>
</Schema>
针对该架构测试示例 XPath 查询
复制上面的架构代码,并将它粘贴到文本文件中。将文件另存为 sqlFieldElementXdr.xml。
复制以下模板,并将它粘贴到文本文件中。在保存 sqlFieldElementXdr.xml 的目录中将该文件另存为 sqlFieldElementXdrT.xml。模板中的查询选择 ContactID 为 1 的客户。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sqlFieldElementXdr.xml"> /Contacts[@ContactID="1"] </sql:xpath-query> </ROOT>
为映射架构 (sqlFieldElementXdr.xml) 指定的目录路径是相对于模板保存目录的相对路径。也可以指定绝对路径,例如:
mapping-schema="C:\SqlXmlTest\sqlFieldElementXdr.xml"
创建并使用 SQLXML 4.0 测试脚本 (Sqlxml4test.vbs) 执行该模板。
有关详细信息,请参阅使用 ADO 执行 SQLXML 4.0 查询。
下面是部分结果集:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Contacts ContactID="1">
<Email>gustavo0@adventure-works.com</Email>
</Contacts>
</ROOT>
如果对电子邮件地址 <ElementType> 指定了 content="textOnly",且使用 SQL 列的默认名称 ("EmailAddress"),则子元素无需 sql:field 批注。在此情况下,<EmailAddress> 子元素将映射到 Person.Contact 表中的 EmailAddress 列。
<?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="EmailAddress" content="textOnly" />
<ElementType name="Contacts" sql:relation="Person.Contact" >
<AttributeType name="ContactID" />
<attribute type="ContactID" />
<element type="EmailAddress" />
</ElementType>
</Schema>