对MSXML4.0 SP2 的支持将在2010年4月结束

友情提示–对MSXML4.0 SP2 的支持将在2010年4月13日结束。如果您的应用程序还在使用MSXML4.0 SP2,您应当将程序升级到MSXML6.0或MSXML 4.0 SP3。有关微软软件生命周期策略的详细信息,请访问微软产品技术支持生命周期网站。 您可能会问为什么我要在这里提起MSXML6.0,它和MSXML4.0之间究竟有些什么关系?详情请阅读下面的历史背景: MSXML4.0发布于2001年4月。和更早期的MSXML版本相比,MSXML4.0不仅提供许多新的功能(如e.g. XSD, SOM, Side-by-Side Functionality),同时性能也有很大的改进(如XSLT的性能)。最新的MSXML4.0 SP3发布于2009年3月,可以完全取代以前的MSXML4.0、MSXML4.0 SP1和MSXML4.0 SP2。一旦MSXML4.0 SP2的支持在2010年4月13日到期,MSXML 4.0 SP3将成为唯一支持的MSXML4.0版本。另外,我们对MSXML4.0 SP3的支持将仅限于安全补丁,目前没有发布更高版本的MSXML4.0 的计划。 MSXML 6.0发布于2006年7月,目的是取代之前的MSXML版本。MSXML 6.0是COM /脚本环境下XML微软本地代码栈的核心,MSXML6.0拥有许多新功能,在性能以及安全性上也更胜一筹。此外,MSXML6.0更接近W3C规范,与System.XML的兼容性也更好。和MSXML4.0相比,大多数Windows操作系统中已经包含了MSXML6.0,从而减轻了手工安装软件包的烦恼–只要您的客户端运行的是Windows XP SP3, Vista RTM/SP1/SP2 或Windows 7,就没有必要安装MSXML6.0了。对于那些运行Windows 2003的系统,请从Microsoft软件中心下载安装MSXML6.0。 我们强烈建议所有MSXML客户尽快升级到MSXML 6.0。如果您要构建新的应用程序,请使用MSXML 6.0。最后,我们十分渴望了解如何能够为客户提供最佳的升级途径。如果您有任何意见请张贴在MSXML的论坛上, 我们非常乐意听到您的声音! 微软MSXML团队


MSXML XHTML DTDs——使互联网更美好

微软刚刚发布了一个新的Windows升级包以改善MSXML组件解析XHTML时对W3C服务器的访问。Windows Update自动更新服务应该已经向你推送了这个升级包,不过你也可以通过以下网页手动下载适合你的版本: http://support.microsoft.com/?kbid=973688(MSXML4 SP2……如果你还没升级到SP3的话!) http://support.microsoft.com/?kbid=973685(MSXML4 SP3) http://support.microsoft.com/?kbid=973686(适用于WinXP SP2和Win2K3的MSXML6独立安装版本) http://support.microsoft.com/?kbid=973687(适用于所有随Windows发布的MSXML3和MSXML6) 这个升级包究竟是干什么的呢?让我们来看看这么一个场景:网页通过AJAX访问远程主机上的XHTML资源,把内容读入XML文档,然后获取部分信息或者把信息追加到当前网页中。很常见的场景,对不对? 问题是,当你通过MSXML读取XHTML的时候,如果没有关闭DTD处理,那么XHTML中的DOCTYPE声明会指引MSXML读取XHTML DTD以便使用&nbsp;之类的实体。可以想象,当许多人访问那些使用AJAX的热门网站时,会对DTD服务器产生多少的访问量。一旦DTD服务器过载而不再响应服务的时候,便会发生各种各样的问题,比如:网站由于无法访问资源而导致服务中断、W3C承担更多的维护工作、用户由于诡异的脚本错误而无法正常访问网站,等等。 这个升级包就是为了解决这个问题而发布的。升级以后的MSXML组件将那些XHTML DTD保存起来,当需要的时候直接返回保存起来的版本,以避免对W3C服务器的访问。这些被保存起来的XHTML DTD已经稳定发布好多年了,新的实体将会在其他的URL中发布,所以你不必担心DTD的使用会受到影响。 尝试着运行以下脚本: function pullXHtml() {     var xml = new ActiveXObject(“Msxml2.DOMDocument.3.0”);     xml.async = false;     xml.loadXML(     “<!DOCTYPE html PUBLIC \”-//W3C//DTD XHTML 1.0 Transitional//EN\” \”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\”>” +     “<html xmlns=’http://www.w3.org/1999/xhtml’ xml:lang=’en’ lang=’en’><head><title>simple document</title></head>” +     “<body><p>a simple&nbsp;paragraph</p></body></html>”);     if (xml.parseError.errorCode !=…


