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

适用于:SQL Server Azure SQL 数据库

默认情况下,XSD 带批注的架构中复杂类型的元素映射到指定数据库中具有相同名称的表(视图),而简单类型的元素或属性映射到表中具有相同名称的列。

示例

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

A. 指定默认映射

在本示例中,不在 XSD 架构中指定任何批注。 <Person.Contact> 元素的类型很复杂,因此,默认情况下,映射到 AdventureWorks 数据库中的 Person.Contact 表。 Person.Contact 元素的所有属性(ContactID、FirstName、LastName) <都是简单类型,默认情况下映射到 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:complexType>  
  </xsd:element>  
</xsd:schema>  
针对架构测试示例 XPath 查询
  1. 复制上面的架构代码,并将它粘贴到文本文件中。 将文件另存为 MySchema.xml。

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="MySchema.xml">  
            /Person.Contact  
        </sql:xpath-query>  
    </ROOT>  
    

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

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

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

下面是部分结果集:

<?xml version="1.0" encoding="UTF-8" ?>  
<ROOT>  
  <Person.Contact ContactID="1" FirstName="Gustavo" LastName="Achong"/>  
  <Person.Contact ContactID="2" FirstName="Catherine" LastName="Abel"/>  
   ...  
</ROOT>  

B. 将 XML 元素映射到数据库列

在本示例中,由于不使用批注,因此还会发生默认映射。 <Person.Contact> 元素的类型很复杂,映射到数据库中同名的表。 元素 FirstName 和 <LastName>> 和 EmployeeID 属性是简单类型,因此,映射到具有相同名称的列。< 本示例与前一示例的唯一差别在于本示例使用元素来映射 FirstName 和 LastName 字段。

<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:sequence>  
        <xsd:element name="FirstName" type="xsd:string" />   
        <xsd:element name="LastName" type="xsd:string" />   
      </xsd:sequence>  
      <xsd:attribute name="ContactID" type="xsd:integer" />   
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
针对架构测试示例 XPath 查询
  1. 复制上面的架构代码,并将它粘贴到文本文件中。 将文件另存为 MySchemaElements.xml。

  2. 创建以下模板 (MySchemaElementsT.xml) 并将其保存到上一步中使用的相同目录中。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="MySchemaElements.xml">  
            /Person.Contact  
        </sql:xpath-query>  
    </ROOT>  
    

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

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

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

下面是部分结果集:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact ContactID="1">  
    <FirstName>Gustavo</FirstName>  
    <LastName>Achong</LastName>  
  </Person.Contact>  
   ...  
</ROOT>  

°C 将 XML 元素映射到 XML 数据类型列

在本示例中,由于不使用批注,因此还会发生默认映射。 <Production.ProductModel> 元素的类型复杂,映射到数据库中同名的表。 ProductModelID 属性的类型简单,因此映射到具有相同名称的列。 本示例和前面的示例的唯一区别是<,Instructions> 元素使用 xsd:anyType 类型映射到使用 xml 数据类型的列。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="Production.ProductModel">  
    <xsd:complexType>  
      <xsd:sequence>  
        <xsd:element name="Instructions" type="xsd:anyType" />   
      </xsd:sequence>  
      <xsd:attribute name="ProductModelID" type="xsd:integer" />   
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

XML 数据类型是在 SQL Server 2005(9.x)中引入的。

针对架构测试示例 XPath 查询
  1. 复制上面的架构代码,并将它粘贴到文本文件中。 将文件另存为 MySchemaXmlAnyElements.xml。

  2. 创建以下模板 (MySchemaXmlAnyElementsT.xml) 并将其保存到上一步中使用的相同目录中。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="MySchemaXmlAnyElements.xml">  
            /Production.ProductModel[@ProductModelID=7]  
        </sql:xpath-query>  
    </ROOT>  
    

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

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

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

下面是部分结果集:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Production.ProductModel ProductModelID="7">  
    <Instructions>  
      <root xmlns="http:  
//schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstru  
ctions">  
...  
      </root>  
    <Instructions>  
  </Production.ProductModel>  
</ROOT>  

另请参阅

带批注的架构的安全注意事项 (SQLXML 4.0)
XML 数据 (SQL Server)
SQLXML 4.0 中的 xml 数据类型支持