使用 sql:mapped 从 XML 文档中排除架构元素

适用于:SQL Server Azure SQL 数据库

由于是默认映射,XSD 架构中的每个元素和属性都映射到数据库表/视图和列。 如果要在 XSD 架构中创建一个元素,该元素不映射到任何数据库表(视图)或列,并且该元素未显示在 XML 中,则可以指定 sql:mapped 批注。

如果架构无法修改,或者架构用于验证来自其他源的 XML,但包含数据库中未存储的数据,则 sql:mapped 批注尤其有用。 sql:mapped 批注不同于 sql:is-constant,即未映射的元素和属性不会显示在 XML 文档中。

sql:mapped 批注采用布尔值(0 = false,1 = true)。 可接受的值为 0、1、true 和 false。

示例

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

A. 指定 sql:mapped 批注

假定您有来自其他源的 XSD 架构。 此 XSD 架构由具有 ContactID、FirstName、LastNameHomeAddress 属性的 Person.Contact> 元素组成<。

将此 XSD 架构映射到 AdventureWorks 数据库中的 Person.Contact 表时,sql:mapped 是在 HomeAddress 属性上指定的,因为 Employees 表不存储雇员的主地址。 因此,在针对映射架构指定 XPath 查询时,此属性不会映射到数据库,并且不会在生成的 XML 文档中返回此属性。

为架构的其余部分进行默认映射。 <Person.Contact 元素映射到 Person.Contact> 表,所有属性映射到 Person.Contact 表中具有相同名称的列。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="Person.Contact">  
    <xsd:complexType>  
      <xsd:attribute name="ContactID"   type="xsd:string"/>  
      <xsd:attribute name="FirstName"    type="xsd:string" />  
      <xsd:attribute name="LastName"     type="xsd:string" />  
      <xsd:attribute name="HomeAddress" type="xsd:string"   
                     sql:mapped="false" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
针对架构测试示例 XPath 查询
  1. 复制上面的架构代码,并将它粘贴到文本文件中。 将文件另存为 sql-mapped.xml。

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="sql-mapped.xml">  
            /Person.Contact[@ContactID < 10]  
        </sql:xpath-query>  
    </ROOT>  
    

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

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

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

这是结果集:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact ContactID="1" FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact ContactID="2" FirstName="Catherine" LastName="Abel" />   
  <Person.Contact ContactID="3" FirstName="Kim" LastName="Abercrombie" />   
  <Person.Contact ContactID="4" FirstName="Humberto" LastName="Acevedo" />   
  <Person.Contact ContactID="5" FirstName="Pilar" LastName="Ackerman" />   
  <Person.Contact ContactID="6" FirstName="Frances" LastName="Adams" />   
  <Person.Contact ContactID="7" FirstName="Margaret" LastName="Smith" />   
  <Person.Contact ContactID="8" FirstName="Carla" LastName="Adams" />   
  <Person.Contact ContactID="9" FirstName="Jay" LastName="Adams" />   
</ROOT>  

请注意,ContactID、FirstName 和 LastName 存在,但 HomeAddress 不是因为为 sql:mapped 属性指定的映射架构为 0

另请参阅

XSD 元素和属性到表和列的默认映射 (SQLXML 4.0)