jEdit is a FOSS programmer's editor with a good XML plugin that does validation. It's written in Java, and runs on Windows, Mac OS X and Linux.
 Set up validation
To set up full validation of Apertium .dix dictionary files:
- install jEdit (
sudo apt-get install jediton Ubuntu)
- start jedit and click Plugins→Plugin Manager, click the Install tab, wait for the list to fill up, and tick XML and click Install
- click Plugins→XML→Translate Schema using Trang
- for Input path, choose the file "dix.dtd" in the folder trunk/apertium/apertium/ (it might also be in /usr/local/share/apertium/ if you installed apertium to the standard path, or you could get it from http://apertium.svn.sourceforge.net/viewvc/apertium/trunk/apertium/apertium/dix.dtd)
- for Input type, select DTD
- for Output type, select RNG
- for Output path, select some folder in your home directory and type "dix.rng"; click OK
To automatically use dix.rng on opening a .dix file, open ~/.jedit/plugins/xml.XmlPlugin/schemas.xml and paste something like this into it
<?xml version="1.0" ?> <locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> <typeId id="dix" uri="/path/to/where/you/stored/dix.rng"/> <documentElement localName="dictionary" typeId="dix"/> <uri pattern="*.dix" typeId="dix"/> <!-- Included by jEdit by default: --> <include rules="jeditresource:/XML.jar!/xml/dtds/schemas.xml" /> </locatingRules>
 Validate and error check a dix file
Opening a .dix file should now automatically associate it with dix.rng, giving error-checking and validation.
- If you see that obvious errors not detected after opening a dix file, click Plugins→XML→Set Schema, and open the "dix.rng" file you created in the previous step. This might happen if the path is wrong in the schema.xml file shown above.
Clicking Plugins→Sidekick→Sidekick and the Parse button will give you an updated "tree view" of your XML file.
Clicking Plugins→ErrorList→Error List will show you a list of XML validation errors.
 Automatically re-parse
Under Plugins→Sidekick you can tick off "Parse on Keystroke" to automatically re-parse the XML (and find errors) for every keystroke. Since parsing can slow down your computer a bit, you might want to make it so it waits a couple of seconds after the last keystroke before parsing. Open Plugins→Plugin Options and double-click Sidekick→Generate. Where it says "After last keystroke, wait (seconds)", increase the slider to 3.0.