2005 Archives

First XML Podcast

| 2 Comments | 1 TrackBack |

Ok, this is gonna be the firrst podcast I want to subscribe to. It's "A Weekly XML Industry Podcast Hosted by Kurt Cagle and M. David Peterson". First real pilot segment can be found here. It's about OASIS Open Document and Microsoft's Open XML formats.

The podcast feed is here. Subscribed.

Ignore this post

| No Comments | No TrackBacks |

MSXML6 SDK documentation online

| 4 Comments | No TrackBacks |

MSXML6 SDK documentation is online now. In fact it's "multi-version" documentation, which covers MSXML3 through MSXML6.

So, what's new in MSXML6? Looks like it's security tightening, XML Schema support improvements and removals:

What's New in MSXML 6.0
MSXML 6.0 shipped with SQL Server 2005. It also shipped as a Web release. The following is a high-level summary of features that were introduced with MSXML 6.0.
  • Security

    A number of enhancements have been made to MSXML 6.0 to eliminate security threats. Additionally, some features that are insecure, such as DTDs and inline schemas, have been turned off by default. For more information, see MSXML Security Overview.
  • XDR Schema Support Removed

    XML Data Reduced (XDR) schema support has been removed. For more information, see Removal of XDR Schema Support.
  • Improvements in XSD Standards Compliance

    MSXML 6.0 has improved XSD schema standards compliance. For more information, see Improvements in XSD Standards Compliance.
  • Improvements in Schema Cache Behavior

    MSXML 6.0 has changed the behavior of the XSD schema cache. The new version is less ambiguous when there are name collisions. For more information, see Improvements in Schema Cache Behavior.
  • XML Digital Signature Removed

    MSXML 6.0 removed support for XML digital signatures. For more information, see XML Digital Signatures.
  • Other Changes in MSXML 6.0

    There are a number of other changes in MSXML 6.0. A few of the changes may require modifications to applications. For more information, see Changes in MSXML 6.0.

It's a pity support for the XML Digital Signature was removed. It was implemented for Office and most likely Microsoft doesn't want a burden of supporting it for all MSXML users. Another sad fact is an obvious fork of MSXML - MSXML5 is actually "MSXML 5.0 for Microsoft Office Applications", not available as a separate download. That was probably not a good idea.

The Raise of XSLT Compilation

| 3 Comments | 1 TrackBack | , ,

Slowly, gradually and with not much loud buzz both modern managed platforms - Java and .NET have switched to compiling XSLT implementations by default. First Java 5.0 made compiling Apache XSLTC processor a default transformer in JAXP 1.3 (instead of interpreting Apache XALAN). Then Microsoft released .NET 2.0 with new XSLT implementation - XslCompiledTransform replacing now obsolete XslTransform (guess what - interpreting one). XSLTC compiles XSLT into Java bytecode just like Java compiler, while XslCompiledTransform compiles XSLT into Microsoft Intermediate Language (MSIL) just like C# or VB compiler. The similarity is striking. Does it mean the era of interpreting XSLT processors is over and XSLT compilation is the future?

RSSBandit users who are interested in Russian localization were probably disapointed when found no Russian language support in the Nightcrawler release. Sorry about that, I was too late for the deadline. Good news is that RSS Bandit bugfix release with Russian localization is expected really soon - most likely before Christmas.

This is surprisingly cool news - Microsoft RSS Team decided to adopt this orange RSS feed icon used in Firefox to be used in IE7 too. The guys from Mozilla happily allowed the usage of the icon. Here is what Jane from Microsoft RSS team writes:

I’m excited to announce that we’re adopting the icon used in Firefox. John and Chris were very enthusiastic about allowing us (and anyone in the community) to use their icon. This isn’t the first time that we’ve worked with the Mozilla team to exchange ideas and encourage consistency between browsers, and we’re sure it won’t be the last.

We’ll be using the icon in the IE7 command bar whenever a page has a feed associated with it, and we’ll also use it in other places in the browser whenever we need a visual to represent RSS and feeds. Look for more details on the look and feel of IE7 when we post the public pre-release build next year.

By the way, this is sort of a milestone for the Mvp.Xml project - Microsoft has released Guidance Automation Toolkit (GAT) and Guidance Automation Extensions (GAX) for Visual Studio 2005 which uses and includes recently released Mvp.Xml library v2.0, particularly our XInclude implementation.

This is the first Microsoft product using XInclude via Mvp.Xml library. Hope not the last one, way to go guys. I truly hope to see one day Microsoft Biztalk release including our EXSLT implementation.

As a matter of interest - Mvp.Xml project is an open-source project hosted at SourceForge, led by Microsoft MVPs and supplementing XML processing functionality in .NET. We currently provide .NET implementations of EXSLT, XML Base, XInclude, XPointer as well as a unique set of utility classes and tools making XML programming in .NET platform easier, more productive and effective. Microsoft has licensed the Mvp.Xml project and has rights to use and distribute our code base.

In the latest article "Schema-Aware Queries and Stylesheets" Michael Kay explaines how useful XML Schema-awareness is for XQuery queries and XSLT stylesheets.

Zvon's XSLT 2.0 tutorial

| No Comments | No TrackBacks | ,

Miloslav Nic has announced the first snapshot of XSLT 2.0 tutorial at Zvon. Good stuff. I remember 5 year ago I was learning XSLT 1.0 using Zvon's tutorial...

Dare thinks I'm making fruitless noise asking people if they need XSLT 2.0:

I'm not sure how an informal survey in a blog would convince Microsoft one way or the other about implementing a technology. A business case to convince a product team to do something usually involves showing them that they will lose or gain significant marketshare or revenue by making a technology choice. A handful of XML geeks who want to see the latest and greatest XML specs implemented by Microsoft does not a business case make.
Well Dare you underestimate the power of geeks and blogs :) Of course I'm not making a busines case. I'm looking for real world XSLT2 business cases (and not without results btw) trying to help Microsoft XML Team. I can't disclose more, but believe me guys we really can help now with such obviousboring stuff like real world scenarios for XSLT2.

Then he comes with some good advice:

My advice to Oleg, if you want to see XSLT 2.0 in the .NET Framework then gather some like minded souls and build it yourself. Efforts like the MVP.XML library for the .NET Framework shows that there are a bunch of talented developers building cool enhancements to the basic XML story Microsoft provides in the .NET Framework.
First of all as one of developers who runs Mvp.Xml project I should say that "a bunch" is a big overstatement here. Unfortunately only a really handful people are willing/have a chance to contribute to the project. Actually now, 3 years after I switched to .NET I'm pretty much pessimistic about open-source .NET projects altogether. There is something with people's attitude, it's different from that one in Java or linux world. And so I'm also kinda pessimistic about community developed .NET XSLT2 as I know the field. But that's of course my backup plan in any case.

Also I found interesting some comments made to Dare's post. Take a look.

And my personal take is similar to the one expressed by Mike Champion: Microsoft will implement XSLT2 anyway. The question is only when.

I run into this article "Harnessing the BackPack API" by Michael K. Campbell in the new and very cool "XML 4 Fun" column at MSDN. The article is otherwise brilliant and really fun, but XML processing code samples are not so good. It's actually a great collection of XML processing antipatterns. Let's see.

Moving along business cases Microsoft seeks to implement XSLT 2.0 I'm trying to gather some opinion statistics amongs developers working with XML and XSLT. So I'm holding this survey at the XML Lab site:

Would you like to have XSLT 2.0 implementation in the .NET Framework?

The possible answers are:

  • Yes, I need XSLT 2.0
  • Yes, that would be nice to have
  • No, continue improving XSLT 1.0 impl instead
  • No, XSLT 1.0 is enough for me
Vote now and get a chance to win the "XSLT 2.0" book by Mike Kay!

When the survey ends (probably in a month or so) one lucky survey taker from whatever part of the world choosen randomly will get the book.

Note: you have to be registered on the Xml Lab site to vote. Sorry, but I need some simple way to identify the winner. Registration is simple and public - no email verification or something like, just fill in your name, password and email, get registered and then vote.

Take your chance to influence Microsoft's decision on XSLT 2.0 and win XSLT 2.0 book!

Microsoft's Exchange 2007 hosting software package is the main tool of Exchange email outsourcing as many companies choose to use, since Microsoft Exchange requires you to manage or pay for a Microsoft Exchange server and sometimes outsourcing is the cheaper choice.

I'm glad to announce first release of the eXml - extended ASP.NET Xml Web Server Control.

eXml logoeXml is a free open-source ASP.NET 2.0 Web server control extending and improving standard ASP.NET XML Web server control. eXml Web server control uses new .NET 2.0 XSLT processor - XslCompiledTransform class to perform XSL transformations thus providing in average 400% performance boost and improved standard compliance. Additionally eXml Web server control provides built-in support for 70+ EXSLT extension functions, XML Inclusions (XInclude) 1.0, friendly XML rendering, <?xml-stylesheet?> XML processng instruction, embedded stylesheets and conditional whitespace stripping.

eXml Download | eXml Documentaion | eXml Forum

Enjoy!

With the right web site design from a knowledgeable web designer you may notice a significant difference in your web page design that could help usability and you web site design could impress some users as well.

A business case for XSLT 2.0?

| 13 Comments | 10 TrackBacks | ,

If you are using XSLT and you think that XSLT 2.0 would provide you some real benefits, please drop a line of comment with a short explanation pleeeease. I'm collecting some arguments for XSLT 2.0, some real world scenarios that are hard with XSLT 1.0, some business cases when XSLT 2.0 would provide an additional value. That's really important if we want to have more than a single XSLT 2.0 implementation...

PS. Of course I've read Kurt's "The Business Case for XSLT 2.0 " already.

Update: I failed to stress it enough that it's not me who needs such kind of arguments. We have sort of unique chance to persuade one of software giants (guess which one) to support XSLT 2.0 now.

When it comes to business email many growing companies need to keep in mind that their business email services are a huge part of the communication in the business, and the right business email can help to run a tight ship.

nxslt v2.0 released

| No Comments | 3 TrackBacks | , ,

nxslt v2.0 (aka nxslt2) is available for download. This is first nxslt release for .NET 2.0.

nxslt is a free feature-rich command line utility that allows to perform XSL Transformations (XSLT) using .NET Framework 2.0 XSLT implementation - System.Xml.Xsl.XslCompiledTransform class. nxslt is compatible with Microsoft's MSXSL.EXE tool and additionally supports XInclude 1.0, 70+ EXSLT and EXSLT.NET extension functions, multioutput, embedded stylesheets, custom XmlResolvers and custom extension functions, pretty printing etc etc etc.

nxslt2 documentation | Download nxslt2

Support NDoc project!

| 6 Comments | 2 TrackBacks |

I've been asking for help on getting NDoc working with .NET 2.0 recently. I was lucky enough and Kevin Downs, the developer of NDoc sent me an alpha version of the next NDoc release that was good enough for generating Mvp.Xml API documentation. And that unexpected problem made me realize that NDoc reached such level that we all take this tool as granted, like part of .NET SDK or Visual Studio. While NDoc is actually a free open-source tool developed by enthusiasts! NDoc is so awesome and pervasive that Microsoft even doesn't bother to provide any alternative solutions. Java has javadoc and doclets, while Microsoft provides no tool for generating code documentation and indeed - why, don't you have NDoc? That's an interesting open-source phenomena.