Balisage 2009标识技术会议(五)

第三天(8/13/2009),中午 关键词:会场内外,花絮,纪念品,开小差 连续几篇都是讨论技术的话题,我想在这篇博客里改变一下,写一些会场内外的见闻。在前面说起Balisage 2009会场设置在Best Western Europa酒店(右图,由maps.bing.com的3D地图生成)。会议组织者包了也许是这小个酒店所有可供会议使用的多功能厅(其实只有两个)。都说北美洲有很好的互联网接入服务,但是第一天,酒店还是颇费了一些周折才为所有与会者提供了无线网络连接。 我曾经提起,这个会议是一个从业人员相互切磋的盛会。会议的组织者采用很多方法来促进与会者的交流,不仅提供免费早餐,会间休息的茶点等等,还在主会场四周的墙上提供空间给与会者张贴大幅学术和产品介绍,其中有一块区域取名为“会场里听到的”(Heard in the Halls),类似BBS(左图),上面钉了好多写着一两句话的便条,都是与会者们听到和想到的。比如“By real world,I mean my world”(所谓真实的世界,我指是我的世界),“Developers do not just interpret roles;they make rules”(开发者不仅解释法则,而且创造法则),诸如此类。第一次参加这个会议的我可以感觉到,虽然参加这个会议的学者和业界人员虽然来自不同国家和地区,但似乎他们互相都特别熟悉,讲演间隙往往三五成群手里端着饮料继续讨论。到了下一场讲演开始的时间,有个热心的会议组织者会绕场一周,一边走一边挥动手里的铃铛,提醒“时间到了,请回座。” 说起大会的纪念品其他也没有什么特别的,无外乎是些印有Balisage 2009字样的贴花,徽章,小包,但是其中有一件却让我爱不释手,着实领略了一下这个会议的与众不同之处。读者可以猜一猜一旁的插图中是个什么物件,我这里先不揭示谜底。 今天下午,我一到会场,大厅里一排排整齐的桌子上放着许多刻成一个个名片大小方格的卡纸。有些已经被裁成了一张张小卡片。每张小卡片上印有一串跟XML 或标识语言有关的关键字或符号,每张小卡片有一个号码,不同号码对应不同的字符串。我实在搞不清楚这些卡片除了收集来做纪念品外还有什么用处。之后才发现,那些与会的业界专家其实也会在听讲演的时候开小差,拿这些卡纸做起手工来。


Balisage 2009标识技术会议(四)

