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

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

例子

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

答: 指定默认映射

在此示例中,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. 复制以下模板,并将它粘贴到文本文件中。 将文件另存为 MySchemaT.xml 保存在保存 MySchema.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> 元素将映射到使用数据类型的列,该列 xml 使用该 xsd:anyType 类型。

<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 中引入的。

针对架构测试示例 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 数据类型支持