Можно ли использовать groovy.xml.MarkupBuilder с заданным DTD? - PullRequest
1 голос
/ 09 ноября 2010

Вопрос довольно хорошо подводит итог, во всяком случае, лишние детали никогда не бывают лишними.

Я хочу создать Apache Forrest документы, используя groovy.xml.MarkupBuilder. Я хочу, чтобы мои документы были не только правильно сформированными, но и действительными в соответствии с Форрест DTD . Как я могу это гарантировать?

1 Ответ

1 голос
/ 09 ноября 2010

Хороший вопрос.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-дневная пробная версия, и, вероятно, другие коммерческие тоже.

...