第二天(8/12/2009),下午 关键词:管道,流处理,XSLT 2.1,推与挽模型(Push and Pull Model) 在我的书架上有两本非常醒目的红色封面参考书,XSLT 2.0[1]和XPath 2.0[2],这两本书的作者Michael Kay的讲演内容就是今天下午我想着重向大家介绍的。 会议安排了Michael连续两个主题讲演。第一个是关于“基于管道的XML处理”(Pipeline based XML processing)[3],第二个是“制定中的XSLT 2.1标准的流处理功能”。基于管道的XML处理所指的是在对XML的处理过程中需要经过一系列的步骤,而这些步骤实际上可以通过管道(pipeline)采用流的方式处理,当然前提是这个处理的每个步骤都需要支持“流”(streamability,这个英文单词是XSLT标准制定工作组自创的)。而所谓基于“流”的处理是指一个相对内存来说巨大的XML文件可以被分割成比较小的单元进行顺序处理。而这样的单元可以是每一个SAX [4]的消息,例如startElement和EndElement,或者是一个XML的部分,比如一个节点(Node)和原子化的量值(Atomic Value)。 而对于XML的处理来说,一般只有两种方式:组构和析构(compose and decompose)。每个步骤则采用“推”或“挽”的方式对XML组构或析构。在将这些步骤连接起来的时候由于它们各自的极化方式不一样(“推”或“挽”)或对XML的单元访问方式不一样(顺序,乱序,或在一个子树中乱序,子树与子树间顺序),要么需要一个控制器(controller)将“推”模型和“挽”模型连接起来,要么需要将XML的子树或全树缓存在内存中,结果往往造成整个处理流程的效率降低。Michael举了一个他自己的XQuery处理器例子,由于使用控制器和两个线程将“推”和“挽”两个步骤联系起来,结果比起一个单一“推”或单一“挽”的处理流程效率降低了差不多45%。会后有人提问有关在多核的系统中,是否这样的架构会体现出优势,Michael表示肯定。另外,他介绍了一个非常有用但被人淡忘的概念[5],其实所谓的“推”或“挽”模型是可以相互转换的,在多线程的代价比较大的环境里,使用“协同程序”(co-routine)的方法可以在单一线程的条件下将“挽”模型转变为“推”模型,反之亦然。 XSLT 2.1的流处理功能是Michael应邀添加的新讲座,类似在音乐会里的加演节目。作为XSLT标准的编辑(editor),Michael对于这方面的内容当然非常熟悉。由于这篇博客的长度有限,我无法深入介绍XSLT 2.1的流处理功能,况且许多标准的细节还在起草阶段,这里就一些有趣或有争议的功能稍作解读: xsl:stream语句的引入新标准引入xsl:stream语句,用户使用该语句表示希望在xsl:stream之内的转型采用“流”处理方式。有人在会后提出疑问,认为这个语句将使用或不使用“流”处理的决定权交给用户,而用户往往不清楚自己设计的XSLT程序是否真可以采用“流”处理。理想情况应该是用户使用现有的XSLT语句,而“聪明”的XSLT处理器能够通过静态分析找出可以进行“流”处理的局部转型或全面转型。这其实也是XSLT标准工作小组一直在争论的话题。 xsl:iterate系列语句的引入新标准引入xsl:iterate语句,它同xsl:for-reach语句有一样的语法结构,但是用来在“流”处理中支持可以进行尾递归优化的迭代循环和变量传递。举个例子,比如我们希望计算一个财务报告中的累计总计(running total),用传统的XSLT 1.0的xsl:for-each 将会效率特别低,堆栈内存使用为O(n),而即使是支持尾递归优化的XSLT 1.0处理器也需要大约O(N^2)的时间(O(1+2+…+N) = O(N(N+1)/2))。而采用xsl:iterate语句的“流”处理可以将堆栈内存减少至O(1),时间减少至O(N)。写出的XSLT语句类似这样:<xsl:stream href=”accounts_10gb.xml”><xsl:iterate select=”transaction”><xsl:param name=”running-total” select=”0″/><running_total><xsl:value-of select=”$running_total”/></running_total><xsl:next-iteration>      <xsl:with-param name=”running-total”          select=”$running-total + total”/>      </xsl:next-iteration></xsl:iterate></xsl:stream> XSLT 2.1还引入了xsl:mode语句,它同xsl:template的“mode”属性一起用来标识某个XSL的模板是否适用于“流”处理;引入了xsl:merge语句支持多个XML文件的相互融合,这里就不一一细数了。希望了解更多XSLT最新情况的读者可以关注一下XSL标准的官方网站[6]。 http://www.amazon.com/XSLT-2-0-Programmers-Reference-Programmer/dp/0764569090  http://www.amazon.com/XPath-2-0-Programmers-Reference-Programmer/dp/0764569104 Kay, Michael. “You Pull, I’ll Push: on the Polarity…


Balisage 2009标识技术会议(一)

