新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 关于 XML 的一般性技术讨论,提供 XML入门资料 和 XML教程
    [返回] 计算机科学论坛XML.ORG.CN讨论区 - XML技术『 XML基础 』 → 微软对xml的支持 ----------- Yukon 中的XML[转帖][灌水] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 1565 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 微软对xml的支持 ----------- Yukon 中的XML[转帖][灌水] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     diegor 帅哥哟,离线,有人找我吗?白羊座1979-4-10
      
      
      威望:4
      等级:大二(研究C++)|大二(研究汇编)
      文章:266
      积分:806
      门派:XML.ORG.CN
      注册:2004/3/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给diegor发送一个短消息 把diegor加入好友 查看diegor的个人资料 搜索diegor在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看diegor的博客楼主
    发贴心情 微软对xml的支持 ----------- Yukon 中的XML[转帖][灌水]

    前言

    7月23日,微软发布了 SQL 2005(代号 Yukon)的 Beta2版本,在这个版本中,大部分功能都得以实现,让我们可以更清晰的看到 Yukon 的真实面目。
    自从1998 年XML 正式成为标准以来,就以它的简单、易扩展和对非结构化数据的良好支持等特性迅速得到大家的青睐。比尔·盖茨当然也不会放过这个重要的机会,在微软和其它一些公司的推动下,XML 的各种应用大量出现,它的发展早已超出了当初最乐观的估计。于是,有了危机感的关系型数据库,也开始加大对XML支持的力度了。
    Microsoft SQL Server 2000是从1997年开始开发的,所以在这个版本中,微软并没有加入很多的XML功能,虽然后来发布了SQLXML,但是也没有带来太多的功能变化。
    可是,在 Yukon 中,很多事情都变得不一样了。对XML数据发布、存储和查询的全面支持,标志着关系数据库和XML的蜜月期正式到来。
    .NET、Yukon与XML

    熟悉 .NET framework 架构的都知道,微软 .NET 战略的基础之一就是 XML。在 .NET开发之中,对象、 Dataset 和 XML,是三位一体的数据表现形式。在 Schema 的控制下,它们可以自由的互相转换。
    虽然在大多数的情况下,我们没有必要接触到 XML,没有必要知道 Dataset 的底层是些什么内容,没有必要知道序列化和反序列化的时候都做了些什么。但是,为了更好的优化我们的程序,有时我们还是需要自己来打造 XML。
    在我的应用程序中,我喜欢直接让数据库直接输出 XML,然后传递到前台,再转换为对象。有时也让前台把对象转换为 XML,让数据库去处理 XML 数据,省去了烦人的一次次交互,也大大提高了处理的性能。
    在 SQL 2000 里,我们就可以通过 FOR XML 查询和 OPENXML 语句来返回和读取XML。它可以完成我需要的大部分工作,不过令人不快的是,编写 FOR XML 查询和OPENXML语句都是非常麻烦的工作,要得到一个满意的XML结构, FOR XML EXPLICIT 查询经常长达1,000字节,甚至达到10,000字节,这很大程度的增加了编写代码和调试的工作量。而且,在SQL 2000中,查询引擎是把查询的结果放入XML流的,这也在一定程度上降低了性能。
    对于大多数人来说,Yukon 给我们带来了一种更简便易行的方式。这就是批注的映射架构和 XPath 查询。我们可以建立一些批注来指定 XML 到关系的映射。这些批注的基础包括 XSD 架构中的元素和属性与数据库中的表/视图和列之间的映射。在默认情况下,批注架构中的元素名映射到指定数据库中的表(视图)名,属性名映射到列名。这些批注还可用于指定 XML 中的分层关系(从而表示数据库中的关系)。
    从本质上看,此处完成的所有任务就是提供一个 XML 到关系表的映射。 换句话说,这与让传统的关系视图接受 XML(而非行集合)结果非常相似。 实际上,通过构建这种映射,我已经开发了所谓的 XML 视图。 XML 视图可被视为传统数据库上的抽象层。 通过提供这种 XML 视图,用户能够以分层的半结构化方式来公开传统的关系数据,实际上,这种方式通常是用来公开业务对象的更自然的方式。
    传统的 SQL 查询是用来筛选和联接关系表和视图的好工具。 但是,XML 视图看上去一点都不像关系表和视图。 熟悉 XML 的人都知道, XML 数据有另一种强大的查询语言,那就是XPath 查询语言,我们可以通过 XPath 来对 XML 视图进行查询。 XPath 用于从 XML 文档中选择一组节点。 每个 XPath 运算符都基于一个由以前的 XPath 运算符选择的节点集来选择一个节点集。 XML for SQL Server 支持 XPath 语言的子集,它允许用户针对由批注映射架构提供的虚拟 XML 视图执行查询。
    我们再来看一下如何把 XML 的改变反映到数据库中去,在以往我们需要通过 OPENXML,把 XML 转换为一个结果集,再通过关联的方式更新数据库。但是在 Yukon 中,我们可以使用 updategram更方便的来完成这个工作。Updategram 通过 XML 模板执行,它只是另一种模板命令节点类型。在 updategram 中,用户指定 before XML 和 after XML 实例。 然后,基于映射方案,所做的更改会被转换为相应的 sql insert/ update/delete 语句。
    在需要导入大量 XML 数据的时候,我们可以使用 XML Bulkload 工具。XML Bulkload 是一个可编写脚本的 COM 组件,它类似于传统的 BCP,但是其来源是 XML 文件,根据映射架构,它可以包括复杂的分层数据。
    新的 XML 数据类型

    除了对以往功能的增强,在我看来,最激动人心的变化就是增加了 XML 数据类型。XML数据类型可以存储一个 XML Document,或者是 XML fragments。这个数据类型可以用在表中,也可以用于变量和存储过程的参数。
    在SQL 2000中,我们也可以把一个 XML Document 或者 Fragments存放在一个BLOB 类型的字段中,但是 SQL 存储引擎并不能理解这个字段的内容,而只能在客户端完成对 XML 数据的解析。因此带来几个不便之处,如:查询 XML 中的内容效率很低,几乎不可能对大量数据进行查询;无法验证 XML 数据的架构;没有办法类型化 XML 节点中的数据,只能作为文本进行处理。
    在 Yukon 中,XML 实际上也是作为 BLOB 来存放的,但是当我们查询或者更新XML数据的时候,SQL 引擎首先把XML分拆为类似关系型的数据,然后再用关系型引擎来操作这些数据,使得 Yukon 提供了以下一些功能。
    l         XQuery 查询:XQuery 是 W3C 提出的一种新规范,它包含以前的 XPath 2.0。我们可以使用 XQuery 在T-SQL语句中处理 XML 数据。
    l         XML 索引:XML 列的主 XML 索引在该列中 XML 实例的所有标记、值和路径上都创建一个 B+ Tree 索引。通过这种方式,可以有效地对 XML 数据中的查询进行求值,并且在保留文档顺序和文档结构的同时从 B+ Tree 重新组合 XML 结果。Microsoft SQL Server 和其它的一些关系型数据库就是使用 B+ Tree来构造索引的。我们可以给 XML 列创建主索引,非主索引和全文索引。然后我们就可以像查询数据库中的表一样高效的查询 XML 中的数据了。
    l         XML 架构处理:XML 列、变量和参数可以根据 XML 架构的集合有选择地进行类型化。每个类型化的 XML 实例都从它遵循的 XML 架构集合指定目标命名空间。数据库引擎在数据分配和修改时根据 XML 架构来验证实例的有效性。
    l         类型化的 XML:如果 XML 架构集合中有描述 XML 数据的 XML 架构,就可以将 XML 架构集合与产生类型化 XML 的 XML 列相关联。可以使用 XML 架构来验证数据的有效性,在编译查询和数据修改语句时执行比非类型化的 XML 更精确的类型检查,以及优化存储和查询处理。
    有了这些功能,我们几乎可以像使用表一样的方式来使用 XML,通过数据库的存储引擎、查询优化器来访问 XML,还可以使用传统的备份/还原、事务、复制等手段来管理 XML的数据。
    小结

    在 Yukon 中,SQL 2000现有的功能(例如 FOR XML 和 OpenXML)已经得到增强。另外,SQLXML 映射技术的 Web 版增强也已经合并到 Yukon 中。XML 数据类型提供了一种简单的机制来存储 XML 数据,方法是将 XML 数据插入非类型化的 XML 列。使用 XML 架构定义类型化的 XML 有助于数据库引擎优化存储和查询处理,另外,还可以提供数据验证。
    FAQ

    Q:   Yukon是XML数据库吗?
    A:   不是。XML 数据库是以 XML 格式存储信息的数据库。虽然 Yukon 能够完成 XML数据库的一些功能,如存储、更新、检索、搜索 XML 数据,但是,Yukon 存储数据的格式还是基于关系型数据库,所以说 Yukon 并不是一个 XML 数据库。

    Q: 关系型数据库和XML支持什么类型的数据?
    A: 从表1中我们可以清晰的看到XML和关系型数据库的对比。

    XML
    关系型数据库

    平面结构化数据

    分层结构化数据

    非首选:可以用外键和级联实现

    半结构化数据

    非首选

    非结构化数据

    非首选:可以用全文检索实现

    有序存储

    非首选

    递归数据

    √(递归查询)


    Q:   我们有必要把结构化数据转向 XML 吗?
    A:    没有必要。虽然XML 数据模型比关系数据模型更加丰富,因而也更加复杂。XML 数据模型不仅允许对复杂的数据进行建模,而且还必须保留层次关系和数据中的文档顺序。文档顺序是通过基于 XML 节点标识符的排序维护的;这同时维护了层次关系。所有这些都对更复杂的查询计划产生了影响。
    为了获得更好的性能,应该将结构化数据存储在表的关系列中。如果数据是半结构化或非结构化的,则需要选择使用 XML 数据模型来进行建模,并且加入 XML 标记。把结构化的数据用 XML 数据模型来存放,会降低数据访问的性能。

    Q:    我们什么时候需要使用 XML 数据类型?
    A:    XML 数据和关系型数据相比,有以下几个好处:数据的结构容易做出重大更改,可以是非结构化的;数据可以表示容器层次结构(与实体中的引用相对),并且可能是递归的;数据可以具有内在的顺序。
    如果我们需要实现这几个功能,那么我们可以选择 XML 数据类型。但是,如果我们只是在 Yukon 中存储 XML 数据,并不需要在数据库中读取和修改 XML 数据内部的值。那么我建议使用文本类型来存储 XML 数据。

    计算机世界开发者俱乐部 http://www.dev-club.com


    [此贴子已经被作者于2004-9-30 10:44:18编辑过]

       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    坚决支持XML!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/9/29 16:24:00
     
     GoogleAdSense白羊座1979-4-10
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML基础 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/12/29 16:57:23

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    46.875ms