EXSLT.NET 1.1 released

| 10 Comments | 3 TrackBacks

Here we go again - I'm pleased to announce EXSLT.NET 1.1 release. It's ready for download. The blurb goes here:

EXSLT.NET library is community-developed free open-source implementation of the EXSLT extensions to XSLT for the .NET platform. EXSLT.NET fully implements the following EXSLT modules: Dates and Times, Common, Math, Random, Regular Expressions, Sets and Strings. In addition EXSLT.NET library provides proprietary set of useful extension functions.

Download EXSLT.NET 1.1 at the EXSLT.NET Workspace home - http://workspaces.gotdotnet.com/exslt
EXSLT.NET online documentation - http://www.xmland.net/exslt

EXSLT.NET Features:

  • 65 supported EXSLT extension functions
  • 13 proprietary extension functions
  • Support for XSLT multiple output via exsl:document extension element
  • Can be used not only in XSLT, but also in XPath-only environment
  • Thoroughly optimized for speed implementation of set functions

Here is what's new in this release:

  • New EXSLT extension functions has been implemented: str:encode-uri(), str:decode-uri(), random:random-sequence().
  • New EXSLT.NET extension functions has been implemented: dyn2:evaluate(), which allows to evaluate a string as an XPath expression, date2:day-name(), date2:day-abbreviation(), date2:month-name() and date2:month-abbreviation() - these functions are culture-aware versions of the appropriate EXSLT functions.
  • Support for time zone in date-time functions has  been implemented.
  • Multithreading issue with ExsltTransform class has been fixed. Now ExsltTransform class is thread-safe for Transform() method calls just like the  System.Xml.Xsl.XslTransform class.
  • Lots of minor bugs has been fixed. See EXSLT.NET bug tracker for more info.
  • We switched to Visual Studio .NET 2003, so building of the project has been greatly simplified.
  • Complete suite of NUnit tests for each extension function has been implemented (ExsltTest project).

Any comments and bug reports are welcome!

PS. Well, despite Dimitre's and my light side's objections I implemented dyn2:evaluate(). I know, I'm evil...

Related Blog Posts

3 TrackBacks

TrackBack URL: http://www.tkachenko.com/cgi-bin/mt-tb.cgi/295

EXSLT.NET library is community-developed free open-source implementation of the EXSLT extensions to XSLT for the .NET platform.... Read More

EXSLT.NET 1.1 released from Sonu Kapoor's WebLog on September 14, 2004 1:34 AM

TITLE: EXSLT.NET 1.1 released URL: http://weblogs.asp.net/sonukapoor/archive/2004/09/13/229055.aspx IP: 66.129.67.203 BLOG NAME: Sonu Kapoor's WebLog DATE: 09/14/2004 01:34:02 AM Read More

EXSLT.NET 1.1 released from Dare Obasanjo's WebLog on September 14, 2004 10:46 AM

TITLE: EXSLT.NET 1.1 released URL: http://blogs.msdn.com/dareobasanjo/archive/2004/09/14/229244.aspx IP: 66.129.67.203 BLOG NAME: Dare Obasanjo's WebLog DATE: 09/14/2004 10:46:02 AM Read More

10 Comments

Sorry but I could not find the link to 1.1 release, only 1.01 and 1.0 releases are available in the site...

Yes, implementing fun:function() will be very useful.

As for dyn:evaluate(), please, note that it is very difficult to implement it completely as per spec. As result the existing implementations vary from one another and are quite incompatible. Also, just a few vendours implement dyn:evaluate().

So, the end result goes against the principles of EXSLT -- portability isn't facilitated if dyn:evaluate is used; in fact in many cases it might be reduced.

Yes, implementing fun:function() will be very useful.

As for dyn:evaluate(), please, note that it is very difficult to implement it completely as per spec. As result the existing implementations vary from one another and are quite incompatible. Also, just a few vendours implement dyn:evaluate().

So, the end result goes against the principles of EXSLT -- portability isn't facilitated if dyn:evaluate is used; in fact in many cases it might be reduced.

Oh, that small function didn't take much time. In fact I was spent too little time designing it - as Jonathan pointed out.
Talking about func:function() - I was thinking about it and prototyping a little - by translating func:function() body into an XSLT stylesheet wrapped with some code to form an extension function. It's something we can consider to implement for the EXSLT.NET 1.2 actually.

Oleg,

I was not implying that dyn:evaluate() was evil -- just that implementing it may take your time and prevent you from dealing with something much more important... Just think of it :o)

If I had time for EXSLT, the first new function I'd implement would be... guess what?

func:func()


Cheers,

Dimitre.

Ok, I fixed online documentation.
Unfortuantely I can't pull back release archive and change documentation there as I don't have admin rights.

Is it down again??? Oh, I better provide alternative download location then.

Well, you are right, that's not really reliable.
Probably I should rewrite documentation a bit to not emphasize such feature, that wasn't my intention actually.

Providing namespaces in third argument is sort of clumsy too because of problems with quotes.

Anyone has better idea how to pass namespace bindings in string argument?

Unfortunately the best solution - define namespaces in stylesheet as usual - is unfeasible to implement :(

From the documentation (which is all I can see right now since GDN Workspaces are down...), for dyn2:evaluate() :

"All namespace prefixes that are in scope for the context node (or its parent node if the context node isn't element node) can be referenced in the evaluated XPath expression. That means you don't have to provide additional namespace bindings if your XPath expression only uses namespace prefixes that are in scope for the context node."

My question is : are you comfortable with writing stylesheets (or code for that matter) that depend on prefixes declared in the source XML document ?

As an example, if I take your sample 'orders' document and remove the xmlns:o declaration from the document element, which does not change the document's meaning a bit (since that prefix is not used in it), it breaks your stylesheet.

Leave a comment