关键词:Balisage Conference 2009 加拿大 蒙特利尔 XML 自一九九七年开始,八月的加拿大蒙特利尔一直是专业标识技术人员聚会的时间和地方[1]。今年有幸参加这个会议的我在以后几天时间里将为对XML(eXtensible Markup Language 可扩展标识语言)和其相关知识感兴趣的博客读者介绍我在蒙特利尔的所见所闻。希望大家喜欢我的系列报道,并对文章的内容多提宝贵意见。这里我首先谢谢各位的热心参与,并给心急的读者简单介绍一下“Balisage”的背景知识。 “Balisage”是蒙特利尔当地对“标识”(或英文单词“Markup”)的称谓。根据维基百科[2]的叙述,这个词缘自ISO(国际标准组织)在法语版SGML(Standard Generalized Markup Language,XML的前身)[3]中对标识的称呼。而Balisage 会议是一个标识技术的从业人员相互切磋(peer-reviewed)的盛会,它旨在提供标志技术的研究人员和开发人员一个平台将这个领域的发展潜力推向极致。这个会议讨论的话题都是围绕着标识语言的不同应用,比如怎样创建标识;怎样用标识提供含义;怎样分层和重复;怎样建模,分类,转型;怎样查询,查找和获取标识信息;怎样表示和访问;使计算机系统让标识语言“跳舞”(在更小的空间里让标识发挥更大的作用)。简而言之,使用标志改变这个世界和万维网。 “Balisage”同时也是一个XML和XSL(eXtesible Stylesheet Language)[4]的会议。同时它也包括了XSD[5]、XQuery[6]、RDF[7]、UBL[8]、SGML、LMNL[9]、XSL-FO[10]、XTM[11]、SVG[12]、MathML[13]、OWL[14]、TexMECS[15]和RNG[16]等和其他已经或尚未和这些缩写挂起钩来的技术。 让我们来看一下将在这次会议上做技术讲演人员的名单[17],其中包括了一些在XML业界耳熟能详的名字,比如Michael Kay、Liam Qiun、C. M. Sperberg-McQueen和Norman Walsh。想必你已经迫不及待等着和我一起去八月的蒙特利尔了。OK, Buckle up, and stay tuned。 以上由微软(中国)研发集团SQL事业部XML项目组的蒋欣采编提供。 网络参考文档: http://www.balisage.net http://en.wikipedia.org/wiki/Balisage http://www.w3.org/MarkUp/SGML/ http://www.w3.org/Style/XSL/ http://www.w3.org/XML/Schema http://www.w3.org/TR/xquery/ http://www.w3.org/RDF/ http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=ubl http://www.lmnl.net/ http://www.w3.org/TR/xsl/ http://www.topicmaps.org/xtm/ http://www.w3.org/Graphics/SVG/ http://www.w3.org/Math/ http://www.w3.org/TR/owl-xmlsyntax/ http://decentius.aksis.uib.no/mlcd/2003/Papers/texmecs.html http://relaxng.org/ http://www.balisage.net/2009/Program.html


升级到MSXML 6.0

由于历史原因,MSXML有许多版本共存,比如3.0、4.0、5.0和6.0。让我们的客户把他们的应用程序移植到MSXML 6.0上去是我们的最终目标。 虽然我们希望今天每个人都在使用MSXML 6.0,但仍然清醒地意识到迁移需要相当的时间。所以我们将继续在MSXML 3.0上投入资源以支持现有的应用程序以及满足那些需要零发布需求。虽然MSXML 3.0并不具有MSXML6的新特性,不过MSXML 3.0仍然不失为一个稳定而强健的XML平台。MSXML 3.0已经随着Win2000 SP4以及以上的操作系统一起发布,对于应用程序而言可以说无需考虑发布的问题。 MSXML 4.0是MSXML 6.0的前身,不过并不曾随着操作系统发布。虽然我们刚刚发布了MSXML 4.0 SP3,但是就W3C标准以及与System.Xml的兼容性而言,MSXML 6.0是一个巨大的进步。此外,MSXML 6.0还提供64位版本。目前,我们主要在MSXML 6.0和MSXML 3.0上投入精力,所以我们希望用户尽可能迁移到MSXML 6.0,或者根据需要迁移到MSXML 3.0。 最后,如果不是针对Microsoft Office 2003或者Microsoft Office 2007编写程序却使用MSXML 5.0的开发者,应该立即迁移到MSXML 6.0。 摘要 MSXML 6.0是适用于COM和脚本语言环境中的微软XML产品线中的最新版本。本文主要涉及了MSXML 6.0 的安装和应用升级,所支持的操作系统以及其相对于MSXML3和MSXML4的变化。 本文所涉及到的MSXML 6.0的主要变化有以下方面: MSXML 6.0 引入一系列安全方面的改变,默认关闭了安全敏感的特性。 MSXML 6.0 改进了对W3C XSD 1.0 标准的支持,并且提高了与.Net Framework 2.0 中System.Xml的兼容性。 MSXML 6.0 抛弃了若干遗留在MSXML 3.0 和 MSXML 4.0中的特性。 MSXML 6.0…

