<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SQL中国研发中心 : XML</title><link>http://blogs.msdn.com/sqlcrd/archive/tags/XML/default.aspx</link><description>Tags: XML</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>MSXML XHTML DTDs——使互联网更美好</title><link>http://blogs.msdn.com/sqlcrd/archive/2009/12/02/MSXML-XHTML-DTDs.aspx</link><pubDate>Wed, 02 Dec 2009 06:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9931280</guid><dc:creator>sqlcrdft</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sqlcrd/comments/9931280.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqlcrd/commentrss.aspx?PostID=9931280</wfw:commentRss><description>&lt;P mce_keep="true"&gt;微软刚刚发布了一个新的Windows升级包以改善MSXML组件解析XHTML时对W3C服务器的访问。Windows Update自动更新服务应该已经向你推送了这个升级包，不过你也可以通过以下网页手动下载适合你的版本：&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/?kbid=973688"&gt;http://support.microsoft.com/?kbid=973688&lt;/A&gt;（MSXML4 SP2……如果你还没升级到SP3的话！）&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/?kbid=973685"&gt;http://support.microsoft.com/?kbid=973685&lt;/A&gt;（MSXML4 SP3）&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/?kbid=973686"&gt;http://support.microsoft.com/?kbid=973686&lt;/A&gt;（适用于WinXP SP2和Win2K3的MSXML6独立安装版本）&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/?kbid=973687"&gt;http://support.microsoft.com/?kbid=973687&lt;/A&gt;（适用于所有随Windows发布的MSXML3和MSXML6）&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;这个升级包究竟是干什么的呢？让我们来看看这么一个场景：网页通过AJAX访问远程主机上的XHTML资源，把内容读入XML文档，然后获取部分信息或者把信息追加到当前网页中。很常见的场景，对不对？&lt;/P&gt;
&lt;P&gt;问题是，当你通过MSXML读取XHTML的时候，如果没有关闭DTD处理，那么XHTML中的DOCTYPE声明会指引MSXML读取XHTML DTD以便使用&amp;amp;nbsp;之类的实体。可以想象，当许多人访问那些使用AJAX的热门网站时，会对DTD服务器产生多少的访问量。一旦DTD服务器过载而不再响应服务的时候，便会发生各种各样的问题，比如：网站由于无法访问资源而导致服务中断、W3C承担更多的维护工作、用户由于诡异的脚本错误而无法正常访问网站，等等。&lt;/P&gt;
&lt;P&gt;这个升级包就是为了解决这个问题而发布的。升级以后的MSXML组件将那些XHTML DTD保存起来，当需要的时候直接返回保存起来的版本，以避免对W3C服务器的访问。这些被保存起来的XHTML DTD已经稳定发布好多年了，新的实体将会在其他的URL中发布，所以你不必担心DTD的使用会受到影响。&lt;/P&gt;
&lt;P&gt;尝试着运行以下脚本：&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;function&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt; pullXHtml() {&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt; xml = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; ActiveXObject(&lt;SPAN style="COLOR: #a31515"&gt;"Msxml2.DOMDocument.3.0"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;xml.async = &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;xml.loadXML(&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;"&amp;lt;!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"&amp;gt;"&lt;/SPAN&gt; +&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;"&amp;lt;html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;simple document&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;"&lt;/SPAN&gt; +&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;"&amp;lt;body&amp;gt;&amp;lt;p&amp;gt;a simple&amp;amp;nbsp;paragraph&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (xml.parseError.errorCode != 0) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt; myErr = xml.parseError;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WScript.Echo(&lt;SPAN style="COLOR: #a31515"&gt;"You have error "&lt;/SPAN&gt; + myErr.reason);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;} &lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WScript.echo(&lt;SPAN style="COLOR: #a31515"&gt;"Yay!"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WScript.echo(xml.xml);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体; mso-no-proof: yes; mso-fareast-theme-font: minor-fareast; mso-ansi-language: EN-US"&gt;pullXHtml();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;如果你没有安装最新的升级包，你或许会遇到如下错误提示：&lt;/P&gt;
&lt;P&gt;You have error The server did not understand the request, or the request was invalid.&lt;BR&gt;Error processing resource 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'.&lt;/P&gt;
&lt;P&gt;不过，如果你安装了最新的升级包，你将会欣喜地发现XML被成功读取并解析。更进一步，如果使用&lt;A href="http://www.fiddler2.com/fiddler2/" mce_href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler&lt;/A&gt;监视网络流量，你更会惊喜地发现访问没有产生任何网络流量！&lt;/P&gt;
&lt;P&gt;Marcelo Lopez Ruiz&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9931280" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/MSXML/default.aspx">MSXML</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/XML/default.aspx">XML</category></item><item><title>Balisage 2009标识技术会议（五）</title><link>http://blogs.msdn.com/sqlcrd/archive/2009/08/20/Balisage-Conference-2009-Part-5.aspx</link><pubDate>Thu, 20 Aug 2009 14:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9876880</guid><dc:creator>sqlcrdft</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sqlcrd/comments/9876880.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqlcrd/commentrss.aspx?PostID=9876880</wfw:commentRss><description>&lt;P&gt;第三天（8/13/2009），中午&lt;/P&gt;
&lt;P&gt;关键词：会场内外，花絮，纪念品，开小差&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 208px; HEIGHT: 187px" align=right src="http://blogs.msdn.com/photos/sqlcrd/images/9876675/original.aspx" width=208 height=187 mce_src="http://blogs.msdn.com/photos/sqlcrd/images/9876675/original.aspx"&gt;连续几篇都是讨论技术的话题，我想在这篇博客里改变一下，写一些会场内外的见闻。在前面说起Balisage 2009会场设置在Best Western Europa酒店（右图，由maps.bing.com的3D地图生成）。会议组织者包了也许是这小个酒店所有可供会议使用的多功能厅（其实只有两个）。都说北美洲有很好的互联网接入服务，但是第一天，酒店还是颇费了一些周折才为所有与会者提供了无线网络连接。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;IMG style="WIDTH: 163px; HEIGHT: 266px" align=left src="http://blogs.msdn.com/photos/sqlcrd/images/9876676/original.aspx" width=163 height=266 mce_src="http://blogs.msdn.com/photos/sqlcrd/images/9876676/original.aspx"&gt;我曾经提起，这个会议是一个从业人员相互切磋的盛会。会议的组织者采用很多方法来促进与会者的交流，不仅提供免费早餐，会间休息的茶点等等，还在主会场四周的墙上提供空间给与会者张贴大幅学术和产品介绍，其中有一块区域取名为“会场里听到的”（Heard in the Halls），类似BBS（左图），上面钉了好多写着一两句话的便条，都是与会者们听到和想到的。比如“By real world，I mean my world”（所谓真实的世界，我指是我的世界），“Developers do not just interpret roles；they make rules”（开发者不仅解释法则，而且创造法则），诸如此类。第一次参加这个会议的我可以感觉到，虽然参加这个会议的学者和业界人员虽然来自不同国家和地区，但似乎他们互相都特别熟悉，讲&lt;IMG style="WIDTH: 127px; HEIGHT: 244px" align=right src="http://blogs.msdn.com/photos/sqlcrd/images/9876677/original.aspx" width=127 height=244 mce_src="http://blogs.msdn.com/photos/sqlcrd/images/9876677/original.aspx"&gt;演间隙往往三五成群手里端着饮料继续讨论。到了下一场讲演开始的时间，有个热心的会议组织者会绕场一周，一边走一边挥动手里的铃铛，提醒“时间到了，请回座。”&lt;/P&gt;
&lt;P&gt;说起大会的纪念品其他也没有什么特别的，无外乎是些印有Balisage 2009字样的贴花，徽章，小包，但是其中有一件却让我爱不释手，着实领略了一下这个会议的与众不同之处。读者可以猜一猜一旁的插图中是个什么物件，我这里先不揭示谜底。&lt;/P&gt;
&lt;P&gt;今天下午，我一到会场，大厅里一排排整齐的桌子上放着许多刻成一个个名片大小方格的卡纸。有些已经被裁成了一张张小卡片。每张小卡片上印有一串跟XML 或标识语言有关的关键字或符号，每张小卡片有一个号码，不同号码对应不同的字符串。我实在搞不清楚这些卡片除了收集来做纪念品外还有什么用处。之后才发现，那些与会的业界专家其实也会在听讲演的时候开小差，拿这些卡纸做起手工来。&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 520px; HEIGHT: 281px" src="http://blogs.msdn.com/photos/sqlcrd/images/9876679/original.aspx" width=520 height=281 mce_src="http://blogs.msdn.com/photos/sqlcrd/images/9876679/original.aspx"&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9876880" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/Balisage/default.aspx">Balisage</category></item><item><title>Balisage 2009标识技术会议（四）</title><link>http://blogs.msdn.com/sqlcrd/archive/2009/08/18/Balisage-Conference-2009-Part4.aspx</link><pubDate>Tue, 18 Aug 2009 16:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9874013</guid><dc:creator>sqlcrdft</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sqlcrd/comments/9874013.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqlcrd/commentrss.aspx?PostID=9874013</wfw:commentRss><description>&lt;P&gt;第二天（8/12/2009），下午&lt;/P&gt;
&lt;P&gt;关键词：管道，流处理，XSLT 2.1，推与挽模型（Push and Pull Model）&lt;/P&gt;
&lt;P&gt;在我的书架上有两本非常醒目的红色封面参考书，XSLT 2.0[1]和XPath 2.0[2]，这两本书的作者Michael Kay的讲演内容就是今天下午我想着重向大家介绍的。&lt;/P&gt;
&lt;P&gt;会议安排了Michael连续两个主题讲演。第一个是关于“基于管道的XML处理”（Pipeline based XML processing）[3]，第二个是“制定中的XSLT 2.1标准的流处理功能”。基于管道的XML处理所指的是在对XML的处理过程中需要经过一系列的步骤，而这些步骤实际上可以通过管道（pipeline）采用流的方式处理，当然前提是这个处理的每个步骤都需要支持“流”（streamability，这个英文单词是XSLT标准制定工作组自创的）。而所谓基于“流”的处理是指一个相对内存来说巨大的XML文件可以被分割成比较小的单元进行顺序处理。而这样的单元可以是每一个SAX [4]的消息，例如startElement和EndElement，或者是一个XML的部分，比如一个节点（Node）和原子化的量值（Atomic Value）。&lt;/P&gt;
&lt;P&gt;而对于XML的处理来说，一般只有两种方式：组构和析构（compose and decompose）。每个步骤则采用“推”或“挽”的方式对XML组构或析构。在将这些步骤连接起来的时候由于它们各自的极化方式不一样（“推”或“挽”）或对XML的单元访问方式不一样（顺序，乱序，或在一个子树中乱序，子树与子树间顺序），要么需要一个控制器（controller）将“推”模型和“挽”模型连接起来，要么需要将XML的子树或全树缓存在内存中，结果往往造成整个处理流程的效率降低。Michael举了一个他自己的XQuery处理器例子，由于使用控制器和两个线程将“推”和“挽”两个步骤联系起来，结果比起一个单一“推”或单一“挽”的处理流程效率降低了差不多45%。会后有人提问有关在多核的系统中，是否这样的架构会体现出优势，Michael表示肯定。另外，他介绍了一个非常有用但被人淡忘的概念[5]，其实所谓的“推”或“挽”模型是可以相互转换的，在多线程的代价比较大的环境里，使用“协同程序”（co-routine）的方法可以在单一线程的条件下将“挽”模型转变为“推”模型，反之亦然。&lt;/P&gt;
&lt;P&gt;XSLT 2.1的流处理功能是Michael应邀添加的新讲座，类似在音乐会里的加演节目。作为XSLT标准的编辑（editor），Michael对于这方面的内容当然非常熟悉。由于这篇博客的长度有限，我无法深入介绍XSLT 2.1的流处理功能，况且许多标准的细节还在起草阶段，这里就一些有趣或有争议的功能稍作解读：&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;xsl:stream语句的引入&lt;BR&gt;新标准引入xsl:stream语句，用户使用该语句表示希望在xsl:stream之内的转型采用“流”处理方式。有人在会后提出疑问，认为这个语句将使用或不使用“流”处理的决定权交给用户，而用户往往不清楚自己设计的XSLT程序是否真可以采用“流”处理。理想情况应该是用户使用现有的XSLT语句，而“聪明”的XSLT处理器能够通过静态分析找出可以进行“流”处理的局部转型或全面转型。这其实也是XSLT标准工作小组一直在争论的话题。&lt;/LI&gt;
&lt;LI&gt;xsl:iterate系列语句的引入&lt;BR&gt;新标准引入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语句类似这样：&lt;BR&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xsl:stream&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;href&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;accounts_10gb.xml&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xsl:iterate&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;select&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;transaction&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xsl:param&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;running-total&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;0&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;running_total&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xsl:value-of&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;select&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;$running_total&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;running_total&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xsl:next-iteration&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xsl:with-param&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;running-total&lt;/SPAN&gt;"&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;select&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;$running-total + total&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xsl:next-iteration&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xsl:iterate&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xsl:stream&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P mce_keep="true"&gt;XSLT 2.1还引入了xsl:mode语句，它同xsl:template的“mode”属性一起用来标识某个XSL的模板是否适用于“流”处理；引入了xsl:merge语句支持多个XML文件的相互融合，这里就不一一细数了。希望了解更多XSLT最新情况的读者可以关注一下XSL标准的官方网站[6]。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://www.amazon.com/XSLT-2-0-Programmers-Reference-Programmer/dp/0764569090"&gt;http://www.amazon.com/XSLT-2-0-Programmers-Reference-Programmer/dp/0764569090&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.amazon.com/XPath-2-0-Programmers-Reference-Programmer/dp/0764569104"&gt;http://www.amazon.com/XPath-2-0-Programmers-Reference-Programmer/dp/0764569104&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Kay, Michael. “You Pull, I’ll Push: on the Polarity of Pipelines.” Presented at Balisage: The Markup Conference 2009, Montréal, Canada, August 11 - 14, 2009. In Proceedings of Balisage: The Markup Conference 2009. Balisage Series on Markup Technologies, vol. 3 (2009). doi:10.4242/BalisageVol3.Kay01. (&lt;A href="http://www.balisage.net/Proceedings/vol3/html/Kay01/BalisageVol3-Kay01.html"&gt;http://www.balisage.net/Proceedings/vol3/html/Kay01/BalisageVol3-Kay01.html&lt;/A&gt;)&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://en.wikipedia.org/wiki/Simple_API_for_XML"&gt;http://en.wikipedia.org/wiki/Simple_API_for_XML&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://en.wikipedia.org/wiki/Coroutine"&gt;http://en.wikipedia.org/wiki/Coroutine&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.w3.org/Style/XSL/"&gt;http://www.w3.org/Style/XSL/&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9874013" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/Balisage/default.aspx">Balisage</category></item><item><title>Balisage 2009标识技术会议（一）</title><link>http://blogs.msdn.com/sqlcrd/archive/2009/08/12/Balisage-Conference-2009.aspx</link><pubDate>Wed, 12 Aug 2009 10:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9865723</guid><dc:creator>sqlcrdft</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sqlcrd/comments/9865723.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqlcrd/commentrss.aspx?PostID=9865723</wfw:commentRss><description>&lt;P mce_keep="true"&gt;关键词：Balisage Conference 2009 加拿大 蒙特利尔 XML&lt;/P&gt;
&lt;P mce_keep="true"&gt;自一九九七年开始，八月的加拿大蒙特利尔一直是专业标识技术人员聚会的时间和地方[1]。今年有幸参加这个会议的我在以后几天时间里将为对XML（eXtensible Markup Language 可扩展标识语言）和其相关知识感兴趣的博客读者介绍我在蒙特利尔的所见所闻。希望大家喜欢我的系列报道，并对文章的内容多提宝贵意见。这里我首先谢谢各位的热心参与，并给心急的读者简单介绍一下“Balisage”的背景知识。&lt;/P&gt;
&lt;P mce_keep="true"&gt;“Balisage”是蒙特利尔当地对“标识”（或英文单词“Markup”）的称谓。根据维基百科[2]的叙述，这个词缘自ISO（国际标准组织）在法语版SGML（Standard Generalized Markup Language，XML的前身）[3]中对标识的称呼。而Balisage 会议是一个标识技术的从业人员相互切磋（peer-reviewed）的盛会，它旨在提供标志技术的研究人员和开发人员一个平台将这个领域的发展潜力推向极致。这个会议讨论的话题都是围绕着标识语言的不同应用，比如怎样创建标识；怎样用标识提供含义；怎样分层和重复；怎样建模，分类，转型；怎样查询，查找和获取标识信息；怎样表示和访问；使计算机系统让标识语言“跳舞”（在更小的空间里让标识发挥更大的作用）。简而言之，使用标志改变这个世界和万维网。&lt;/P&gt;
&lt;P mce_keep="true"&gt;“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]等和其他已经或尚未和这些缩写挂起钩来的技术。&lt;/P&gt;
&lt;P mce_keep="true"&gt;让我们来看一下将在这次会议上做技术讲演人员的名单[17]，其中包括了一些在XML业界耳熟能详的名字，比如Michael Kay、Liam Qiun、C. M. Sperberg-McQueen和Norman Walsh。想必你已经迫不及待等着和我一起去八月的蒙特利尔了。OK, Buckle up, and stay tuned。&lt;/P&gt;
&lt;P&gt;以上由微软（中国）研发集团SQL事业部XML项目组的蒋欣采编提供。&lt;/P&gt;
&lt;P&gt;网络参考文档：&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://www.balisage.net/" mce_href="http://www.balisage.net/"&gt;http://www.balisage.net&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://en.wikipedia.org/wiki/Balisage" mce_href="http://en.wikipedia.org/wiki/Balisage"&gt;http://en.wikipedia.org/wiki/Balisage&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.w3.org/MarkUp/SGML/" mce_href="http://www.w3.org/MarkUp/SGML/"&gt;http://www.w3.org/MarkUp/SGML/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.w3.org/Style/XSL/" mce_href="http://www.w3.org/Style/XSL/"&gt;http://www.w3.org/Style/XSL/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.w3.org/XML/Schema" mce_href="http://www.w3.org/XML/Schema"&gt;http://www.w3.org/XML/Schema&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.w3.org/TR/xquery/" mce_href="http://www.w3.org/TR/xquery/"&gt;http://www.w3.org/TR/xquery/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.w3.org/RDF/" mce_href="http://www.w3.org/RDF/"&gt;http://www.w3.org/RDF/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=ubl" mce_href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=ubl"&gt;http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=ubl&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.lmnl.net/" mce_href="http://www.lmnl.net/"&gt;http://www.lmnl.net/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.w3.org/TR/xsl/" mce_href="http://www.w3.org/TR/xsl/"&gt;http://www.w3.org/TR/xsl/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.topicmaps.org/xtm/" mce_href="http://www.topicmaps.org/xtm/"&gt;http://www.topicmaps.org/xtm/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.w3.org/Graphics/SVG/" mce_href="http://www.w3.org/Graphics/SVG/"&gt;http://www.w3.org/Graphics/SVG/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.w3.org/Math/" mce_href="http://www.w3.org/Math/"&gt;http://www.w3.org/Math/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.w3.org/TR/owl-xmlsyntax/" mce_href="http://www.w3.org/TR/owl-xmlsyntax/"&gt;http://www.w3.org/TR/owl-xmlsyntax/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://decentius.aksis.uib.no/mlcd/2003/Papers/texmecs.html" mce_href="http://decentius.aksis.uib.no/mlcd/2003/Papers/texmecs.html"&gt;http://decentius.aksis.uib.no/mlcd/2003/Papers/texmecs.html&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://relaxng.org/" mce_href="http://relaxng.org/"&gt;http://relaxng.org/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.balisage.net/2009/Program.html" mce_href="http://www.balisage.net/2009/Program.html"&gt;http://www.balisage.net/2009/Program.html&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9865723" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/Balisage/default.aspx">Balisage</category></item><item><title>升级到MSXML 6.0</title><link>http://blogs.msdn.com/sqlcrd/archive/2009/04/01/upgrade-to-msxml-6.0.aspx</link><pubDate>Wed, 01 Apr 2009 09:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9525475</guid><dc:creator>sqlcrdft</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqlcrd/comments/9525475.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqlcrd/commentrss.aspx?PostID=9525475</wfw:commentRss><description>&lt;P&gt;由于历史原因，MSXML有许多版本共存，比如3.0、4.0、5.0和6.0。让我们的客户把他们的应用程序移植到MSXML 6.0上去是我们的最终目标。&lt;/P&gt;
&lt;P&gt;虽然我们希望今天每个人都在使用MSXML 6.0，但仍然清醒地意识到迁移需要相当的时间。所以我们将继续在MSXML 3.0上投入资源以支持现有的应用程序以及满足那些需要零发布需求。虽然MSXML 3.0并不具有MSXML6的新特性，不过MSXML 3.0仍然不失为一个稳定而强健的XML平台。MSXML 3.0已经随着Win2000 SP4以及以上的操作系统一起发布，对于应用程序而言可以说无需考虑发布的问题。&lt;/P&gt;
&lt;P&gt;MSXML 4.0是MSXML 6.0的前身，不过并不曾随着操作系统发布。虽然我们刚刚发布了&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7F6C0CB4-7A5E-4790-A7CF-9E139E6819C0" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7F6C0CB4-7A5E-4790-A7CF-9E139E6819C0"&gt;MSXML 4.0 SP3&lt;/A&gt;，但是就W3C标准以及与System.Xml的兼容性而言，MSXML 6.0是一个巨大的进步。此外，MSXML 6.0还提供64位版本。目前，我们主要在MSXML 6.0和MSXML 3.0上投入精力，所以我们希望用户尽可能迁移到MSXML 6.0，或者根据需要迁移到MSXML 3.0。&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;最后，如果不是针对Microsoft Office 2003或者Microsoft Office 2007编写程序却使用MSXML 5.0的开发者，应该立即迁移到MSXML 6.0。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;摘要&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;MSXML 6.0是适用于COM和脚本语言环境中的微软XML产品线中的最新版本。本文主要涉及了MSXML 6.0 的安装和应用升级，所支持的操作系统以及其相对于MSXML3和MSXML4的变化。&lt;/P&gt;
&lt;P mce_keep="true"&gt;本文所涉及到的MSXML 6.0的主要变化有以下方面：&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;MSXML 6.0 引入一系列安全方面的改变，默认关闭了安全敏感的特性。&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;MSXML 6.0 改进了对W3C XSD 1.0 标准的支持，并且提高了与.Net Framework 2.0 中System.Xml的兼容性。&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;MSXML 6.0 抛弃了若干遗留在MSXML 3.0 和 MSXML 4.0中的特性。&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;MSXML 6.0 不再支持通过MSM或CAB方式部属。MSXML 6.0已经是Vista和Windows XP SP3操作系统的一部分，对Vista以下系统只支持MSI方式安装。&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;可以在&lt;A href="http://msdn2.microsoft.com/en-us/library/ms753751.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms753751.aspx&lt;/A&gt;找到关于MSXML 6.0的更新信息。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;安装和升级&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;MSXML 6.0 随着Vista和Windows XP SP3发布，对其他低版本操作系统，可以从&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d21c292c-368b-4ce1-9dab-3e9827b70604&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d21c292c-368b-4ce1-9dab-3e9827b70604&amp;amp;displaylang=en"&gt;这里&lt;/A&gt;下载，然后及时运行Windows Update以便升级到最新版本。安装成功后，会增加以下两个文件：&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;%SYSDIR%\msxml6.dll&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;%SYSDIR%\msxml6r.dll&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;要将一个应用程序升级为使用MSXML 6.0的程序，所有对MSXML对象的引用必须修改为使用MSXML 6.0指定版本的ProgIDs，例如：MSXML2.DOMDocument.6.0。&lt;/P&gt;
&lt;P mce_keep="true"&gt;MSXML 6.0 支持以下操作系统：&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Windows 2000&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Windows XP&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Windows 2003&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Windows Vista&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;MSXML 6.0的技术支持将根据&lt;A href="http://support.microsoft.com/default.aspx?pr=lifesupsps#Windows"&gt;http://support.microsoft.com/default.aspx?pr=lifesupsps#Windows&lt;/A&gt; 所列的Windows Service Packs支持策略进行。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;安全迁移——理解“默认关闭”&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;在MSXML 6.0 中，若干安全敏感的特性默认被设置为关闭状态。当升级的时候，这些特性可能需要通过设置打开。但请注意，当从不信任的或未授权的客户端解析数据时，请务必谨慎。可以在&lt;A href="http://msdn2.microsoft.com/en-us/library/ms754611.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms754611.aspx&lt;/A&gt;找到更多的安全注意事项。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;改进与W3C XSD 1.0一致性以及与System.Xml 2.0兼容性：XmlSchemaCache的变化&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;为了改进与W3C标准的一致性以及与其他schema的兼容性，MSXML 6.0在XmlSchemaCache中对XSD schema编译和校验模型引入了一系列的变化。无论文档是通过DOMDocument还是SAXXMLReader来校验，这些变化都适用。&lt;/P&gt;
&lt;P mce_keep="true"&gt;XmlSchemaCache既被IXMLDOMDocument2接口的schemas和namespaces属性所使用，也被做为一个属性，由ISAXXMLReader.putProperty所支持。&lt;/P&gt;
&lt;P mce_keep="true"&gt;IXMLDOMSchemaCollection/XMLSchemaCache对象是线程自由的，可以被同时用于多个文档。发送到schema集合的XML schema文档会被克隆，XML schema文档仍然可写。在XML schema文件装入SchemaCache后，任何对XML schema文件的修改都不会反应到它的克隆镜像上。一个schema缓存可以被添加到多个schema集合中去。&lt;/P&gt;
&lt;P mce_keep="true"&gt;MSDN中关于这个主题的文档在&lt;A href="http://msdn2.microsoft.com/en-us/library/ms764692.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms764692.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;被废弃的特性和类&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;XDR Schema不能在MSXML 6.0中继续使用。可以用XSD.EXE将XDR Schema转换为XSD格式。XSD.EXE跟随Visual Studio .NET 1.0 和1.1一起安装。&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;MSXML 6.0不支持DSO（MSXML2.DSOControl.6.0）。这个特性很少有用户使用。&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;总之，让我们的客户把他们的应用程序移植到MSXML 6.0上去是我们的最终目标。如果您在迁移过程中遇到任何问题，请直接留言或者在&lt;A href="http://social.msdn.microsoft.com/Forums/en-US/msxml/threads/" mce_href="http://social.msdn.microsoft.com/Forums/en-US/msxml/threads/"&gt;MSDN论坛&lt;/A&gt;上提问。&lt;/P&gt;
&lt;P mce_keep="true"&gt;英文&lt;A href="http://blogs.msdn.com/xmlteam/archive/2007/03/12/upgrading-to-msxml-6-0.aspx" mce_href="http://blogs.msdn.com/xmlteam/archive/2007/03/12/upgrading-to-msxml-6-0.aspx"&gt;原文&lt;/A&gt;可以在这里找到。&lt;/P&gt;
&lt;P mce_keep="true"&gt;MSXML团队&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9525475" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/MSXML/default.aspx">MSXML</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/Data+Programmability/default.aspx">Data Programmability</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/XML/default.aspx">XML</category></item><item><title>使用HTML和MSXML6.0创建一个超轻量级XPATH测试程序</title><link>http://blogs.msdn.com/sqlcrd/archive/2009/03/13/xpath-evaluator-with-msxml.aspx</link><pubDate>Fri, 13 Mar 2009 02:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9472611</guid><dc:creator>sqlcrdft</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sqlcrd/comments/9472611.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqlcrd/commentrss.aspx?PostID=9472611</wfw:commentRss><description>&lt;P&gt;在开发和调试基于XML的应用的时候，程序员往往为找不到合适的快速桌面XPATH测试软件发愁。诚然，市面上有成套的XML编辑软件，但是它们往往要么太过于庞大，安装维护不是很方便，要么就是不免费，自己写一个吧，又觉得处理UI很烦。特别是在利用MSXML开发软件的程序员，很想使用MSXML直接测试自己写的XPATH对不对。笔者这里提供各位程序员一个基于HTML和MSXML6的超轻量级XPATH测试程序参考和使用：&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 524px; HEIGHT: 333px" src="http://blogs.msdn.com/photos/sqlcrd/images/9472595/original.aspx" width=400 height=280 mce_src="http://blogs.msdn.com/photos/sqlcrd/images/9472595/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;你可以把这个程序放在WEB服务器上供其他同事共享，或者放在自己的文件系统直接用IE打开（对不起，这个程序只在IE上测试过）。打开后左面的窗口可以贴你的测试XML文本，右边可以随心所欲的敲入你的XPATH语句。在XPATH下方会随你的输入立刻输出可能的XPATH输出结果。红色代表错误，黑色代表正确，灰色代表XPATH的执行没有任何结果返回。&lt;/P&gt;
&lt;P&gt;点击&lt;A href="http://blogs.msdn.com/sqlcrd/attachment/9472611.ashx" mce_href="http://blogs.msdn.com/sqlcrd/attachment/9472611.ashx"&gt;这里&lt;/A&gt;直接运行该程序。笔者真诚的希望这个小程序会对你的XML和MSXML开发工作有所帮助。&lt;/P&gt;
&lt;P&gt;蒋欣 高级软件开发主管&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9472611" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/sqlcrd/attachment/9472611.ashx" length="4177" type="text/html" /><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/MSXML/default.aspx">MSXML</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/XPath/default.aspx">XPath</category></item><item><title>现在可以下载MSXML4.0 SP3了</title><link>http://blogs.msdn.com/sqlcrd/archive/2009/03/06/msxml4-sp3-rtm.aspx</link><pubDate>Fri, 06 Mar 2009 17:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9462743</guid><dc:creator>sqlcrdft</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqlcrd/comments/9462743.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqlcrd/commentrss.aspx?PostID=9462743</wfw:commentRss><description>&lt;P mce_keep="true"&gt;今天，我们很荣幸地宣布&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=7f6c0cb4-7a5e-4790-a7cf-9e139e6819c0&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=7f6c0cb4-7a5e-4790-a7cf-9e139e6819c0&amp;amp;displaylang=en"&gt;MSXML4.0 Service Pack 3 (SP3)&lt;/A&gt;可以在微软下载中心下载了！&lt;/P&gt;
&lt;P mce_keep="true"&gt;MSXML4.0 SP3支持多种语言。MSXML4.0 SP3修复了许多安全缺陷并提高了软件的可靠性，可以完全取代以前的MSXML4.0、MSXML4.0 SP1和MSXML4.0 SP2。&lt;/P&gt;
&lt;P mce_keep="true"&gt;MSXML4.0大约是九年前发布的，不过早已被MSXML6.0取代，MSXML4.0的存在仅仅是为了更安全地支持遗留系统。目前没有任何在MSXML4.0 SP3中添加新功能的计划。同时，对MSXML4.0 SP2的支持将会在2009年11月结束。 &lt;/P&gt;
&lt;P mce_keep="true"&gt;我们强烈建议MSXML4.0的用户尽早迁移到MSXML6.0平台上。MSXML6.0拥有许多新功能，在性能以及安全性上也更胜一筹。此外，MSXML6.0更接近W3C规范，与&lt;BR&gt;System.XML的兼容性也更好。请参考&lt;A href="http://blogs.msdn.com/xmlteam/archive/2007/03/12/upgrading-to-msxml-6-0.aspx" mce_href="http://blogs.msdn.com/xmlteam/archive/2007/03/12/upgrading-to-msxml-6-0.aspx"&gt;Upgrading to MSXML6.0&lt;/A&gt;以了解MSXML4.0 和MSXML6.0之间的差异以及迁移时需要注意的事项。&lt;/P&gt;
&lt;P&gt;注意：如果你安装过MSXML4.0 SP3 BETA，请务必在安装MSXML4.0 SP3正式版之前先行卸载MSXML4.0 SP3 BETA。对于安装了MSXML4.0 SP3 BETA的Windows Vista和Windows Server 2008的用户，请阅读&lt;A href="http://download.microsoft.com/download/A/2/D/A2D8587D-0027-4217-9DAD-38AFDB0A177E/MSXML4%20SP3%20RTM%20Release%20Note.htm" mce_href="http://download.microsoft.com/download/A/2/D/A2D8587D-0027-4217-9DAD-38AFDB0A177E/MSXML4 SP3 RTM Release Note.htm"&gt;发行说明&lt;/A&gt;。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9462743" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/MSXML/default.aspx">MSXML</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/Data+Programmability/default.aspx">Data Programmability</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/XML/default.aspx">XML</category></item><item><title>现在可以下载MSXML4 SP3 Beta了</title><link>http://blogs.msdn.com/sqlcrd/archive/2008/11/29/download-msxml4-sp3-beta.aspx</link><pubDate>Sat, 29 Nov 2008 10:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9155474</guid><dc:creator>sqlcrdft</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqlcrd/comments/9155474.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqlcrd/commentrss.aspx?PostID=9155474</wfw:commentRss><description>&lt;P&gt;MSXML 团队很高兴地向大家宣布：现在可以下载试用&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=186e0a23-022d-49ac-a7af-a618269ede8f&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=186e0a23-022d-49ac-a7af-a618269ede8f&amp;amp;displaylang=en"&gt;MSXML 4.0 Service Pack 3 (SP3) Beta&lt;/A&gt;了！&lt;/P&gt;
&lt;P&gt;MSXML4 SP3 可以完全替代以前的MSXML4 SP1和MSXML4 SP2。MSXML4 SP3包含以下改进：&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;修复了许多安全缺陷&lt;o:p&gt;&lt;/o:p&gt;&lt;/LI&gt;
&lt;LI&gt;提高了软件的可靠性&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;MSXML 4 SP3适用于下列操作系统：&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows 2000 SP4&lt;/LI&gt;
&lt;LI&gt;Windows XP SP2&lt;/LI&gt;
&lt;LI&gt;Windows XP SP3&lt;/LI&gt;
&lt;LI&gt;Windows Server 2003 SP1&lt;/LI&gt;
&lt;LI&gt;Windows Server 2003 SP2&lt;/LI&gt;
&lt;LI&gt;Windows Vista RTM&lt;/LI&gt;
&lt;LI&gt;Windows Vista SP1&lt;/LI&gt;
&lt;LI&gt;Windows Server 2008&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;您的意见和建议对我们而言非常宝贵，因此请您：&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;下载安装&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=186e0a23-022d-49ac-a7af-a618269ede8f&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=186e0a23-022d-49ac-a7af-a618269ede8f&amp;amp;displaylang=en"&gt;MSXML 4.0 Service Pack 3 (SP3) Beta&lt;/A&gt;并确保您的软件能像以前一样正常运行。&lt;/LI&gt;
&lt;LI&gt;通过&lt;A href="http://connect.microsoft.com/dataplatform/feedback" target=_blank mce_href="http://connect.microsoft.com/dataplatform/feedback"&gt;Microsoft Connect&lt;/A&gt;把您的意见或发现的问题反馈给项目团队。请确保您已经注册过&lt;A href="http://connect.microsoft.com/dataplatform/feedback" target=_blank mce_href="http://connect.microsoft.com/dataplatform/feedback"&gt;Microsoft Connect&lt;/A&gt;，您可以在Data Platform Development下找到我们的项目MSXML 4.0 Service Pack 3 (Microsoft XML Core Services)。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;您的想法对我们至关重要！如果您有任何其他问题或建议，请在此博客上或&lt;A href="http://connect.microsoft.com/dataplatform/feedback" target=_blank mce_href="http://connect.microsoft.com/dataplatform/feedback"&gt;Microsoft Connect&lt;/A&gt;论坛上发表您的评论。&lt;/P&gt;
&lt;P&gt;MSXML中国研发团队&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9155474" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/MSXML/default.aspx">MSXML</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/Data+Programmability/default.aspx">Data Programmability</category><category domain="http://blogs.msdn.com/sqlcrd/archive/tags/XML/default.aspx">XML</category></item></channel></rss>