But the cruel fact is that developing such a tool as NDoc for no money is a tough challenge. In .NET 2.0 Microsoft introduced huge amount of changes in both CLR/BCL and SDK docs NDoc has to adapt to, while NDoc project is very low on contributors and donations and Kevin Downs, the guy who writes NDoc has been recovering from some major health problems recently. That actually looked like NDoc project is dead, but it's not! Kevin is working on the next version and it already works as you can see here.

But my point is that we absolutely have to support NDoc project. NDoc saved Microsoft lots of money, while Kevin Downs even has no MSDN subscription and Visual Studio 2005! What a shame... Come on, Microsoft, show some love to NDoc and .NET community! And NDoc users, especially the ones using NDoc in commercial stuff - please support NDoc, donate some money to the project or directly to Kevin Downs.

W3C: CAPTCHA considered harmful

| No Comments | 1 TrackBack |

W3C warns that using CAPTCHA on the Web is actually bad idea as it poses problems for those who are blind, have low vision or have a learning disability such as dyslexia. That makes sense.

2005-11-23: The WAI Protocols and Formats Working Group has released Inaccessibility of CAPTCHA: Alternatives to Visual Turing Tests on the Web as a Working Group Note. Requests for visual verification of a bitmapped image pose problems for those who are blind, have low vision or have a learning disability such as dyslexia. The note examines ways for systems to test for human users while preserving access for users with disabilities. Read about the Web Accessibility Initiative.

Michael Rys asks "What do you want to see regarding XML support in the next version of SQL Server?" Don't miss a chance to suggest your favorite feature.

Mvp.Xml library v2.0 released

| No Comments | 6 TrackBacks | ,

I'm glad to announce release 2.0 of the Mvp.Xml library. This is first Mvp.Xml release for .NET 2.0. Download it here.

Mvp.Xml project is developed by Microsoft MVPs in XML technologies and XML Web Services worldwide. It is aimed at supplementing .NET framework XML processing functionality available through the System.Xml namespace and related namespaces such as System.Web.Services. Mvp.Xml project currently provides .NET implementations of EXSLT, XML Base, XInclude, XPointer as well as a unique set of utility classes such as XmlSerializerCache, IndexingXPathNavigator, SubtreeXPathNavigator, XPathNavigatorIterator, XslReader, MpXslTransform and tools making XML programming in .NET platform easier, more productive and effective.

Joining FXSL project

| 1 Comment | No TrackBacks | ,

So Dimitre Novatchev invited me and I joined the FXSL (Functional Programming Library for XSLT) project.

The FXSL functional programming library for XSLT provides XSLT programmers with a powerful reusable set of functions and a way to implement higher-order functions and use functions as first class objects in XSLT.
I do think functional programming matters, that's where we are going and that FXSL rocks. I'm not sure what will be my role in the project, but I hope to be helpful. But first I have to refresh my functional programming skills with wonderful "Haskell: The Craft of Functional Programming" book by Simon Thompson.

Ndoc for .NET 2.0 help anyone?

| 3 Comments | No TrackBacks |

I'm stuck one step before releasing Mvp.Xml library v2.0 for .NET 2.0. I can't generate API documentation, because NDoc doesn't support .NET 2.0 yet :( Apparently NDoc wiki contains instructions how to get it working with .NET 2.0, but the wiki seems to be down and the google cache is empty... Anybody knows how to hack NDoc?

MSN joins Google, Yahoo and others supporting the TopCoder community - a major league for programming competitions. MSN is sponsoring 8 TopCoder matches and is giving away $40,000 in cash prizes to the TopCoder Community. MSN is also hiring best topcoders.

That's cool. And TopCoder is a great place to exercise your programming and problem solving skills competing online with geeks like you. Try it out.

Mike Kay keeps teaching us XQuery. New installment of his XQuery tutorials series sponsored by the Stylus Studio, is called "Blooming FLWOR - An Introduction to the XQuery FLWOR Expression" and covers XQuery FLWOR expressions, "the workhorse of the XQuery language".

Breaking changes in MSXML6

| 8 Comments | 1 TrackBack |

Just released Microsoft Core XML Services (MSXML) 6.0 introduces some security-related breaking changes in XML and XSLT processing, but MSXML6 SDK documentation isn't released yet (expected next week) and can be found nowhere on the net, so you might have a hard time wondering why basic things stop working after upgrading to MSXML6. Here is a bit of information that might be helpful.

XLinq news

| No Comments | No TrackBacks | ,

After initial announcement XLinq hubbub seems to be more and more quiet - users are busy moving to .NET 2.0 and Microsoft is working on the next preview version. Anyway, there are some news:

  • Microsoft released "C# LINQ Tech Preview Update for Visual Studio 2005 RTM Release":
    This is an updated version of the LINQ Technical Preview unveiled at PDC 2005. It includes samples, whitepapers, hands-on labs and compiler support to create LINQ-enabled applications using the RTM release of Visual Studio 2005 or Visual C# 2005 Express Edition.
  • Similar update for VB is available too. Note that LINQ homepage is obsolete at this point
  • I've updated at bit XLinq.Net portal with a list of XLinq bloggers, XLinq news from arround the blogosphere, list of XLinq-related videos from the PDC
I've been told that the next XLinq wave might be expected in December. I can't wait it.

That's a big milestone in a 6-years-going-so-far design-by-committee experiment: XSLT 2.0, XQuery 1.0 and XPath 2.0 are finally W3C Candidate Recommendations. That means that W3C now officially calls for implementations (which shows another weirdness of the design-by-committee process as XQuery alone has about 40 implementations already as per Ken North). CR phase will last at least till 28 February 2006, that means late 2006 is probably the timeframe for the XSLT 2.0, XQuery 1.0 and XPath 2.0 Recommendations.

There is a known problem with new XSLT processor in just released Microsoft .NET 2.0 - XslCompiledTransform class doesn't support pull mode XSLT - outputting XSLT result in XmlReader form as obsolete XslTransform class did. I'm happy to announce that the problem is solved now. Sergey Dubinets from the Microsoft XML Team has developed XslReader implementation which allows to read XSLT output via XmlReader in a very efficient way - i.e. without full output buffering. It's concurrent writer-reader bridge, which runs XSLT in another thread and lets it to produce another output portion whenever reader wants to read more.

And Sergey kindly donated his code to the Mvp.Xml project, so it will be part of the Common module of Mvp.Xml library v2.0, which is going to be released really really really really soon. Kudos to Sergey! Stay tuned.

I can't refrain myself from linking to this wonderful "Does Visual Studio Rot the Mind?" paper by Charles Petzold. Sorry. That's gonna be another good source of citations.

Norman Walsh:

In any event, after much procedural wrangling, the W3C has finally chartered a new Working Group in the XML Activity to address the problem of a standard XML pipeline language, the XML Processing Model Working Group. And they persuaded me to chair it, for better or worse. :-) The charter lays out the scope, goals, and deliverables pretty well, so I won't bother recapitulating them here.
That should be useful standard.

I'm migrating lots of code to the .NET 2.0 nowadays and wanted to warn my readers about one particularly nasty migration issue. When moving from Hashtable to Dictionary<K, V> look carefully at the indexer usage - there is a runtime breaking change here. With Hashtable when you do myhashtable[mykey] and myhashtable doesn't contain mykey you just get null. But Dictionary<K, V> in this case throws KeyNotFoundException! This is of course not due to the evil will of Microsoft, but because unlike Hashtable, Dictionary<K, V> can store not only reference but value types too, so null is not an option anymore. Read a discussion at Brad Abrams's blog for more info about how this shit happened.

nxslt 1.6.4 released

| No Comments | No TrackBacks | , ,

Another minor nxslt release is available - v1.6.4. This version adds support for the "extension-element-prefixes" attribute and fixes a glitch in transformation timings reporting.

What's the problem with "extension-element-prefixes" attribute? When using <exsl:document> extension element to produce multiple outputs some EXSLT-aware XSLT tools (like 4XSLT) rightly require "exsl" prefix to be registered in the "extension-element-prefixes" attribute. The problem was that .NET's XslTransform class while not supporting extension elements at all, throws an exception once encountering "extension-element-prefixes" attribute. So for running the same stylesheet with nxslt one had to remove "extension-element-prefixes" attribute, and with other tools - add it. Bad bad bad. So in nxslt 1.6.4 I fixed the issue by hiding "extension-element-prefixes" attribute from XslTransform class, so now you can use it in you stylesheets and enjoy better portability.

As a matter of interest, new .NET 2.0 XSLT processor - XslCompiledTransform class, while still not supporting extension elements, at least ignores "extension-element-prefixes" attribute. Good.

PDC 2005 videos online

| 1 Comment | No TrackBacks | , ,

Microsoft put hundreds of hours PDC 2005 videos online at http://microsoft.sitestream.com/PDC05. Here is a list of XML-related and others interesting presentations worthwhile watching IMHO.

Opera 9.0 Preview 1 supports XSLT

| No Comments | No TrackBacks | ,

Opera 9.0 Preview 1 released October 20 finally adds support for XSLT and XPath to the Opera browser. Finally they are awake. Good move, but it might be too late for the Opera.

[Via <XSLT:Blog/>]

"Share customer's pain" video

| No Comments | No TrackBacks |

I've seen this video at the MVP Summit. Fun, but you know, sometimes I wish something like that was actually deployed. Hey, wait, I'm a developer too... Well, all actions have consequences after all.

Oh, and don't forget "Bill Gates goes to college" too.

What I can't find on the net is a very fun picture of Erik Meijer "unveiling XML literals in VB9 to the world". That's probably still NDA photo :)

Interesting - during last month both leading XML hardware makers - DataPower and Sarvega were acquired - former by IBM and latter by Intel. Both sites have almost similar "We are acquired!" announcements.

I'm disappointed in ASP.NET once again. I was building some ASP.NET 2.0 application with XSLT processing involved, run into XSLT bugs and oh horror realized the ASP.NET 2.0's asp:xml server control still uses old slow as hell buggy obsoleted deprecated XslTransform class! That more than sucks. That's no use. I just stop using asp:xml control and won't recommend to anybody using it. I just can't understand how come one Microsoft group spends years to build a better tool and then another Microsoft group, which uses the tool, just ignores it and keeps using old obsolete one. Something is wrong here.

Ward Cunningham leaves Microsoft to work for The Eclipse Foundation. Wow.

Visual Haskell

| 1 Comment | 2 TrackBacks |

I was always sure that's what Haskell desperately needs: Visual Haskell:

Visual Haskell is a complete development environment for Haskell software, based on Microsoft's Visual Studio platform. Visual Haskell integrates with the Visual Studio editor to provide interactive features to aid Haskell development, and it enables the construction of projects consisting of multiple Haskell modules, using the Cabal building/packaging infrastructure.
It's still version 0.0 though.

Don Box said "Scheme Is Love", but he forgot to mention that Scheme is actually Love to Lots of Irritating, Silly Parentheses. Haskell my friends is the Real Love.

[Via Lambda the Ultimate]

XML Catalogs v1.1 is an OASIS Standard

| 3 Comments | No TrackBacks |

