Outra opção seria usar JAXB para gerar objetos Java e usar Hibernate para criar um esquema baseado na hierarquia de classes.
Dito isto, depende do que você está tentando fazer, e acho que essas soluções provavelmente serão frágeis e difíceis de manter.