Building JEsMS external tools
JEsMS has been built to be easily extended through the creation of external tools. In fact, if you use Java, you may even re-use JEsMS core classes (those contained in package Engine which can be compiled using the ant task compileCore) which contains generic code to manage Teamsheets, Rosters and other game structures. But even if you don't use Java, since JEsMS uses a standard format as XML for its input/output, it's very easy to build a tool because XML parsers are available for nearly all programming languages.
XML format extensibility
To be truly extensible, JEsMS must allow external tools to extend its data format also. Sometimes external tools must store custom information directly inside JEsMS data (such as rosters, fixtures or teamsheets) and this must not cause problems with standard JEsMS.
For example a training program should be allowed to save training data directly in JEsMS team roster file while an attendance program could write attendance data directly in commentary output but this should be possible without bothering other JEsMS tools.
This goal is achieved for free in JEsMS thanks to the adoption of XML as data format: Older programs will not break when they encounter extensions because they will still have the data specified in the original schema and will ignore elements they don't understand. Obviously newer program should be backward compatible in the sense that, if an expected extension is missing (because the file was created by some older program) they must assume a default value without crashing. (An example of this can be found in the logo, backgroundColor, foregroundColor attributes used by ManagerGUI Applet).