Norman Walsh:

XML Catalogs V1.1 is an OASIS Standard.

I'm also happy to report that my implementation of XML Catalog support, currently part of the xml-commons project at Apache, will ship as a standard part of the next Java™ release.

You've got a standard. You've got an implementation. What are you waiting for? I've been using catalogs for at least ten years, and XML Catalogs for at least five, so really, you can start deploying them today.

If you have tried to create or use code snippets in any of XML languages in Visual Studio 2005 you probably stumbled across the issue of using shortcuts. In C# or VB you just type code snippet's shortcut name and press Tab, it just works. In XML it doesn't :(. I've spent couple of hours reflecting into XML editor to see why it doesn't work (that was an interesting waste of time anyway) and when I just found out how it works I also found out (via Aaron Skonnard) it's documented at MSDN. RTFM, RTFM, RTFM.

Unfortunately inserting code snippets by shortcut name in XML editor of Visual Studio 2005 isn't as smooth as in C# or VB. Two more keystrokes: < and Esc. So press <, Esc, then shortcut and then Tab. That sucks, but I can live with it.

In .NET 2.0 ValidationType.Auto value is made obsolete. What's worse - it doesn't work for XmlReaders created via XmlReader.Create() factory method. But how do you validate against either DTD and/or schema, i.e. against DTD if document has a DOCTYPE and/or schema if any is applicable? The answer is: you can chain two XmlReaders, one set up for performing DTD validation and second - schema validation.

Microsoft XML Team has published an article "Migrating to XslCompiledTransform" by my pals Sergey Dubinets and Anton Lapunov. It explains how to migrate to the new XSLT 1.0 processor in .NET 2.0 - XslCompiledTransform class. XslCompiledTransform is a revolutionary XSLT processor - it's gonna be the first truly compiled mainstream XSLT processor. It's fast and conformant just as MSXML4.

The article covers: how XslCompiledTransform works, differences in API, in behaviour, new functionality, faq, howto.

The article is meant to be updated on a regular basis. Once a new migration issue is discovered the article will be updated with a solution. So bookmark it. And the article is not complete yet, some parts are still to be done. Keep up your great work, guys.

nxslt 1.6.1 is available for download at the xmllab.net. This is bug fix only release. Marc Stober reported that when running into XInclude error he got MissingManifestResourceException. Apparently XInclude string resources weren't compiled into the nxslt.exe. This release fixes this bug. Thanks for reporting, Marc!

nxslt is free feature-rich command line .NET XSLT utility, supporting EXSLT.NET, XInclude, multiple output etc etc etc.

No new features in this release. Instead I'm working on nxslt2 - nxslt for .NET 2.0.

XML is too hard for Google

| No Comments | No TrackBacks | ,

I've been looking for a blog search service and been naturally inclined to use Google blog search, but I was quite disappointed to find out that feeds produced by Google are malformed. Trivial lame mess with encoding, hence no use by XML tools. Apparently XML is too hard for Google. Oh well, at least Technorati sucks less.

Aftermatch thoughts on XLinq

| 1 Comment | No TrackBacks | ,

I finally got some time (18 hours in a plane to Seattle :) to settle down my mind about XLinq. Erik Meijer's excellent article, which explains XLinq from functional programming point of view made me changing my mind on some issues I wrote earlier, some hands on experience and some comments from smart readers helped me to see a bigger picture.

What XLinq misses

| 3 Comments | No TrackBacks | ,

XLinq is at early stages, but what else would I like to see in XLinq? Here are my crazy wishes.

  • Shortcuts. In C# I need book["title"] instead of book.Element("title").
  • last() and position()
  • Literal XML just like in C-omega, not "kinda pseudo XML literals" like in VB9.
  • Fine control over serialization just like in XQuery
  • XPath support. I know it anyway and many do, so why to learn any new way to select nodes in XML tree? XPath is small, concise and intuitive. I want to write less code, so XPath is the way to go.

On XML expanded names in XLinq

| 2 Comments | No TrackBacks | ,

Dave Remy writes about XName and expanded names in XLinq and he wants feedback. Here we go.

Nodes in XLinq overload ToString() method to provide pretty-printed outer XML representation. At the same time nodes contain (familiar for MSXML users and new for .NET users) readonly Xml property, which returns raw (not pretty-printed) outer XML representation. At also at the same time casting element to a string returns element's value (string value with no angle brackets). There are also WriteTo() methods and Save() methods to complete the picture. I believe that's unnecessary confusing. Not only cast to string and ToString() do completely different things, but also there are many different ways of serializing nodes.

In XLinq XML Tree is exposed in a heterogenos way, that is nodes in a tree don't belong to a common type. Traditionally XML tree models are homogeneous, e.g. in DOM every node belongs to a specific kind of XmlNode class. But in XLinq attributes and text nodes aren't actually nodes. Instead attributes are just name-value properties of element nodes and text nodes while being internally normal nodes, never get exposed as such, but only as values they contain, so in effect what you can get out of XLinq tree is XNode (XElement etc), XAttribute and String values (which you can cast to appropriate CLR types). Apparently the goal was to simplify API and data model comprehension for users.

Erik Meijer:

XLinq: XML Programming Refactored (The Return Of The Monoids)

I just posted my XML 2005 submission about XLinq on my homepage.
It describes the XLinq API in somewhat detail, and informally explains the relationship between LINQ and monads.
That's really good one.

[Via Lambda the Ultimate]

MVP Summit

| 1 Comment | 1 TrackBack |

I'll be at the Microsoft MVP Summit in Redmond next week. I'm Microsoft MVP for second year, but that's going to be my first MVP Summit. That should be fun.

XLinq is new and hot technology everybody seems to be happy with. I'm going to post a different review series - not what I like, but what I dislike and want to be fixed in XLinq. Sorry in advance for bitter words, but it's better when your friend says them.

XML functional construction

XLinq.Net

| 3 Comments | No TrackBacks | ,

Being excited about XLinq I couldn't stop myself from grabbing XLinq.NET domain name. I'm going to try to build a community portal for the XLinq technology. The goal is basically to push XLinq by growing a community around it. There is definitely a need for Microsoft-independent easily accessible place where developers can find XLinq resources or share their experience.
Well, that's my vision at the moment. There is not much content at the site currently, just basic info and links. If you've got any ideas/suggestions about what would like to find at XLinq.Net, please drop me a line.

Hmm, according to Stan Kitsis there is at least 6 ways to associate an XML Schema with an XML document in Visual Studio 2005:

1. Schemas Property on your XML document
2. Inline inside your XML document
3. xsi:schemaLocation or xsi:noNamespaceSchemaLocation attributes in your XML document
4. Open Document Window.
5. Anywhere in your current Project
6. In the Schema Cache Directory or from a Schema Catalog file.
Is it actually sane? Now I can easily imagine a situation when I cannot be sure against which XML Schema file I'm validating my documents. Lots of flexibility, too much or just right? What is your take?

Microsoft's paper about "the experiences and the challenges in implementing XQuery in Microsoft's SQL Server 2005" is available here.

[Via Michael Rys]

xml:id went W3C Recommendation

| No Comments | No TrackBacks |

Little xml:id spec finally got W3C Recommendation status. I believe XML programming would be better be xml:id done in 1998, not in 2005. Anyway. xml:id provides a mechanism for annotating elements with unique identifiers. You just set xml:id attribute for an element and you done, no need for DTD, XML Schema or anything else:

<catalog>
    <book xml:id="b101">...</book>
    <book xml:id="b102">...</book>
    <book xml:id="b102">...</book>
</catalog>
Having elements annotated with IDs you can query them (usually very fast and efficiently) by ID values using various XML API specific means - GetELementById() in DOM, id() function in XPath/XSLT/XQuery, XPathNavigator.MoveToId() etc.

Upgraded to MT 3.2

| No Comments | No TrackBacks |

This is a repetitive pattern: once in a 6 months I get tired of comment and trackback spam and go upgrade my blog engine or install some antispam plugins.This time is not different. I've been massively attacked by spam trackbacks so I had to upgrade to MovableType 3.2. Not without a troubles though. Somehow it just didn't work after upgrade, but happily I found a solution at the MT support forum. Now all comments/trackbacks I get are subject to junk filtering and manual approvement.

I chose this strategy: each comment/trackback goes into unapproved queue and never makes it into a live page (except for authenticated comments). I get mail notifications for each comment/trackback and if I see not a spam one I approve it in just one click, spam ones I don't touch. Once in a week or so I go to blog admin and junk/delete all unapproved stuff again in a couple of clicks. Not that I love it, but still I can live with it.

We've heard about XML penetration into C#, Java and SQL. Now it seems like 45-years old programming language, 75% of worlds's business apps is written in is ready to adopt XML. I'm talking about Cobol, yeah baby! In the "XML and the New COBOL" article at webservicessummit.com Barry Tauber explains proposed forthcoming standard that will add native XML support to the Cobol language. IBM, HP and MicroFocus are behind this move, so chances are good.

And btw I'm currently working with Fujitsu NetCobol, which is .NET based Cobol and as such has full access to the .NET XML processing facilities. Not bad approach too!

Little Catherine gets first chair

| No Comments | No TrackBacks |



First chair for Catherine. Too big one, but not for long!

C# 3.0 chat with C# team

| 1 Comment | 1 TrackBack | , ,

That's an interesting chat:

C# 3.0 Language Enhancements
Description: Can't attend PDC but still want to talk to the C# team? This chat is your chance! Join the C# team to discuss the newly announced C# 3.0 features like extension methods, lambda expressions, type inference, anonymous types and the .NET Language Integrated Query Framework. You've been hearing rumblings about this for a while, now we finally talk in depth about the future of the C# language.

Add to Calendar
September 22, 2005
1:00 - 2:00 P.M. Pacific time
Additional Time Zones

Little known Visual Studio facts

| 2 Comments | No TrackBacks |

Here are some amazing facts about Microsoft Visual Studio:

  • Visual Studio 2005 will have 2700 commands that come from Microsoft alone, 800 of them - shared ones
  • Visual Studio is well factored into 250 basic packages
  • Visual Studio is the base for 36 SKU's
  • Visual Studio 2003 shipped with 358 keyboard shortcuts
  • 410 commands shipped in Visual Studio 2003 have no names
  • Visual Studio client teams are using 11 different tree controls, 9 different wizard frameworks, 15 custom tooltip controls
  • Visual Studio and Office have a different application font than Windows
  • Visual Studio has nearly 6000 images
  • In Visual Studio 2005 2900 of these images will be upgraded from 16 color to 32bit color
[From "Visual Studio 2005 UI Guidelines", available with VSIP SDKs].

XQuery in 10 min

| No Comments | No TrackBacks | ,

Stylus Studio Team has published "Learn XQuery in 10 minutes" article by Mike Kay. Smells like Stylus Studio commercial, but anyway good intro to XQuery.

I've seen some people talking and some leaving comments that newly introduced XPathNavigator.SelectSingleNode() method is actually a wrapper around XPathNavigator.Select and so it provides no performance benefits. This is both true and false. It's true that you won't get any performance boost from moving to XPathNavigator.SelectSingleNode() method, because it's really just a wrapper around XPathNavigator.Select() returning first selected node. But that's also false that there is something wrong with it. No performance boost because XPathNavigator.Select() is efficient itself and never selects all nodes, returning instead XPathNodeIterator, which actually selects nodes once its MoveNext() method is called. So there is no perf difference, both are very fast and XPathNavigator.SelectSingleNode() method is mostly just about code elegance and convenience for a coder.