1

使用HTML和MSXML6.0创建一个超轻量级XPATH测试程序

在开发和调试基于XML的应用的时候,程序员往往为找不到合适的快速桌面XPATH测试软件发愁。诚然,市面上有成套的XML编辑软件,但是它们往往要么太过于庞大,安装维护不是很方便,要么就是不免费,自己写一个吧,又觉得处理UI很烦。特别是在利用MSXML开发软件的程序员,很想使用MSXML直接测试自己写的XPATH对不对。笔者这里提供各位程序员一个基于HTML和MSXML6的超轻量级XPATH测试程序参考和使用: 你可以把这个程序放在WEB服务器上供其他同事共享,或者放在自己的文件系统直接用IE打开(对不起,这个程序只在IE上测试过)。打开后左面的窗口可以贴你的测试XML文本,右边可以随心所欲的敲入你的XPATH语句。在XPATH下方会随你的输入立刻输出可能的XPATH输出结果。红色代表错误,黑色代表正确,灰色代表XPATH的执行没有任何结果返回。 点击这里直接运行该程序。笔者真诚的希望这个小程序会对你的XML和MSXML开发工作有所帮助。 蒋欣 高级软件开发主管 XPathEvaluator.htm

3

现在可以下载MSXML4.0 SP3了

今天,我们很荣幸地宣布MSXML4.0 Service Pack 3 (SP3)可以在微软下载中心下载了! MSXML4.0 SP3支持多种语言。MSXML4.0 SP3修复了许多安全缺陷并提高了软件的可靠性,可以完全取代以前的MSXML4.0、MSXML4.0 SP1和MSXML4.0 SP2。 MSXML4.0大约是九年前发布的,不过早已被MSXML6.0取代,MSXML4.0的存在仅仅是为了更安全地支持遗留系统。目前没有任何在MSXML4.0 SP3中添加新功能的计划。同时,对MSXML4.0 SP2的支持将会在2009年11月结束。 我们强烈建议MSXML4.0的用户尽早迁移到MSXML6.0平台上。MSXML6.0拥有许多新功能,在性能以及安全性上也更胜一筹。此外,MSXML6.0更接近W3C规范,与System.XML的兼容性也更好。请参考Upgrading to MSXML6.0以了解MSXML4.0 和MSXML6.0之间的差异以及迁移时需要注意的事项。 注意:如果你安装过MSXML4.0 SP3 BETA,请务必在安装MSXML4.0 SP3正式版之前先行卸载MSXML4.0 SP3 BETA。对于安装了MSXML4.0 SP3 BETA的Windows Vista和Windows Server 2008的用户,请阅读发行说明。

1

现在可以下载MSXML4 SP3 Beta了

MSXML 团队很高兴地向大家宣布:现在可以下载试用MSXML 4.0 Service Pack 3 (SP3) Beta了! MSXML4 SP3 可以完全替代以前的MSXML4 SP1和MSXML4 SP2。MSXML4 SP3包含以下改进: 修复了许多安全缺陷 提高了软件的可靠性 MSXML 4 SP3适用于下列操作系统: Windows 2000 SP4 Windows XP SP2 Windows XP SP3 Windows Server 2003 SP1 Windows Server 2003 SP2 Windows Vista RTM Windows Vista SP1 Windows Server 2008 您的意见和建议对我们而言非常宝贵,因此请您: 下载安装MSXML 4.0 Service Pack 3 (SP3) Beta并确保您的软件能像以前一样正常运行。 通过Microsoft Connect把您的意见或发现的问题反馈给项目团队。请确保您已经注册过Microsoft…

1