Bali is a "RELAX NG validator compiler" that reads a RELAX NG schema and produces a validator that can validate documents with the given schema.
For example, Bali can read a XHTML schema at the compile time, and it produces XHTMLValidatelet.java, which is a Java source code. Then you compile this file along with your other source code, and at the runtime this class can be used to validate XHTML documents before you process it.
Compared to general-purpose validators, such as MSV and Jing, this approach has the following benefits:
Bali (Ver.2002/11/30) including binaries, soure code, and documentations. To run the compiler, you need to have JDK1.2 or later installed on your system.
Using Java Validatelet
Using Win32 Validatelet
Using Bali as a general purpose validator
Compiling schemas written in other languages
The source code and binaries of the compiler/runtime are covered by the BSD license. See copying.txt inside the zip file for details.
I don't cliam copyright of the code generated by the compiler, so it's all yours.
I'd like to know how my tool is being used, so any comment/feedback is highly appreciated. My e-mail address is kk@kohsuke.org. Also, if anyone is interested in porting the runtime to a different programming language/environment, let me know so that I can help.
The concept of transforming a RELAX NG grammar into a compact table is invented primarily by MURATA Makoto. Bali is using MSV from Sun Microsystems to parse RELAX NG grammars.