by Eric van der Vlist is published by O'Reilly & Associates (ISBN: 0596004214)

RELAX NG's Diverse Applications

RELAX NG's tight focus doesn't mean that RELAX NG is a niche language meant to be limited to its original goal. RELAX NG may well follow the path of XSLT (also developed by James Clark). While XSLT's development was focused strictly on document transformation for formatting, it has become the Swiss Army knife of XML developers. XSLT use has gone well beyond its expected boundaries, in large part because it solves key problems effectively.

The same will likely happen with RELAX NG.

Recently, I had to write a converter for a flat, non-XML format into XML. The structure of the resulting document was described by a non-RELAX NG schema. After various hacks to map the 400 different bits of information of this flat structure into elements and attributes, I found that the easiest way to map them to XML was by using a RELAX NG schema.

I transformed the schema of the destination XML vocabulary into a simple RELAX NG schema. A Python program then walked through that structure, parsing the flat document and dispatching the information items to where they belonged. This was made easy by the uncluttered simplicity of the syntax of RELAX NG. The process would have taken much more time with any other schema language.

Another example is taken from RELAX NG itself. As you will discover in Chapter 4, a non-XML compact syntax is available for RELAX NG. This syntax is defined using an EBNF (Extended Backus-Naur Form) grammar. Knowing James Clark, I was sure he had generated it from XML. When I wrote the reference guide for this syntax (Chapter 18), I asked him to send me the source of this grammar as XML. I was expecting a format like the DocBook EBNF module, but instead, of course, he sent a RELAX NG schema! The syntax of RELAX NG is flexible enough to describe the productions of an EBNF grammar. Chapter 18 was generated using this schema. It's a summary that doesn't completely respect the semantics and restrictions of RELAX NG, but RELAX NG is still a useful way to describe this EBNF.

This text is released under the Free Software Foundation GFDL.