I've been kind of thrashing on this whole schema/DFA/validator thing. I decided (in the shower, where I do all my best thinking) to temporarily abandon formal validation, and concentrate on everything else.
Over the last couple of days, I've been using the existing HiveMind with Vista (work project), where I've been setting up all the startup, post-startup and shutdown tasks for the server as HiveMind services and contributions.
It's working like a charm, but is too verbose; contributions look something like:
<new> <set property="title" value="Cache Initialization"/> <set property="order" value="100"/> <set-create property="runnable" class="com.webct.vista.framework.cache.CacheStartup"/> </new>
Under the new system, this would look more like:
<task order="100" title="Cache Initialization"> <runnable class="com.webct.vista.framework.cache.CacheStartup"/> </task>
And its only that complex because I need a few different ways to define what to execute (the existing code is based on invoking static methods on classes, so I currently have a syntax for accomplishing that using reflection).