January 19, 2006

XQuery Style Conventions

Creators of the XQDoc, a free tool for documenting XQuery modules have released XQuery Style Conventions. They claim the document to be to be based on experience and feedback from the XQuery development community. It does seem ok to me. In a perfect world every programmer would follow style conventions ...

January 17, 2006

How to give away 3 Visual Studio Team Suite/MSDN Premium Subscriptions: looking for ideas

As many other Microsoft MVPs I've been given 3 "Visual Studio 2005 Team Suite with MSDN Premium Subscriptions" redemption cards to share. So now I'm having hard time looking for smart ideas how to do so. One card I would give to Kevin Downs, the guy who runs NDoc if ...

January 15, 2006

Autumn grasshoppers

My wife's been chasing grasshoppers this fall: ...

Detecting version of Microsoft XSLT engine from within XSLT

Sometimes it's useful to detect which XSLT engine your XSLT stylersheet is being executed by, e.g. to shortcut processing using an engine-specific extension function or to workaround a bug in particlular engine. Now that Microsoft alone ships 3 different XSLT engines - MSXML3/MSXML4/MSXML5/MSXML6, XslTransform and XslCompiledTransform, detecting XSLT engine from ...

MSXML supports "ms:version" system property, which can be retrieved using standard XSLT system-property() function. The value returned is MSXML version - "3", "4", "5" and so on. XslTransform doesn't support "ms:version" property and returns empty string (just like any other non-Microsoft XSLT engine). But new XslCompiledTransform does support it and "returns a string representing the version of the assembly implementing XslCompiledTransform in the same format as returned by Assembly.ImageRuntimeVersion property ('v2.0.50727' for .NET Framework 2.0)."

This, along with standard 'xsl:vendor' property should give us enough information to differentiate between Microsoft XSLT engines. Here is a sample XSLT stylesheet that does the trick:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="ms"> <xsl:template match="/"> <p> This XSLT stylesheet is being executed using <xsl:choose> <xsl:when test="system-property('xsl:vendor') = 'Microsoft'"> <xsl:text>Microsoft </xsl:text> <xsl:variable name="ms-version" select="system-property('ms:version')"/> <xsl:choose> <xsl:when test="$ms-version = ''">XslTransform</xsl:when> <xsl:when test="starts-with($ms-version, 'v')">XslCompiledTransform</xsl:when> <xsl:otherwise> MSXML <xsl:value-of select="$ms-version" /> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> Unrecognized XSLT engine from '<xsl:value-of select="system-property('xsl:vendor')" />' </xsl:otherwise> </xsl:choose> </p> </xsl:template> </xsl:stylesheet>

Through a solid Microsoft Exchange server in-house or paying for Exchange email outsourcing you'll have access to a Microsoft Exchange server that lets you access email and shared calendars worldwide through Exchange 2007 hosting software.