Хороший вопрос.AFAIK, единственный способ - проверить ваш XML по DTD после генерации узлов.Как правило, это будет отдельный процесс.См. эту статью , чтобы узнать, как это сделать в Java (в зависимости от версии).
Но уточнить: если вы полностью контролируете генерацию XML, как вы хотите MarkupBuilder?чтобы помочь обеспечить достоверность ... бросить исключение, если вы пытаетесь создать узел, который не разрешен в определенной точке? Допустимость неполного XML-документа не является четко определенной концепцией. Что если недействительность заключается в том, что обязательный элемент отсутствует ... при создании его родительского узла все его дочерние элементы будут "отсутствовать",Так как же MarkupBuilder узнает, когда решить, что XML недействителен?Или что, если вы отправляете атрибут типа ID или IDREF, и вы не можете проверять уникальность или ссылочную целостность, пока все другие идентификаторы не будут переданы?
Я не могу представить себе процесс, который действительно работал бы для гарантии правильного вывода XML, который значительно отличается от проверки вывода после его создания.
Определенно есть способы частично проверка во время вывода, т. Е. Для обнаружения некоторых проблем, которые могут привести к неверному выводу.
Однако XSLT с поддержкой схемы, по-видимому, может выполнить полную проверку во время генерации XML.В статье http://www.ibm.com/developerworks/xml/library/x-schemaxslt.html#validout рассказывается об использовании XSLT-преобразований с учетом схемы, чтобы гарантировать, что вывод действителен.Я не совсем уверен, как это работает.Может быть, он проверяет, что он может во время генерации, но для некоторых ограничений он должен дождаться окончания вывода, прежде чем объявить его действительным или нет.
Это не отвечает на ваш вопрос о Groovy MarkupBuilder, но проливает светна что можно.AFAIK, нет свободных процессоров XSLT, которые обеспечивают обработку с учетом схемы;но у Saxon-SA есть 30-дневная пробная версия, и, вероятно, другие коммерческие тоже.