XSD 元素和属性到表和列的默认映射 (SQLXML 4.0)
默认情况下,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 查询
复制上面的架构代码,并将它粘贴到文本文件中。将文件另存为 MySchema.xml。
复制以下模板,并将它粘贴到文本文件中。在您保存 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"
创建并使用 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 查询
复制上面的架构代码,并将它粘贴到文本文件中。将文件另存为 MySchemaElements.xml。
创建以下模板 (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"
创建并使用 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>
在 SQL Server 2005 中已引入了 xml 数据类型。
针对该架构测试示例 XPath 查询
复制上面的架构代码,并将它粘贴到文本文件中。将文件另存为 MySchemaXmlAnyElements.xml。
创建以下模板 (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"
创建并使用 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>