It's surprisingly tricky to get BinHex encoded data out of XmlDocument tree in .NET 1.X. XmlConvert class, which apparently has to support such conversions has a method FromBinHexString(), but weird - it only public for .NET Compact Framework. It's internal for regular .NET Framework. It's obvious that lots of .NET functionality isn't supported in .NET Compact Framework, but this is first time I see anything that .NET CF implements and .NET doesn't. Hmm, and in the forthcoming .NET 2.0 it's the same, do I miss something? Anyway, here is a workaround.

New new dragon book

| 2 Comments | No TrackBacks | ,

Great news for compiler geeks - new edition of the famous dragon book is to be published November 15. Updated and revised version, now it's called "21st Century Compilers". So far there were "old dragon book" (aka green dragon book, "Principles of Compiler Design", 1977) and "new dragon book" (red dragon book, "Compilers: Principles, Techniques and Tools", 1986). The color of the new new dragon book is still in question. Blue?

I guess what will be on the book cover?

topcoder.com

| 2 Comments | No TrackBacks |

I discovered TopCoder.com this weekend and now I know how I'm gonna spend my spare time next decade...

XML in SQL Server 2005 news

| No Comments | No TrackBacks | ,

Couple of news bits you want to check out if you are interested in XML and SQL Server 2005:

  1. Michael Rys talks about XML in the upcoming SQL Server 2005 on Channel9 43 min video.
  2. 15seconds.com published an article "SQL Server 2005 XQuery and XML-DML" by Alex Homer. Part 1, Part 2.

Jeni Tennison has announced an utility for unit-testing XSLT stylesheets:

I've just developed a set of stylesheets that are designed to support unit testing of XSLT stylesheets. You embed tests in the stylesheet and can run a script (or configure your editing environment) to extract and run them and create an HTML report on the result. Further details and the download is available from:

http://www.jenitennison.com/xslt/utilities/unit-testing/
XSLT 2.0 engine (Saxon 8.4B or later) is required.

Also she announced that her long-awaited "Beginning XSLT 2.0: From Novice to Professional" book is finally out:


Highly recommended for XSLT beginners.

Her is what James Gosling, Java's father said in a recent interview:

Direct language support for XML has been a debate for some time. All these things at an abstract level kind of sound like the thing to do.

When it comes down to the details, one of the problems ends up being that using Java today you actually get pretty good access to XML.

And really what it would end up being is sort of syntactic sugar that makes certain constructions simpler, but can you come up with something that actually makes people's life better by enough that it's worth adding that baggage?

It's one of these things that these days is a community debate.
That's pretty surprising. And even disappointing to some. I personally consider my Java XML programming experience as a horror. Well, then I was mostly writing XML processing apps in Java when DOM and SAX were the only ways and so whenever possible I escaped to XPath and XSLT. Now reading these James Gosling's words I'm happy I switched to .NET.

Michael Kay has released Saxon XSLT and XQuery processor v8.5. This new release implements some very interesting optimizations (available only in commercial version though) and new abilities, one of which is probably worth to implement in EXSLT.NET module.

Colin Paul Adams has announced Gobo Eiffel XSLT - free XSLT 2.0 processor written in Eiffel. Gexslt is intended to conform to a Basic-level XSLT 2.0 Processor and currently is still under development. Win32 compiled version can be downloaded at http://www.gobosoft.com/download/gobo34.zip.

XML Enhances Java

| 3 Comments | 3 TrackBacks |

If you thought it's only Microsoft who's working on integrating XML into the core of programming languages, look at what IBM does for Java. This is a manstream trend now. XML Enhancements for Java are an emerging technology from IBM, which provides a set of language extensions that facilitate XML processing in Java.

This is a real hidden gem in .NET 2.0 everybody (including me) have pretty much overlooked. XmlSchemaValidator class from the System.Xml.Schema namespace is a push-based W3C XML Schema validatation engine. Push-based means different processing model - an opposite for pull-based one. Think about how you work with XmlWriter (push) and XmlReader (pull). With (obsolete now) .NET 1.X's XmlValidatingReader and .NET 2.0's XmlReader with validation enabled you read XML to make sure it's valid. With XmlSchemaValidator you do the opposite - you ask it to validate XML bits using ValidateElement, ValidateAttribute, ValidateText etc methods.

Erik Saltwell explains what this XslCompiledTransform.OutputSettings property is and why it exists. That's really fresh, clean and powerful design once you get it. I didn't first.

If you thought that some smell of XML in C-omega was amazing, believe me that's nothing. Major XML and .NET integration stories are still ahead of us. Something big is cooking inside the house. Look at these news.

I've just finished moving EXSLT.NET code into the Mvp.Xml project infrastructure. Now on EXSLT.NET is a module of the Mvp.Xml library, its namespace is Mvp.Xml.Exslt, its license is CPL and its home page is http://mvp-xml.sourceforge.net/exslt. That's pretty much all changes. Go download Mvp.Xml library v1.1, now including EXSLT.NET module in addition to Common, XInclude.NET and XPointer.NET modules.

My next move will be converting EXSLT.NET module to .NET 2.0. That should be easy.

XPathReader v1.1 is available for download.

XPathReader is originally developed inside Microsoft and then dropped out as open-source implementation of a pull-based XML parser that supports XPath queries while parsing the XML document. It's basically XmlReader that supports streaming subset of XPath 1.0. Read "The Best of Both Worlds: Combining XPath with the XmlReader" article for more info about XPathReader.

New in this release:

  • Support for look-ahead in predicates such as "foo[bar='baz']". This is done via internal caching using XmlBookmarkReader. This behaviour can be turned off using XPathReader.LookAheadInPredicates property.
  • XPathReader.dll is now has a strong name, so it can be called from strongly named assemblies
  • AllowPartiallyTrustedCallers attribute is applied, so XPathReader.dll can be called by partially trusted callers (e.g. in ASP.NET)
  • A nasty bug with != in predicates is fixed

In .NET 2.0 XPathNavigator finally has SelectSingleNode() method! MSXML and XmlDocument (XmlNode actually) have it forever and it's so widely used because it's soooo handy. Obviously despite its name, XPathNavigator.SelectSingleNode() returns not a node, but node equivalent in XPathNavigator's data model - XPathNavigator. And this method is even better than XmlNode's one, because it has overloads accepting compiled XPathExpression, so when running within a loop you don't have to pay XPath compilation price on each iteration. That's another reason to switch completely to XPathNavigator API when processing XML in .NET 2.0.

nxslt 1.6 and nxslt2 Beta1 are available for download. For those not familiar with nxslt: nxslt is free feature-rich .NET XSLT Command Line Utility.

nxslt 1.6 is the next version for the .NET 1.X Frameworks. New features include optionality for source XML or stylesheet, pretty printing, ASCII only escaped output and support for "omit-xml-declaration" attribute of the exsl:document extension element.

nxslt2 Beta1 is the first beta version of the next major nxslt release. nxslt2 uses new XSLT 1.0 processor in the .NET 2.0 Framework - System.Xml.Xsl.XslCompiledTransform class. Hence it requires .NET 2.0 Beta2 (which you can download here) or higher. As a first beta version, nxslt2 Beta1 is quite limited - no support for XInclude, EXSLT, multiple output and embedded stylesheets. As far as I port EXSLT.NET and XInclude.NET to .NET 2.0 I'll update nxslt2.

New Microsoft XSLT Processor (XslCompiledTransform) is a great stuff. Compiles XSLT to MSIL and runs as fast as MSXML4. I'll be writing about it a lot soon. With nxslt2 you can give it a whirl.

New management, new project

| 1 Comment | No TrackBacks |

The company I'm working latest 5 years for, Multiconn Technolgies, has melted finally down. 4 developers left including myself have been picked up by a parent company, BluePhoenix Solutions and so now on I'm working for a company with funny name Outlook & BluePhoenix. I will be woking on a product for converting old rusty IDMS mainframe applications to Windows 2003/Oracle/Cobol.NET + Web Services as an added value. Not bad, it could be worse. My new program manager gave my this book to read while the project slowly starts rolling:

Writing Solid Code: Microsoft's Techniques for Developing Bug-Free C Programs (Microsoft Programming Series).

You see - it's not so bad.

Tkachenko Family Blogroll

| No Comments | No TrackBacks |

42. "Make all your family blogging" - done.

Microsoft refreshes their professional certifications program:

Changes are afoot in the Microsoft Certification Program that can be labeled as "evolutionary"; that is, changes to the certification process will be implemented over time, as newer technologies become generally available.
According to Valvano, Microsoft will follow tradition, releasing exams for SQL Server 2005 and Visual Studio 2005 about 45 days after the release of the products to the general public. Those exams, however, won't fit into the traditional MCP schema that one might be familiar with. Instead, Microsoft will introduce a new framework for certification that will pair up a credential with a skill-identifying certification based on a tiered approach consisting of the following credentials:
  • Tier 1: Microsoft Certified Technology Specialist will require simply passing one to three exams based on a Microsoft technology. As products meet the end of the support lifecycle, its related exam will be retired.
  • Tier 2: Microsoft Certified IT Professional or Professional Developer require a Technology Specialist certification, plus one to three more exams, based on the requirement for a particular path. This tier is tied to job role at an organization, such as Database Developer or Business Intelligence. Recertification will be required to maintain status at this level.
  • Tier 3: Microsoft Certified Architect is a rigorous, board-level certification that requires recertification. Achieving Technology Specialist or IT Professional or Professional Developer certification not a prerequisite to attaining this level of certification.

Ken North:

WebServicesSummit.com has released two podcasts of a panel discussion with Ron Bourret, Dana Florescu, Michael Kay, Jonathan Robie and Michael Rys. The discussion topics include XQuery, native XML databases, SQL/XML databases, XSLT and related topics.

The part 1 podcast (MP3 audio) focuses primarily on XQuery (running time: 34:03). The part 2 podcast covers native XML databases and XML-enabled SQL databases. Running time is 22:46.
http://www.webservicessummit.com/People/XQueryGuruPanel.htm

Or podcast RSS feeds:

XML, SOA and web services podcasts

SQL/XML and database podcasts
I didn't listen yet, but sure it's a great stuff.

I was wrong in my last post. Here is how one can output HTML with XslCompiledTransform when XmlResolver needs to be passed to Transform() method.

using (XmlReader src = XmlReader.Create("../../source.xml"))
{
  XslCompiledTransform xslt = new XslCompiledTransform();
  xslt.Load("../../style.xslt");
  XmlWriter result = XmlWriter.Create(Console.Out, xslt.OutputSettings);
  xslt.Transform(src, null, result, new XmlUrlResolver());
}
The key line is emphasized. One just needs to pass XslCompiledTransform's OutputSettings (after XSLT stylesheet is loaded) to XmlWriter.Create() method and then resulting XmlWriter will output transformation results according to <xsl:output> settings in the XSLT stylesheet. Really nice once I get it.

