Как создать файл DTD с Java - PullRequest
       29

Как создать файл DTD с Java

2 голосов
/ 28 февраля 2012

Я не нов в Java, но нов в XML и DTD файлах.У меня есть инструмент (я написал), который сохраняет проекты в формате XML.Вы можете создавать приложения из основного проекта, но я должен проверить действительность приложений по отношению к основному проекту.Таким образом, для каждого основного проекта мне нужно создать файл DTD, а также файлы XML.Так что я могу проверить приложения (и XML-файлы) снова этот DTD-файл.Как я могу сгенерировать этот dtd файл с помощью Java.

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

Я бы сделал это, используя объекты и аннотации JAXB, и вместо XSD DTD.

  • create JAXB Java-объекты с аннотациями, представляющими структуру вашего XML,
  • запись ("marshall") в файл с использованием Marshaller,
  • , использование schemagen для генерации XSD из объектов JAXB и их аннотаций.

В качестве бонуса JAXB позволит вам читать XML обратно в структуру вашего объекта.

0 голосов
/ 28 февраля 2012

DTD часто получают плохой рэп, и часто по плохо продуманным причинам, таким как то, что можно назвать «увлечением разработчиков и модой» (например, последняя вещь - лучшая вещь). Например, довольно странно думать, что DTD не являются XML. Я думаю, что люди часто имеют в виду, что синтаксис DTD не является синтаксисом разметки документов XML, что является правильным. Но DTD являются по сути XML, то есть они являются в значительной степени частью Рекомендации XML, безусловно, в большей степени, чем Схема XML, которая, подобно пространствам имен XML, появилась позже как одна из большого числа дополнительных Рекомендаций, которая вызывает сложный вопрос "что такое XML-документ?" Но мы не будем касаться этого здесь. уверен в том, что каждый совместимый XML-процессор должен поддерживать декларацию DOCTYPE и обработку DTD; это бесплатно, вам больше ничего не нужно. А такие проекты, как Apache Catalog Resolver, обеспечивают поддержку как TR 9401, так и XML-каталогов («Entity Resolution»), которые имеют долгую историю отраслевой поддержки как в открытых, так и в коммерческих продуктах.

В отличие от этого, XML-схема поддерживается не всеми процессорами XML (или, по крайней мере, последовательно), а средства, с помощью которых XSD связан с экземпляром документа, обрабатываются с помощью ряда довольно запутанных атрибутов пространства имен XML, которые являются частью экземпляра документа (атрибуты корневого элемента), а не часть пролога. (По сути, это означает, что процессоры должны начать обработку документа до получения схемы. Если вы не понимаете важности этого различия, вам следует выполнить некоторую домашнюю работу.) Взаимозависимости в гибридных типах документов, использующих несколько XSD, являются сложными и недостаточно указанными. Вы можете обнаружить, что должны предоставить собственную поддержку для разрешения сущности.

И наличие ваших схем в разметке XML не всегда полезно, если вы не планируете управлять ими с помощью программных средств. DTD гораздо удобнее для чтения человеком, и, несмотря на некоторые противоречивые мнения, вы можете использовать префиксы пространства имен (см. XHTML Modularisation ). Если ваши требования к проверке носят в основном структурный характер (например, ваш контент ориентирован на документы, а не на данные), вы, вероятно, пытаетесь не проверять контент, а скорее разметку. DTD хороши для этого. Вы также можете взглянуть на совершенно разные подходы к проверке и ограничениям документов, такие как Schematron, который очень хорошо дополняет проверку DTD. Наконец, большинство инструментов, которые могут генерировать XSD, также могут генерировать DTD, и есть доступные приложения преобразования (см. Джеймс Кларк trang ).

DTD также будут существовать примерно столько же, сколько XML, скажем, 50-100 лет. В долгосрочной перспективе мы можем обнаружить, что XML-схема не выживет: она является лишь одним из множества жизнеспособных конкурентов, конкурентов, которые прибыли на сцену из-за множества отказов XSD. Я считаю, что комбинация DTD и Schematron в значительной степени идеально подходит для моих нужд и является гибким решением. Но YMMV.

Таким образом, вы действительно должны взглянуть на свои фактические требования к схеме / ограничениям, прежде чем принимать общие рекомендации по точному выбору. Вы можете обнаружить, что DTD работают очень хорошо. Они делают это примерно с 1971 года.

0 голосов
/ 28 февраля 2012

Я бы порекомендовал вам использовать XML-схему .xsd вместо DTD.

Он имеет несколько преимуществ перед DTD:

  1. .xsd - это XML;DTD не является.
  2. Схема выполнит более тщательную проверку, чем DTD.Он может применять типы, регулярные выражения, перечисления и т. Д.
  3. Интеллектуальная IDE, такая как IntelliJ, может генерировать для вас схему из существующего XML и наоборот.

Схема простагенерировать с помощью текстового редактора.Я думаю, что это полезное упражнение.

Я бы не советовал создавать такую ​​вещь в любом случае.Вы выражаете много знаний о документе в схеме или DTD.

...