默认情况下,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 查询
复制上面的架构代码,并将它粘贴到文本文件中。 将文件另存为 MySchema.xml。
复制以下模板,并将它粘贴到文本文件中。 将文件另存为 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"创建并使用 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> 元素将映射到使用数据类型的列,该列 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 查询
复制上面的架构代码,并将它粘贴到文本文件中。 将文件另存为 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>
另请参阅
带批注的架构安全注意事项(SQLXML 4.0)
XML 数据 (SQL Server)
SQLXML 4.0 中的 xml 数据类型支持