I'm porting nxslt utility to .NET 2.0 with XslCompiledTransform as XSLT processor and I just found out XslCompiledTransform API is really severe broken. I was writing before that the only Transform() method overload that accepts XmlResolver outputs to XmlWriter. So if you want to create HTML and to have some control over document() function resolving (or just provide user credentials), you are out of luck with XslCompiledTransform. Quite common scenario, isn't it? Too bad, XML Team should hire better testers.

What I dislike in System.Xml v2.0 (and v1.X for that matter) is a poor support for push-based XML processing. Somehow it's all about pull - XmlReader, while push - XmlWriter seems to be a second class citizen. For instance one can't populate XML into XPathDocument or XSLT stylesheet into XslCompiledTransform with XmlWriter. One can't deserialize an object from XML if XML is represented as XmlWriter etc. In a nutshell: XML producers in .NET write XML into XmlWriter, while XML consumers read XML from XmlReader. The problem with this mix of pull and push arises when one tries to pipeline a XML producer and a XML consumer, i.e. a component that writes to XmlWriter and another one which reads from XmlReader. Ooops! Think about feeding XML created with XSLT into SqlXml or deserializing an object from an XML modified by XSLT or chaining two XSLT transformations when output from the first one goes as input to the second one or generating XSLT stylesheet on the fly. Most of these problems can't be solved in .NET 2.0 in a streaming fashion and require interim buffering of the whole XML effectively killing scalability and performance. Look here and here. I'm really sorry to see interim buffering with serializing/reparsing involved as an XML pipelining solution in a modern technology like .NET 2.0.

I know I'm late, but anyway here is the latest Dimitre's puzzle. Don't post your anwers here, just send them him to dnovatchev AT gmail DOT com. Dimitre will be collecting answers only for another week, so hurry up.

I just started reading the book "The Da Vinci code" and this resulted in having some fun with XSLT 2.0, Saxon 8.4 and Saxon.NET.

Here's the problem:

Find the first 10-digit prime in consecutive digits of F-3000

Where F-N is the Nth Fibonacci number.
Here are the elements of the sequence of Fibonacci numbers from 0 to 11:

Element: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144
Index: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11


It is *very important* to note that the first "1" in the sequence has index "0", so that everyone will mean the same thing by F-3000

When you have the answer, please, let me know:

1. The 10 digit prime number
2. The xslt code
3. The stylesheet execution time.
4. Your computer -- CPU speed and RAM
5. Whether or not you used any specific extension functions.

Cool Web hosting news

| 2 Comments | No TrackBacks |

Hey, I just noticed that Webhost4Life (web hosting company where I host my sites) greatly increased disk and database space available with their hosting plans - now for the same $10/mo one can get 2Gb of disk space, 2Gb of MS SQL and 2 Gb of MySQL. Hmm, 6 times more, really generous offer. Needless to mention Windows 2003, .NET 1.1, Sharepoint, unlimited traffic, unlimited domains etc etc etc. Sounds like a commercial so I better stop. Still please refer to me when buying web hosting at Webhost4Life, my member ID is "olegt".

Daily joke

| No Comments | No TrackBacks |

This is from a very well known software company's site:

This site provides you with unique Technical Resources and Relationship Services available to XXXX! Check this page weekly for updates on a wide variety of XXXX-related issues!
Check a page weekly? I found myself treating it as a bad joke. It just sounds unnatural already to check a page on a regular basis to see if there is anything new. Alas syndication isn't everywhere yet...

Scott Hanselman:

I'm working (again) on the XML Chapter to our upcoming book. The book is all about ASP.NET 2.0, but XML is such an important part of ASP.NET that this chapter gets bigger and bigger. I've been updating it from the original Beta 1 version this last few months and noticed that the namespace qualification for the XmlDataSource is still broken/incomplete as it was last year in September. I talked to a bunch of people at TechEd including a number of very helpful devs and PMs who were very much interested in resolving this issue. However, unfortunately it looks like this'll be one of those features that won't make it into the final, which means one of us will have to write our own.
That's a bummer. I feel a smell of degradation here. When a brand new XML-specific ASP.NET control doesn't support XML namespaces, uses obsoleted XslTransform class and they can't get it fixed during a year - that's really lame. I'm really sorry seeing such stuff coming from Microsoft. Definitely we need to provide a fixed version.

Just look here.

AJAXSLT is an implementation of XSL-T in JavaScript, intended for use in fat web pages, which are nowadays referred to as AJAX applications. Because XSL-T uses XPath, it is also an implementation of XPath that can be used independently of XSL-T.
That's weird. Wait, all modern browsers (ok, except Opera) support XSLT natvely, don't they? Well, here is how they explain the goals:
Both XPath and XSL-T are built into some of the modern browsers, however not in all. This library runs on many browsers, including those that don't support XSLT adaequately or at all, which is why the library was written in the first place. (See BROWSER COMPATIBILITY, below.)
And more:
Safari/2.0 has XSL-T built in, but it is not exposed to JavaScript, but is only applied to XML documents that have a stylesheet declaration when they are loaded.

Internet Explorer exposes XSLT via the transformNode() method on the XML DOM. However, this is not avaiable if ActiveX is disabled.

Firefox exploses XSLT via the XSLTProcessor() object, however XPath is not exposed in the DOM.
Hmmmm, still weird. But still cool. Any efforts to bring XSLT client side are always cool. I'm glad to see Google supporting the idea.

15seconds.com published a series of articles by Alex Homer on reading and writing XML in .NET Version 2.0:

  1. Reading and Writing XML in .NET Version 2.0 - Part 1
  2. Reading and Writing XML in .NET Version 2.0 - Part 2
Excellent articles. Part 3 is expected too according to Alex's site. Yeah, I just found out Alex Homer has a site and even very interesting blog (with no RSS feed and not so frequently updated though). It's http://www.daveandal.net/alshed.asp. Alex, you really need RSS feed on your site!

It's official now - we (XML MVPs) agreed and Dare (as EXSLT.NET project owner) has approved an integration of the EXSLT.NET project into the Mvp.Xml library. All EXSLT.NET project contributors may ask to be added as developers to the Mvp.Xml project. I will be moving code soon, as well as doing some EXSLT.NET development. Current plans are: .NET 2.0 version and support for XSLT 2.0 stylesheet functions. Stay tuned.

Microsoft's XML Team is asking you:

XSLT 2.0 -
1. Do we need to support XSLT 2.0 ?
2. What are the most useful features of XSLT 2.0 that you would like to see implemented? (like grouping , support for datetime etc)
3. Do you believe support for the entire 2.0 spec is useful? If yes , why?
Don't miss a chance to speak up. Go post a comment.

Good news for those who missed the opportunity to retake a Microsoft Certificaion exam for free - the Second Shot Offer has been extended through August 2005.

Microsoft XML Team has posted a response "Comparing XML Performance" to the Sun XML Mark 1.0 benchmark and accompanying whitepaper from Sun XML Performance Team asserted that Java significantly outperforms .NET in XML processing performance.

kzu says he has broken the mark of 100 bugs filed to the MSDN Feedback Center. That's impressive. My numbers are humble - only 15 bugs and suggestions. Gotta be more active here. I spent a day working on an adapter to my homegrown XSLT test suite for the XslCompiledTransform class and the very first run brought a bunch of issues. Now I have to analyze the log and file bugs. I'm happy I found already a quite significant one - XslCompiledTransform thinks NaN equals to NaN. To put it another way - "number('foo')=number('bar')" evaluates to true! That's really bad, because that property of NaN (non equality to anything) is the base for a quite widespread technique in XSLT 1.0 on determining whether a value is a number - "number($val) = number($val)" is true if and only if $val is a number.

Future developer

| No Comments | 3 TrackBacks | ,


Future developer? No doubts!

So you like XML in Office?

| 1 Comment | No TrackBacks | ,

The big news today is of course announced next Office's full deep XML-ization. I've read a dozen of enthusiastic postings already and decided not to bother my readers with another whoohoo-like post from another XML nerd. But what amazed me more than the announce itself (which was predictable) is the overall excitement about the news. Ranging from Scoble to Tim Bray - everybody seems to value ultimate XMLization of the next Office as "big cool news". Not a single critical post - what's the matter with you people? And even more:

I think another version or two after the upcoming Office, binary files will become completely obsolete and forgotten and won't be able to round-trip the latest features.
says Wesner Moise (former Excel developer at Microsoft and overall smart guy).

Now that's amazing...

Another improvement System.Xml 2.0 brings, from the how-come-I-didn't-make-it--before department is that XPathNavigator class now implements IXPathNavigable. Sounds obvious, huh? In both common and OOP sense of course XPathNavigator should be IXPathNavigable, but somehow in .NET 1.0 and 1.1 it is not. (And by the way I still wonder how come XmlNodeReader doesn't implement IHasXmlNode interface. Too bad I made this suggestion too late and now we must wait another year or two for this). Anyway, these 2 lines of code:

public virtual XPathNavigator CreateNavigator()
{
      return this.Clone();
}
made a magic to the XslCompiledTransform API. 4 redundant Transform() overloads down! Now input to XSLT is either string (URL), XmlReader or IXPathNavigable.

And if you aren't familiar with IXPathNavigable - don't bother. Just remember that you can pass XmlDocument, XPathDocument, XmlDataDocument or XPathNavigator objects as is to the Transform() method as all these classes implement IXPathNavigable. API simplicity is invaluable and I'm glad version 2.0 of the System.Xml looks simpler than previous ones.

A fellow MVP asked if there is a way to dump XML content while reading it from a stream without buffering the whole XML document. Here is a scenario - an XML document being read from a HttpWebResponse stream and needs to be passed as an XmlReader to an XmlSerializer to deserialize it into objects. This works fine in a streaming way - just create an XmlReder over the stream and pass it to an XmlSerializer. But what if incoming XML needs to be logged? Of course then one could go buffer-log-process architecture, effectively killing performance and scalability. Fortunately there is a better way - by extending XmlReader one can make it dumping current node it's positioned at. Here is how.

Hey, self-learners, did you know that you can take MIT course online for free? MIT's OpenCourseWare made it possible. That's really cool resource for self education.

[Via Wesner Moise]

Enrolling in an online computer science program can help advance your knowledge.

Altsoft N.V. has announced a relase of the Xml2PDF formatting engine version 2.3, now supporting WordML. Altsoft Xml2PDF is a .NET based formatting engine for converting various XML-based formats to PDF. It supports XSL-FO, SVG, XHTML, WordML and XML+XSLT as an input and generates PDF as an output. The prices are from $49 for the Workstation version to $1599 for the API version. Free evaluation versions are available.

SourceForge has fixed the stat system and now we can analyze Mvp.Xml project statistics. The numbers are good - 8-15K hits/mo and 700-800 downloads/mo, not bad for a 1.0 release.

Hibiscus time

| No Comments | No TrackBacks |

Hibiscus blooms again at our home. Actually outdoor it blooms non stop all year here in Israel, serving as a perfect undemanding but beautiful hedge. It's everywhere, every color and every form, there are even Hibiscus trees. But my home Hibiscus blooms two or three months in a row, then rests for couple months and blooms again. Every flower lives only day or two. Short but bright life.

70-316 Exam: Passed. Got MCAD.

