分享
 
 
 

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

王朝mssql·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

小气的神

2002-5-25

Article Type: Overview

难度等级:5/9

版本:4.16

产生映射文件

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

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

(XML View Mapper 界面)

之后我花了几个小时,翻起dotNET中有关XML的API手册,开始跌跌撞撞的写一个根据数据库自动产生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 schemas:VS.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 2000和SQLXML的特性,而后我们来看一些另外的功能――如何使用程序的方式来利用SQLXML的功能。这也是我们要讲的下一个特性了。

特别说明:

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

如果有问题或建议,请发电子邮件给new2001@msn.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有