On XMLish Things: Oxygen
by Kurt Cagle
There are times lately where I feel like I've strayed far from my original mandate of focusing on XML and it associated technologies. I've wrapped up the SVG chapter for the Firefox book, am beginning to dig in-depth into the realm of extensions before heading back into the deeper realm of XUL (though will be XULish in the upcoming chapter as well; a little XUL goes a long way). So, while taking a bit of a breather from graphics and coordinate systems and the like, I wanted to look at the release of one of my all time favorite tools:
OxygenXML Turns 7
My favorite XML editor is becoming scary good. I've been an Oxygen convert for a long time, and every iteration it just seems to get better and better. The Oxygen XML 7.0 Editor has just been released by SyncRO Soft Ltd., and already its reached the stage where I find it very, very difficult to shift back to the older version. Oxygen has been in a continual state of evolution, since I first encountered it as a 3.0 product, and it seems like even minor upgrades brings significant improvements to the application.
I spend a significant amount of time writing XSLT scripts, both versions 1 and 2, and Oxygen's XSLT capabilities have long been quite significant. In the most recent incarnation, Oxygen supports .NET 1.0, .NET 2.0, JAXP, MSXML3.0, MSXML4.0, Saxon 6.5.5, Saxon8B, Saxon8SA, Saxon.NET, Xalan and XsltProc. Given that all of these handle at least XSLT 1.0 compliant documents (and any that aren't on this list don't have extension capabilities that would move beyond XSLT 1.0 compliance) this reasonably handles all of the production browsers in use. Most of these (with the exception of Saxon8SA and the .NET 1.0 & 2.0 processors) are included with Oxygen, and consequently you can do such things as test EXSLT extensions.
One of the things that I've thought was long overdue and is now implemented is the ability to do split screen content, which gives you the means to simultaneously edit both an XML document source and an XSLT transformation. This may not necessarily seem like the best approach to document development, but in general when I work on an XSLT, I typically will build up the complexity of my test XML. Up until 7.0 this process involved flipping back and forth between multiple tabs, an especially onerous process when you had more than ten such tabs up. Now, each pane can have its own set of tabs and you can move a tab from one set to another, making it far easier editing complex, multi-file applications.
Another feature, marginally less useful but still with applications, is dynamic validation - you can validate content on the fly even as you enter, so long as your document is well-formed. While this can be very useful when dealing with data-oriented content, it gets a little more problematic for DTD enabled document-oriented content. I suspect that its greatest utility comes when dealing with table-view modes.
There are number of new features geared towards simplifying XSLT development. One, the XSLT Input, is especially powerful - you can drag a node from an outline view of an XML document into an XSLT document, and it will automatically create both the template and the end node XPath expression for nodes matching that expression. You may need to do at least a little additional processing to clarify the node, but with it you could create a fairly complex XSLT stylesheet in minutes. Additionally, there are quick shortcut methods that will turn selected content within a template into a call-template invocation (or a stand-alone stylesheet), complete with associated parameters.
Fly-outs also figure prominently in Oxygen 7.0. These sidebars, originally appearing in 6.0, have been expanded considerably to handle a fair number of different sidebar panels of functionality, including a general properties tab, an information tab that captures the output from transformations or schema validations, and the aforementioned XSLT Input view, among others.
THe XSLT capabilites also extend to handy utilities for searching XSL declarations (those things that are contained within <xsl:variable> or <xsl:param> and references, across not only the context of a single document but within all documents in a given project. This gives capabilities much like you'd expect with more traditional IDEs in trying to find function declarations. This capability also enables search and replace capability for renaming such declarations, something that's always been one of the more onerous refactoring chores when developing stylesheets. This support is made even more spectacular when it is applied to the XQuery aware functionality that Oxygen also supports.
This is all enhanced by the extensive code completion and code templates that have been a feature of Oxygen for a while now. Beyond the ability to use schemas (or learned patterns that are inferred from the document structure) in order to determine intellisense options, XPath functions are also supported. A future enhancement - one that could read extensions defined externally -- would definitely be a nice to have here, but other than that, the code behind is remarkably good about catching not only the full XPath 1.0 and/or 2.0 function set and appropriate child node names, but also at showing the paramaters and variables in scope for a given application. Support for indexed words and IDs within intellisense are also supported, making RDF development a little easier as well, and (one of my favorite), the support for CSS property completion can also now be done (when editing CSS documents directly, not within <style> elements).
One element that has been improved with this version over the Oxygen 6.0 implementation is that its not quite as heavy memory wise as that version was. It still tends to require some serious horsepower to run it when more than a few documents are loaded, but at least now it's possible.
Beyond this, there are just a number of nice touches - the ability to associate different colors in the editor with different schemas, the ability to create resizable graphical views of schemas (and schema modules), image previews (a very useful feature for web develoment), importing from Excel documents, text files and JDBC sources, and in general a high degree of extensibility within the interface itself.
Overall, there are very few complaints that I can make about Oxygen 7. It's powerful, multifaceted, useful for both tabular and text manipulation of XML, works with web services and SOA architectures, and is about as good an XML editor as anything out there. Even the price is reasonable, US$180 for the professional license ($80 for the upgdrade), and $48 for the home license (which differs only in whether this is used for education or commercial use).
I don't generally do a lot of product reviews from my blog, but there are a few that I swear by (and a few that I swear at). Oxygen definitely fits into the former category.
Kurt Cagle regularly blogs on UnderstandingXML.com about the state of the art in the XML sector. He lives in Victoria, British Columbia with his wife and daughters.