将SQLXML 3.0用起来( Web Services, XML Views, Managed Classes ) [3]

类别:.NET开发 点击:0 评论:0 推荐:

SQLXML 3.0用起来( Web Services, XML Views, Managed Classes )  


小气的神

2002-5-25

 

Article Type: Overview 

难度等级:5/9       

版本:4.16

 

 

产生映射文件

如何创建一个映射文件呢?首先它是一个XML文件,过去Microsoft推荐使用XDRXML-Data Reduced)来定义,英文的全称是“Creating XML Views by Using Annotated XDR Schemas”,Annotated我不知如何翻译它更形象。SQLXML 3.0之后Microsoft开始支持使用更加规范的Annotated XSD Schemas来完成过去XDR的定义功能,并且提供一个工具Cvtschema.exe(安装路径的Bin目录下)来完成将原来XDR定义的文件转换成XSD格式的。但问题是我们还是需要产生一个XSDXDR的文件。

       即使在过去使用XDR,产生一个映射文件仍然是一件比较枯燥的事情,手工产生一个基本的Schema文件似乎是必须的,但对于一个从未使用过XDRXSD的人来说是痛苦的,这就像你要给一个XML文件产生一个XSLT文件一样,无论你多么希望有一个工具能根据XML自动产生一个,但事实上我们发现手工的方式远比工具更有成效。我在不了解这个道理之前,把希望聚集在Microsoft提供的SQL Server XML View Mapper这个工具上,最失望是它在自动化之前,仍然要求我提供一个XDR文档(我开始明白Mapper的意义,因为它只对映射自动,Schema文件还是要你自己产生)。即使它能够自动化一部分功能(为你自动加上sqlrelationXML模板元素),很快我还是放弃使用它,因为它的新版本可能会更好,会支持XSD Schema,而不是向现在这样只支持XDR Schema。必须承认当你从事稍微大一点的应用,比如十几张表,二十几个映射文件时,每次从头定义开始定义几乎类似的Schema板文件就变得痛苦和冗长起来。

 

(XML View Mapper 界面)

 

       之后我花了几个小时,翻起dotNET中有关XMLAPI手册,开始跌跌撞撞的写一个根据数据库自动产生Schema文件的工具,它基本是默认映射也就是说几乎不需要再加Annotate,真正应用中你可能仍然需要根据具体的情况加入一些其它的Annotate。我希望它能根据数据库中的Table,自动产生Schema文件,这样我只要Copy它到IIS的模板目录中就可以着手下一步的编码和存取XML数据部分(当然我们会看到,也就是第四个特点中要讲的)。事实上最后它的功能非常强大,我不断地加入参数的处理,使得它能产生更多的相关文件。

这个小工具WriteXSD.exe(暂且允许我这么称呼它吧),能够从一个数据库的表中产生和预览我们需要的Schema

 

 

然后我们运行下面的命令:

WriteXSD /c:Attribute /t:xsd /o:EmplyeesA.xml /m:EmplyeesO.xml Employees

 

 

如果成功我们将获得两个文件EmplyeesA.xml EmplyeesO.xml 一个是Schema文件,另外一个是模板-映射文件,然后我们将它们Copy到我们先前设置的目录,一个是\Schemas 一个是\Templeas 之后我们执行下面的命令:http://localhost/Northwind/Templates/EmplyeesO.xml

我们会看到下面的结果,基本上它是按我们生成的EmplyeesA.XML产生的,当然还是有些小小的问题比如Photo这个字段,它应当是图片类型,而在EmplyeesA.xml 只是简单的 type=”’xs:string”(这个版本里任何字段我都转换成string类型haha) 可以清晰的看到这个字段这样显示出来:

FRwvAAIAAAANAA4AFAAhAP////9CaXRtYXAgSW1hZ2UAUGFpbnQuUGljdHVyZQABBQAAAgAAAAcAAABQQnJ1c2gAAAA…... 对于这个显示我很抱歉:) ,下一个版本也许应该加上数据库字段类型和XSD数据类型的转换。

 

 

当然在某个不久之后,我发现也有其他的方法产生Annotated schemasVS.NET的方法,新建一个XML Schema,然后在VS中拖拽你需要的Table到设计视图上比如下面这样

 

 

切换到XML视图中我们看到是大致下面的代码,然后手工删除掉黑色斜体带下划线的部分。

<?xml version="1.0" encoding="utf-8" ?>

<xs:schema id="Employyes" targetNamespace="http://tempuri.org/Employyes.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/Employyes.xsd" xmlns:mstns="http://tempuri.org/Employyes.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

     <xs:element name="Document">

         <xs:complexType>

              <xs:choice maxOccurs="unbounded">

                   <xs:element name="Employees">

                       <xs:complexType>

                            <xs:sequence>

<xs:element name="EmployeeID" msdata:ReadOnly="true" msdata:AutoIncrement="true" type="xs:int" />

     <xs:element name="LastName" type="xs:string" />

     <xs:element name="FirstName" type="xs:string" />

     <xs:element name="Title" type="xs:string" minOccurs="0" />

     <xs:element name="TitleOfCourtesy" type="xs:string" minOccurs="0" />

     <xs:element name="BirthDate" type="xs:dateTime" minOccurs="0" />

     <xs:element name="HireDate" type="xs:dateTime" minOccurs="0" />

     <xs:element name="Address" type="xs:string" minOccurs="0" />

     <xs:element name="City" type="xs:string" minOccurs="0" />

     <xs:element name="Region" type="xs:string" minOccurs="0" />

     <xs:element name="PostalCode" type="xs:string" minOccurs="0" />

     <xs:element name="Country" type="xs:string" minOccurs="0" />

     <xs:element name="HomePhone" type="xs:string" minOccurs="0" />

     <xs:element name="Extension" type="xs:string" minOccurs="0" />

     <xs:element name="Photo" type="xs:base64Binary" minOccurs="0" />

     <xs:element name="Notes" type="xs:string" minOccurs="0" />

     <xs:element name="ReportsTo" type="xs:int" minOccurs="0" />

     <xs:element name="PhotoPath" type="xs:string" minOccurs="0" />

                            </xs:sequence>

                       </xs:complexType>

                   </xs:element>

              </xs:choice>

         </xs:complexType>

         <xs:unique name="DocumentKey1" msdata:PrimaryKey="true">

              <xs:selector xpath=".//mstns:Employees" />

              <xs:field xpath="mstns:EmployeeID" />

         </xs:unique>

     </xs:element>

</xs:schema>

保存这个文件,然后将它Copy到我们设定的/Schemas目录中。

 

 

无论如何手工的方式永远都存在,只是说我们可以选择一种相对适合我们自己的方式来解决枯燥的操作。最后我不知道自己会喜欢哪种方式,不过从这之后有关于产生Annotated schemas对我来说变成一件有趣而不是很痛苦的事情了(haha)

       这之前我们讲述和看到的都是用手动或是直接的方式展现一些SQL 2000SQLXML的特性,而后我们来看一些另外的功能――如何使用程序的方式来利用SQLXML的功能。这也是我们要讲的下一个特性了。

 


特别说明:

本文原创,CSDN署名首发,所有文字和图片版权所有。未经授权请勿传播、转载或改编。

如果有问题或建议,请发电子邮件给[email protected]

本文地址:http://com.8s8s.com/it/it45984.htm