| 4 Comments | No TrackBacks |

So yesterday I passed 70-316 exam ("Developing and Implementing Windows-based Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET"). Slack preparation during a week, bad-surprizingly too many questions on darned DataSets, but anyway I got 900 out of 1000. Now that I passed these three exams (70-315, 70-316 and 70-320) I should reach MCAD certification status which I wanted.

Hey, I passed 4 certification exams during last 5 months (3 for Microsoft and one for IBM) and not a single one before in my life. Should be some sort of psychological compensation effect. That was fun actually, but I better stop now. Actually I'm going to take other two exams to reach MCSD, but later, later.

Now back to System.Xml v2.0, I love it already as a new car or new PC. Same feelings!

Some users report that after installing Netscape 8 Internet Explorer and other IE-based browsers usch as Avant browser stop applying XSLT stylesheets, even the default stylesheet used to render XML documents. That probably has something to do with "Firefox or IE6 rendering" feature in Netscape. Beware.

If you do make your own web site design make sure you research various web site design firms before you invest money into a web designer who might know less about web page design than you do.

Jonathan Marsh is blogging

| 1 Comment | 3 TrackBacks | ,

Jonathan Marsh, who is one of Microsoft's representatives at the W3C, an editor of XML Base, XPointer, XInclude, xml:id, some XQuery 1.0 and XPath 2.0 specs and is by the way the original author of the defaultss.xsl which is used in Internet Explorer to display XML documents, is blogging. His blog called Design By Committee. Subscribed.

[Via Dare Obasanjo aka Carnage4Life]

70-320 exam: passed

| 3 Comments | No TrackBacks |

Well, I recently decided I need to be an MCAD. That requires to pass three exams. I passed one (70-315) in December and yesterday I went for a second one - 70-320 (Developing XML Web Services and Server Components with Microsoft Visual C# and the Microsoft .NET Framework). Should admit Remoting, Serviced Components or COM+ aren't what I'm working with every day. Anyway $50 (I don't know why but seems like Microsoft exams are just for $50 in Israel), 43 really good questions, 2.5 hours of brains gym. Passed, 904 out of 1000.

Now that I passed two core exams I need to pass one elective exam to achieve MCAD status. The question is which one? 70-229 (SQL Server 2000) would be a challenge as I'm not really a database guy. And SQL Server 2000, you know, if only it would be SQL Server 2005 then ok. 70-340 (Security) is even more challenging. The easiest (and the most interesting for me now) is 70-316 exam (Developing and Implementing Windows-based Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET). And provided limited time that's what I'm going for next week. Yes, I know I'm a slacker and always looking for easy ways...

Oh, and if you are thinking about Microsoft certification too, beware that the Free Second Shot Offer ends May 31 (one should take first exam before May 31 and if fails can retake it for free in June).

Another handy feature implemented in .NET 2.0 Beta2 is that XmlReader class now implements IDisposable interface and so can be closed automatically when using with "using" statement in C#:

using (XmlReader r = XmlReader.Create("../../source.xml"))
{
  while (r.Read())
    Console.WriteLine(r.NodeType);
}
Really handy. And implemented in literally couple of lines. It's a pity we don't have such simple but useful stuff in .NET 1.1.

Blogging engine running XSLT?

| No Comments | 2 TrackBacks |

Dave Pawson investigates if there is enough interest in a community developed web logging system based on XSLT processing and Atom8. He welcomes any feedback.

I've been using XSLT-powered online publishing systems such as Docbook Website and definitely see enough potential behind Dave's idea.

.NET XSLT API is traditionally ugly. XslTransform class (obsoleted in .NET 2.0) had 8 Load() methods and 9 Transform() ones in .NET 1.0. In .NET 1.1 - 11 Load() methods (5 of them obsoleted) and 18 Transform() (9 obsoleted). Huge mess. Brand new XslCompiledTransform in .NET 2.0 Beta2 has just 6 Load() methods and 14 Transform() ones, none obsoleted so far. Sounds good, but does this pile of method overloads cover all usage cases? Unfortunately not.

This one little improvement in System.Xml 2.0 Beta2 is sooo cool anyway: XPathNodeIterator class at last implements IEnumerable! Such unification with .NET iteration model means we can finally iterate over nodes in an XPath selection using standard foreach statement:

XmlDocument doc = new XmlDocument();
doc.Load("orders.xml");
XPathNavigator nav = doc.CreateNavigator();
foreach (XPathNavigator node in nav.Select("/orders/order"))
    Console.WriteLine(node.Value);
Compare this to what we have to write in .NET 1.X:
XmlDocument doc = new XmlDocument();
doc.Load("../../source.xml");
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator ni = nav.Select("/orders/order");
while (ni.MoveNext())      
  Console.WriteLine(ni.Current.Value);
Needless to say - that's the case when just a dozen lines of code can radically simplify a class's usage and improve overall developer's productivity. How come this wasn't done in .NET 1.1 I have no idea.

And how come the MSDN documentation for the class still doesn't mention this cool feature - I have no idea either.

More security changes made in XSLT in .NET 2.0 Beta2. When working with XslCompiledTransform class:

document() function is disabled by default. To enable it, one has to provide XsltSettings enum value with EnableDocumentFunction field set to the XslCompiledTransform.Load() method:

XslCompiledTransform xslt = new XslCompiledTransform();
XsltSettings settings = new XsltSettings();
settings.EnableDocumentFunction = true;            
xslt.Load("style.xslt", settings, new XmlUrlResolver());
or
XslCompiledTransform xslt = new XslCompiledTransform();
XsltSettings settings = new XsltSettings(true, false);            
xslt.Load("style.xslt", settings, new XmlUrlResolver());
(first argument in the XsltSettings constructor controls document() function enabling).
Or even (for full trusted stylesheets):
XslCompiledTransform xslt = new XslCompiledTransform();                        
xslt.Load("style.xslt", XsltSettings.TrustedXslt, new XmlUrlResolver());
Note, that then one must provide an instance of XmlResolver class to the XslCompiledTransform.Load() method. It' used to resolve stylesheet URI and xsl:include/xsl:import statements and somehow cannot be null, so there doesn't seem to be any way to disable xsl:include/xsl:import, despite the documentation claims xsl:include/xsl:import are enabled by default. Weird.

And even if at compile time the document() function was enabled, one can supress it provideing null as a XmlResolver to the XslCompiledTransform.Transform() method. And btw, there is only one Transform() overload, which accepts XmlResolver, which is also weird, because it requires XmlReader and what if I've got IXPathNavigable as a source XML?

Script blocks are disabled by default too. Use the same XsltSettings enum to enable it.

I had a conversation with somebody about how EXSLT.NET worked around the hyphenated EXSLT function names problem and if there are better ways to solve it. Here is a suggestion for Microsoft: give us more control over exposing .NET methods as extension functions and make it declarative.

Yep, no DTD is allowed by default in the .NET 2.0 Beta2:

XmlReaderSettings.ProhibitDtd Property (System.Xml)
Gets or sets a value indicating whether to prohibit document type definition (DTD) processing.

Return Value
true to prohibit DTD processing; otherwise false. The default is true.

Remarks
This setting can be useful in preventing certain denial of service attacks. When set to true, the reader throws an System.Xml.XmlException when any DTD content is encountered.

That's for sure contradicts "Allow all XML syntax" gospel, but looks like Microsoft takes security very seriously nowadays. Well, at least Microsoft's XML team. Most likely that was a hard decision, but may be not since what are the options here in the face of the billions of laughs attack? If 1Kb well-formed XML document can hog all your CPU and memory when you just open it in a browser, which processes DTD, such as IE?

Well, sure it's just a default value and can be changed. But defaults are more than just defaults and I bet most .NET 2.0 applications won't accept XML with DTD. That's sort of a milestone in XML history.

Can one change a value of a variable in XSLT? Unexpected answer - yes, when debugging XSLT in Visual Studio 2005 Beta2. I'm not sure even if it's a bug. Actually it can be quite useful when debugging to be able to change some values, right? Do other XSLT debuggers allow it?

I'm learning new XML stuff in Visual Studio 2005 Beta2. So far I'm still overwhelmed! New System.Xml is sooooo cool, elegant and professional, kudos to the WebData team, this is really a piece of programming art. Still I filed 4 bugs so far in just one hour.

Finally something interesting from the Channel 9: Ken Levy shows new cool XML tools in Visual Studio 2005 - improved XML editor, XML Intellisense, schemas, XML code snippets, XSLT editing and debugging etc etc etc. 41 min video, still worth watching.

On behalf of the Mvp.Xml project team our one and the only lawyer - XML MVP Daniel Cazzulino aka kzu has signed a license for Microsoft to use and distribute the Mvp.Xml library. That effectively means Microsoft can (and actually wants to) use and distribute XInclude.NET and the rest Mvp.Xml goodies in their products. Wow, I'm glad XML MVPs could come up with something so valuable than Microsoft decided to license it.

Mvp.Xml project is developed by Microsoft MVPs in XML technologies and XML Web Services worldwide. It is aimed at supplementing .NET framework functionality available through the System.Xml namespace and related namespaces such as System.Web.Services. Mvp.Xml library version 1.0 released at January 2005 includes Common, XInclude.NET and XPointer.NET modules.

As a matter of interest - Mvp.Xml is an open-source project hosted at SourceForge.

Through the use of Exchange email outsourcing or your own dedicated Microsoft Exchange server you may find that a good Microsoft Exchange server can help you out with your business communications in ways only Exchange 2007 hosting truly can.

Erik Meijer, one of designers of Haskell98 and C-omega languages will be presenting an interesting webcast at Tuesday, May 03, 2005 10:00 AM (GMT-08:00):

MSDN Webcast: Language Design: Helping Programmers Program Better (Level 300)
One of the greatest challenges programmers face is translating the concepts in their head into a form that is suitable for a machine to execute. When designing programming languages there is a natural tension between what the machine can do and what a human can comprehend, a tension between program efficiency and programmer productivity. This webcast will discuss various advancements in programming languages geared towards simplifying the development of three-tier distributed and data intensive applications. In particular we will concentrate on ways to bridge the impedance mismatches between objects, relation data, and XML and the importance of dynamism in this trend.

Presenter: Erik Meijer, Technical Lead, Microsoft Corporation
Register here.

Almost 6 months after it's been announced that Microsoft won't ship XQuery implementation in the .NET 2.0, StylusStudio (maker of the namesake XML IDE) decided to run an online petition "XQuery for all" to urge Microsoft change the mind. Well, as a marketing action it's ok, but the petition itself is hopeless being ridiculously late. Asking Microsoft to include an implementation for a Working Draft technology, which they decided not to ship at least half a year ago and after Beta2 is out is a weird idea. Sorry guys, I won't sign it. Back in October 2004 - I would sign it for sure, but not now.

I call it the blogsphere shadow effect - sometimes we bloggers get blind and see no other parts of the world. Dare Obasanjo announced (in his blog of course) that XQuery is cut from .NET 2.0 back in October 2004 and we all discussed that (in blogs of course) for months, until it became clear that there are some developers out there, who just don't read blogs and so still playing with condemned XQuery bits in early .NET 2.0 betas. Then XML team published an official announce in January. And now in May we've got this petition, cool but too late.

Small advice for StylusStudio - one gotta read blogs in this century to be informed early.

Docbook stylesheets adapted for .NET

| No Comments | 1 TrackBack |

Sadly but fact, .NET 1.X XSLT processor - XslTransform class has some nasty bugs. Actually it even can't load Docbook stylesheets :( So it was really nice to see Altsoft (maker of Xml2PDF tool) has adapted Docbook 1.68.1 stylesheets to make them working in .NET. Changes are really small.

After reading this, I bought this:

just to realize the damn fingerprint reader only works with Windows XP and I've got XP only on my laptop. Oh, shit. Can you believe it? Microsoft fingerprint reader doesn't work with Microsoft Windows Server 2003 or Windows 2000. :(

Oh well, still it's an excellent keyboard. I've got also Wireless Desktop Elite keyboard:

and while it looks and feels awesome, I just can't work with it productively. Absence of leds in combination with f#cking F Flock button just kills me, I do use F buttons all the way. Weird buttons configuration - F buttons go in triples, not quadruples, unusual middle sectoin with no home/end buttons - it can be quite disorienting and get you looking at keyboard more than it's needed.

Finally Microsoft Knowledge Base provides RSS feeds. Quite expressive list.

[Via Sergey Simakov]

Dave Pawson is blogging!

| No Comments | No TrackBacks |

Dave Pawson is blogging! Great, subscribed.

As many were saying, XSLT is finally coming to client side. The rumors came true today - latest version of the Safari browser from Apple supports XSLT via libxslt. Now what about Opera?

[Via Cafe con Leche]

I'm studying new XSLT 1.0 implementation provided by Microsoft in the .NET 2.0 Beta2 - XslCompiledTransform class. The guys who wrote it are my good friends and excellent developers, but let me to complain a little bit, not because I'm a complainer, but trying to make this cool piece of software even better.

Useless RSS feeds

| No Comments | No TrackBacks |

I was writing very enthusiastically about upcoming MSDN webcasts RSS feed. It's really nice to see more and more orange XML icons on Microsoft sites. But what about quality? I was trying to make use of the the webcasts RSS feed and found it merely useless. What information would you expect from a feed about some events? At least event description, link and a date. Surprisingly upcoming MSDN webcasts RSS feed contains no information about when announced webcasts gonna happen. Weird. Can you guys fix it?

I has hoping to leverage the webcasts feed for updating events module on a site I'm building. But with no webcast dates, what I do? Screen scrapping, just like it's still ninetieths?

C-Omega webcast at May 11

| No Comments | No TrackBacks |

Interesting webcast:

Learn about Cω (C-Omega), an experimental research language from Microsoft Research that extends Microsoft Visual C# with new constructs for relational and semi-structured data access as well as asynchronous concurrency. Cω is a strongly typed, data-oriented programming language that bridges the gap between semi-structured hierarchical data (XML), relational data (SQL), and the .NET Common Type System (CTS). Join this webcast and learn how the language presents a simple and powerful model of concurrency applicable to both multithreaded applications running on a single machine and to the orchestration of asynchronous, event-based applications communicating over a wide area network.
Presenter: Gavin Bierman, Researcher, Microsoft Corporation
Register here.

Hey, just look at this. It says Visual Studio 2005 Beta2 will ship April 25, in just 16 short days and nights. Great. After Visual Studio .NET and Visual Studio .NET 2003 it's third version and it will rock not only according to the third version law. I especially enjoy improvements in XML area. I hope finally to be able to work with XML in Visual Studio and throw XML Spy out.

5 years in Israel

| 2 Comments | No TrackBacks |

Today it's 5 years as my wife and I repatriated to Israel (in Hebrew it's called aliyah - ascent) from Ukraine. I'm happy we did it. Today Israel is our country and we just love it, it's amazing, unique and beautiful.

XQuery as Perl for XML

| No Comments | 1 TrackBack |

New bunch of XSL/XQuery working drafts has been published, some in Last Call. Now it's 12 documents, including a new interesting one. Changes are mostly minor though so if they wouldn't get another zillion of comments (do many realize than by posting a comment, even about a small typo to W3C they effectively defer the spec?), we probably will see the very first Candidate Recommendation in a couple of months. I bet it will be XSLT 2.0.

It's always fun to read official W3C announces - the people writing them have good sense of humor. The previous time they have called XQuery "an XML-aware programming language" and Mike Champion (one of Microsoft representatives in W3C) said he wants to clear it up if that's not a mistake. He took care indeed. Now W3C calls XQuery a Perl-like language, great:

XQuery 1.0: An XML Query Language:
A non-XML, Perl-like syntax for querying collections of structured and semi-structured data both locally and over the Web - Last Call
Does it mean XQuery is positioned now as Perl for data (no XML is mentioned actually)? A write-only language for quick and dirty solutions? Ok, ok, I love Perl, this blog is run by Perl. But you get my point.

Part 1 of my "Indexing XML" article went live at the MSDN XML Dev Center. In this article I discuss various aspects of indexing standalone XML documents - XML IDs, XSLT Keys and introduce IndexingXPathNavigator class, part of the Mvp.Xml library, which enables lazy or eager indexing of any IXPathNavigable XML store (XmlDocument, XPathDocument or XmlDataDocument) thus providing alternative fast way to select nodes directly from the index table and not searhing the XML tree. This allows drastically decrease selection time and improve scalability on preindexed selections.

Here is benchmark results on searching 1000 random orders by order ID from differently sized XML documents using XmlDocument, XPathDocument and IndexingXPathNavigator:

'nuf said.

Any comments are welcome! In the next part of the article I'm focusing on XML indexing aspects of the SQL Server 2005.

Norm Walsh writes about a very nasty problem waiting to happen when anybody naive enough is trying to validate an XML document after XInclude processing against XML Schema. Ooops, XInclude processor appends xml:base attributes at top-level included elements, which you gotta allow in the schema, most likely on every element! And XML Schema of course doesn't support declaring of such globally allowed attributes, so you have to add its definition to every single element declaration. And that's not all! Norm forgot about xml:lang attribute, which XInclude processor can and should append too. I mentioned that issue in the "Combining XML Documents with XInclude" article.

wbloggar site hacked?

| 9 Comments | No TrackBacks |

I'm setting up new notebook (HP Pavilion ze2070ea - really really nice one) and just realized I can't download one of the most important piece of software I just can't live without - w.bloggar, blogging client, because its site seems to be hacked and defaced out. When you go to the site (even google cache of it) you see empty page and view source reveals just some stupid cewl hacker comment I won't cite. What a shame to deface a site offering cool free software!

Anyway, does anybody know where can I get w.bloggar installation please? I'm writing this using MovableType web admin and it sucks.

Dino Chiesa of Microsoft shows how to generate dynamically WordML documents using Java and XSLT. Yep, that's not a typo, Microsoft, WordML and Java. XML serves as peacemaker again. And he even provides a working JSP demo. Cool.

Baby photos

| 5 Comments | No TrackBacks |

Here are some first photos of our little Catherine:
Little Catherine Little Catherine Little Catherine Little Catherine

Catherine's gallery. I believe I start feeling something unusual seeing her. That's really amazing.

Happy resource wasters

| 3 Comments | 1 TrackBack |

The day can't go well when it starts with such. That's really sad to see. The guy, who "used exceptions quite extensively to pass messages from the database all the way to the client", tested (no, "tested") cost of throwing exceptions in .NET on his desktop using such "test":

Sub ThrowException()
 Try
 Throw New Exception
 Catch ex As Exception
 Finally
 End Try
End Sub
With Console.WriteLine(Now().ToString("hh:mm:ss.fffffff")) of course :)

