在 XDR 架构(XSD 架构)中为属性指定默认值

重要说明重要提示

本主题是针对早期应用程序提供的参考。以后不会就该功能继续进行开发。请避免在新的开发工作中使用此功能。请改用带批注的 XSD 架构创建 XML 视图。有关详细信息,请参阅带批注的 XSD 架构简介 (SQLXML 4.0)。可以将现有带批注的 XDR 架构转换为 XSD 架构。有关详细信息,请参阅将带批注的 XDR 架构转换为等效的 XSD 架构 (SQLXML 4.0)

在数据库中,可为列分配默认值。类似地,在 XDR 架构中,可以为属性设置默认值(但不能在 XDR 架构中为元素分配默认值)。XDR 架构允许对 <AttributeType> 指定 default 属性。

如果与某一属性关联的列值为 NULL,则不会针对该元素的实例返回该属性。但是,如果对 <AttributeType> 指定了 default 属性,则返回该属性,并指定默认值。

例如,将数据库中的数据提取到 XML 文档时,如果缺少其中一个属性值,则使用该属性在 XDR 架构中的默认值。

注意注意

默认值可能不会显示在返回的文档中,如果属性不存在,验证分析器则使用该默认值。

注意注意

如果使用的分析器能够识别架构,则使用默认值。也就是说,对于 MSXML 分析器,必须确保将 resolveExternals 标志设置为 TRUE(默认值),然后,该分析器将提取架构。分析后,各实例将具有指定了默认值的属性,而不管该属性是否包含在 XML 文档中。默认值由 DOM 提供。

示例

若要创建使用以下示例的工作示例,必须满足一些要求。有关详细信息,请参阅运行 SQLXML 示例的要求

A. 在 XDR 架构中为属性指定默认值

在本示例中,为 Title 属性指定的默认值为“XYZ”。当检索联系人记录时,将为没有职务的联系人分配默认值。

<?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="Person.Contact" >
    <AttributeType name="CID" />
    <AttributeType name="FirstName" />
    <AttributeType name="LastName" />
    <AttributeType name="Title" default="XYZ"/>

    <attribute type="CID" sql:field="ContactID" />
    <attribute type="FirstName" />
    <attribute type="LastName" />
    <attribute type="Title"  />
</ElementType>
</Schema>

针对该架构测试示例 XPath 查询

  1. 复制上面的架构代码,并将它粘贴到文本文件中。将文件另存为 DefaultValueXdr.xml。

  2. 复制以下模板,并将它粘贴到文本文件中。在保存 DefaultValueXdr.xml 的相同目录中将该文件另存为 DefaultValueXdrT.xml。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="DefaultValueXdr.xml">
        /Person.Contact[@CID &gt; 1000 and @CID &lt; 1006]
      </sql:xpath-query>
    </ROOT>
    

    为映射架构 (DefaultValueXdr.xml) 指定的目录路径是相对于模板保存目录的相对路径。也可以指定绝对路径,例如:

    mapping-schema="C:\MyDir\DefaultValueXdr.xml"
    
  3. 创建并使用 SQLXML 4.0 测试脚本 (Sqlxml4test.vbs) 执行该模板。

    有关详细信息,请参阅使用 ADO 执行 SQLXML 4.0 查询

下面是结果集:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Person.Contact CID="1001" FirstName="Terri" LastName="Duffy" /> 
  <Person.Contact CID="1002" FirstName="Roberto" LastName="Tamburello" /> 
  <Person.Contact CID="1003" FirstName="Michael" LastName="Sullivan" /> 
  <Person.Contact CID="1004" FirstName="Sharon" LastName="Salavaria" /> 
  <Person.Contact CID="1005" FirstName="Gail" LastName="Erickson" Title="Ms." /> 
</ROOT>