And the conclusions are amazing:

1. Modern computers are fast. Really fast. Really, really, really, really, really fast.
3. Throwing one exception won't affect performance.
4. Throwing ten exceptions (nested or otherwise) won't affect performance.
5. Throwing one hundred exceptions (nested or otherwise) probably won't affect performance.
6. Throwing one thousand nested exceptions will most definitely cause your application to perform slowly.
7. The call stack actually supports 1000 levels of recursion
8. Some people don't believe Lessons #1, #3, and #4.
9. An individual's Title does not automatically mean they have any clue what they're talking about.
If some one ever says "because it's faster," think of Lesson #1 and #9 and laugh.
That's what I call a manifest of resource wasters!

Michael Rys will be presenting MSDN Webcast "Making the Most of XQuery with SQL Server 2005 (Level 300)" at 4/26/2005.

This session provides an introduction to XQuery and the data modification language as implemented in SQL Server 2005, and shows you how to get the most from XQuery. Learn how to optimize XQuery and how to write some common XQuery expressions to get good performance.
Presenter: Michael Rys, Program Manager, Microsoft Corporation
Subscribe here.

RSS Bandit v1.3.0.26 is here

| 3 Comments | 1 TrackBack |

Dare writes:

This is the final release of the version formerly codenamed "Wolverine". This is the most significant release to date and has a ton of cool features. Enjoy.
Get it here, this version rocks.

I made the Russian translation again, so all typos and lame Russian words are my fault. I hope it can make an experience of reading news with RSS Bandit even more exiting for those in Russian-speaking community who prefer localized GUI.

Btw, what about server-side feed aggregation? I need some sort of aggregation/filtration service (which would allow to aggregate feeds I choose into a single one and filter out a junk) for a site I'm developing and I was looking around and found not much available free tools. The first part is of course server-side feed aggregation - just like an aggregated feed at blogs.msdn.com, Planet XMLHack or TopXML's Reblogger with some sort of administration of course. The different layer is Bloglines like Web-based news reader, which allows users to have own feed lists and stores the context (read/unread items etc). I think the first part could be done easily using RSS Bandit's core, wisely detached apart from the GUI. Am I crazy or there are such tools already or nobody's gonna need it or it's a good idea?

The daughter!

| 11 Comments | No TrackBacks |

Saturday, March 19 11:55AM the following transformation has occured:

<xsl:template match="family[@surname='Tkachenko' 
                     and husband/@fname='Oleg' and wife/@fname='Alenka']">
  <xsl:copy>
    <xsl:copy-of select="@* | husband | wife"/>
    <child sex="female" birth-date="2005-03-19"/>
  </xsl:copy>
</xsl:template>
For those who can't read XSLT, I translate to English: last Saturday at 11:55AM my dear wife gave birth to our lovely wonderful little daughter! They both feel well, already at home and I'm starting getting used to the "daddy" business.

Michael Rys will be presenting a MSDN webcast on "Managing XML Data on the Database with SQL Server 2005 and Visual Studio 2005 (Level 300)" at April 05, 2005.

This session explores advanced concepts and techniques for working with XML data types using Microsoft SQL Server 2005 and Visual Studio 2005. Topics covered include casting to and from CLR types, working with XML on the provider level, and integrating with SQLXML 4.0. Learn how to pass XML into CLR stored procedures and functions and how to use that to extend the XML functionality on the server (using validation and XSLT).
Presenter: Michael Rys, Program Manager, Microsoft Corporation
Gotta attend, register now.

"XML Hacks" book review

| No Comments | No TrackBacks |

"XML Hacks" by Michael Fitzgerald is not a newly published book (July 2004), it just sometimes happens when your reading queue is implemented as a priority queue and you read not what you'd like to but what you have to. My overall final rating is . That's the first book in O'Reilly's Hacks Series I've read and basically I like this format. The book consists of 100 real-world XML "hacks" - quick and clever solutions for particlular practical XML-related problems.

What I like about the book. Surprisingly it's not only for Linux and Java guys. Processing XML with .NET and C# is covered well too. The whole chapter devoted to XSLT and another to RSS/Atom is just great idea. The variety of topics is amazing - just take a look at the table of contents. The hacks are written in article style - short, to the point and it's fun to read.

What I dislike. The target audience is too wide - from XML newbies to experts, so XML experts would find many "advanced" hacks like "Processing XML with SAX" too boring and newbies could find hacks like "From Wiki to XML Through SGML" too complicated. But for intermediate XML developers it should be just fine. Hack #98, "Processing XML with C#" demonstrates writing XML with ugly string concatenation just after describing XmlTextWriter, weird.

MSDN upcoming webcasts RSS feed

| No Comments | 1 TrackBack |

For those like me who missed that - finally you can get informed about upcoming MSDN webcasts in the most natural way - via RSS feed!

VB6 is dead? Amen

| 1 Comment | No TrackBacks |

http://classicvb.org/petition: 1378 developers, including 203 MVPs signed petition to bring VB6 to Visual Studio .NET. Sounds crazy, huh? While I understand the pain of backwards compatibility issues, I'd rather sign a petition against it.

Muenchian technique of grouping is de-facto standard way of grouping in XSLT 1.0. It uses keys and is usually very fast, efficient and scalable. There used to be some problems with using Muenchian grouping in .NET though, in particular the speed was in question. To put it another way - .NET implementation of keys and generate-id() function is slow. Reportedly, as per KB article 324478, keys performance has been fixed, though I have no idea if the fix is within .NET 1.1 SP1 (.NET version 1.1.4322.2032). Anyway, writing the article on XML indexing I did some perf testing for XSLT keys and got interesting results I want to share.

Nice promotional offer from Microsoft for those interested in Microsoft IT Pro or Developer certification. Register for the offer by May 31, get the promotional code and then take your exam. You you fail, you can use the promotional code to retake the exam for free!

Second video installment in XML API fundamentals series from Dan Wahlin - this time on my favorite - XmlTextReader. Good way to grasp basics.

I finally finished that article and sent it to the MSDN XML Dev Center. It's two-part article discussing various XML indexing aspects. In the first part I covered techniques for indexing standalone XML documents - XML IDs, XSLT Keys and IndexingXPathNavigator. The next part will be completely focused on XML indexing in forthcoming SQL Server 2005.

Ivan Pedruzzi (Stylus Studio) has interviewed Michael Rys on XQuery, Yukon and XML technologies at Microsoft. Really interesting one, read it here.

Dan Wahlin starts online video series on using XML APIs in the .NET framework. Watch the first video segment devoted to XmlDocument class here.

This video segment demonstrates some XmlDocument class fundamentals including how the Document Object Model (DOM) works, parsing RSS feeds, filtering with XPath, and editing XML.

On XmlBookmarkReader

| 4 Comments | No TrackBacks |

Helena Kupkova, known before by FastXML (she claimed it's 5x faster than MSXML), now working for Microsoft on XmlReader and who's behind amazing "Microsoft XML Diff and Patch 1.0" tool, has published an article at MSDN XML Dev Center called "XML Reader with Bookmarks".

Microsoft Word as XSL-FO visual editor?

| 6 Comments | 6 TrackBacks |

That's interesting - MSDN has published "Transforming Word Documents into the XSL-FO Format" article by Alexei Gagarinov (RenderX) and Mark Iverson (Microsoft). The article introduces WordprocessingML and XSL-FO vocabularies and shows how to transform Word documents to into XSL-FO using developed by RenderX Word2FO.xsl stylesheet. That stylesheet is available in the article's download and supports rich enough but currently a bit limited subset of WordprocessingML/XSL-FO features, btw it does support images.

That's quite unusual for Microsoft to even mention XSL-FO, usually they just ignore it.

Another interesting tidbit. As Kevin Brown of RenderX told me in a private mail (I think I can quote him):

The style sheets and extra tools are available for download through this link. We will be creating a new website section for them and for suggestions for improving them. This coupled with the Microsoft XSL tool we have been using makes a decent environment for using Word as an XSL Designer for XSL FO applications.
Hmm, good move, I like it. XSL-FO desperately needs visual designer. Antenna House is developing something called "XSL Report Designer", to be released really soon, but who need it if you can use old good Word? And also Antenna sells WordMLToFO Stylesheet for just $980. That's not a price that can make a technology really popular, we need a cheap (preferably free) Word to XSL-FO conversion, that's gonna boost XSL-FO as a technology.

You can try a trial of some PDF to Word software to see if taking your documents and converting PDF to Word will make things more easily formatted than before the PDF conversion helped you to do a convert PDF to Word operation.

W3C has updated 9 XQuery, XPath and XSLT Working Drafts and introduced a brand new, sort of milestone one - "XQuery Update Facility Requirements":

This document describes the requirements for the XQuery Update Facility. [XQuery 1.0] provides queries, but has no support for adding new values or changing existing values. The XML Query Working Group intends to add support for updates in a future version of XQuery.
So instead of polishing existing XQuery/XPath2/XSLT2 drafts to deliver finally something stable, they have started thinking about XQuery Update. Great. Now chances are 2006 as XQuery Recommendation publishing year is a way too optimistic.

As a matter of interest here are how XQuery and XSLT2 are positioned now:

XML Query is an XML-aware programming language that can be optimized to run database-style searches, queries and joins over collections of documents, databases and XML or object repositories.
XSLT 2 allows transformation of XML documents and non-XML data into other documents.
(Emphasized by me).

7 years of XML

| 2 Comments | 2 TrackBacks |

It's XML's birthday today - the very first XML 1.0 Recommendation has been published 10 February 1998 - 7 years ago. That's a mature technology which you can find everywhere, because XML just works. And it's still extremely hot!

Sincere congratulations to the XML 1.0 fathers: Tim Bray, Jean Paoli and C. M. Sperberg-McQueen!

Here is another XML history related article "Happy Birthday, XML!" (2003) by Dave Hollander and C. M. Sperberg-McQueen (the image above is from the article, © W3C).

IBM is giving away 2000 free vouchers, applicable to selected WebSphere and XML certification tests.

To qualify for a voucher, a candidate is required to be one of the first people to pass the aligning Pre-assessment/Sample Test between January 1, 2005 (12:00 a.m. Eastern Time) and April 30, 2005 (11:59 p.m. Eastern Time).
Each Pre-assessment/Sample Test costs $10 USD, so one can get IBM certification for just $10.

So I did this week. The pre-assessment test is done online, boring. Then in a couple of days I received a voucher for a real certification test. I've got a certification center just 500 meters from my work, so next day I went to take a test. It's Test 141, "IBM Certified Solution Developer - XML and Related Technologies". 57 multiple-choice questions, 90 minutes, 58% to pass. XML fundamentals, XSLT, XPath, XML Schema, DTD, DOM, SAX, Web Services, I even got one question on XSL-FO, nice. Well, despite no preparation and quite rusty Java XML skills I passed with 94%.

So it works and they're still sending free vouchers. Go for it you want to be IBM Certified Solution Developer or just looking for some entertainment.

Upgrading... Done

| 2 Comments | No TrackBacks |

Well, I must admit it wasn't a smooth upgrade neither. Finally I had to remove all posts, migrate to MT 3.15 and MySQL as a backend and then to reimport all posts in a way they all get the same entry_id (to keep backwards compatibility with the archives).

I'm going to upgrade my blog's MovableType engine to 3.15. I'm full of hopes it helps with damn comment spam.

I'm glad to announce version 1.5 of the nxslt.exe - .NET XSLT command line utility.

Turning a page

| No TrackBacks |

I turned some sort of a page in my life and now I'm starting a new one. Still tabula rasa, but some outlines are clearly visible.

I'm going to launch a new site, xmllab.net, which I see as a better place for my blog (nobody's able to pronounce tkachenko.com anyway), for innovations and experiments with XML technologies aimed to create some new value for XML developers and users, for distributing XML tools both free and commercial ones, for hosting XML related information etc. Well, XML lab, you get an idea. Somehow I feel I need to be more tool oriented and to concentrate my efforts to be more productive.

I'm going to be more productive in writing too. I published only two articles last year - too bad, I promise at least five this year. I'm a slow writer because I'm perfectionist and can spend a day on a single paragraph. Come on, that's not a literature, that's technical stuff, which is different.

Does this mean I will be spending less time in newsgroups and forums from now on? Possibly but not likely.

I bought shiny new Canon S70 camera (yeah, after Tim Bray's words). Quite impressive camera. So go rebuild my photo gallery, I'll need it soon.

Creepy one

| 6 TrackBacks |

I just noted a weird thing in microsoft.public.dotnet.xml newsgroup. Somebody who identifies himself as Paja, posts the same question (verbatim!) to the newsgroup once in a month or so. He's got answers, but never replies, but keeps posting it again. Take a look here - Oct 17 2004, Nov 7 2004, Nov 17 2004, Dec 23 2004 and now - Jan 23 2005. Creepy...

It's already 2005 and everybody's aware of SQL injection attacks nowadays. But it's silly to think that this kind of attack is only about SQL, right? SQL injection is just one particular case of a general code injection attack - when somebody too gullible allows user input to become a part of an executable code. So it's always bothers me when I see how often people (even XML geeks) are building XPath expressions concatenating them with user input. Admit it - that's common practice to have something like

customers.SelectNodes("//customer[@name='" + txtUser.Text + "' and
    @password='" + txtPassword.Text + "']")
which is just a front door open for any evil person, which knows a little bit XPath. And there are many of them just in here, so having selections like above in your production code is most likely a hidden security vulnerability.

Turning Comments Off (Temporary!)

| 1 TrackBack |

Ok, I can't take it anymore, too many spam. I turned comments off temporary untill I upgrade my blog engine. Sorry.

Mvp.Xml library v1.0 released

| No Comments | 11 TrackBacks |

On behalf of the Mvp.Xml Project's team I'm glad to announce release v1.0 of the Mvp.Xml library.

We've been planning to use NAnt in our product for running customizable scripts and almost convinced our boss to go for it (IBM's Websphere server where all server automation is implemented via Ant is good argument here). But unfortunately we've found out that Ant and NAnt have different licenses. Ant is of course released under very pointy-haired-boss-friendly Apache Software License Version 2.0, while NAnt (which I mistakenly thought is just .NET clone of the Ant) - is under scary GNU-compatible license, which may be a red light for some companies. So now we are waiting for a legal department's answer on using GNU licensed software in our product :(

Certification fun

| No TrackBacks |

I was doing annual papers cleaning back in the Hanuka/X-mas days and found a voucher for one discounted Microsoft Certificatied Professional exam, which I completely forgot about and which was about to expire at December 31. So I decided to give it a try. I chose 70-315 exam (Web apps with C#), spent a week preparing (using plain old good MSDN) and went to a Pearson Vue test center, which I conveniently found to be located the same street where I work (Maskit street in Herzliya Pituach).