Подтвердить что ты не робот

Как выбрать DTD и XSD

Я хочу использовать DTD или XSD для описания моего XML-документа. Я читал, что XSD лучше DTD, поскольку они поддерживают пространства имен и типы данных, а DTD старше.

Означает ли это, что я должен использовать только XSD для всех будущих потребностей и полностью игнорировать DTD в качестве опции? Должен ли я даже изучать структуру DTD?

Какие факторы следует учитывать при выборе между XSD и DTD?

4b9b3361

Ответ 1

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

Однако, для ваших текущих целей описания XML-документа, действительно придерживайтесь XSD.

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

Ответ 2

Это действительно зависит от того, насколько сложна структура, которую вам нужно настроить.

Если вам нужны такие вещи, как namespacing и datatypes, обязательно пойдите с XSD. Если вам нужна только небольшая схема для проверки, DTD даст вам более высокую производительность, поскольку в ней нет синтаксического анализа XML.

Как я понимаю, XSD получен из DTD, поэтому понимание DTD даст прочную основу для обучения XSD, плюс указать некоторые из коротких предложений DTD.

Ответ 3

Было бы неловко понимать структуру DTD (это поможет вам лучше понять XSD в конечном итоге)... но вы должны использовать XSD, двигаясь вперед.

Ответ 4

Нет вреда в обучении DTD, но обязательно используйте XSD, потому что XSD имеет больше силы,

С XSD вы можете не только проверить структуру/иерархию тегов XML, но также и

  • Вы можете определить тип данных значения узлов. [дата, номер, строка и т.д.]
  • Вы также можете определить data_types, [пример, для node , возможные данные могут быть один из 12 месяцев.. так что вам нужно определить все 12 месяцев в новом тип данных, записывающий все 12 месяцев имена в качестве значений перечисления. валидация показывает ошибку, если вход XML содержит любое другое значение, чем эти 12 значений..]
  • Вы можете установить ограничение на появление элементов, используя minOccurs и maxOccurs, значение по умолчанию значения равны 1 и 1.

.. и многое другое...

Существуют некоторые ограничения: как будто,

  • Элемент (имя), определенный в файле XSD должен быть определен только с одним типом данных.
  • Вы не можете проверить атрибут node/ используя значение другого node/атрибут.

Ответ 5

Существует очень важная проблема IMHO для использования DTD (возможно, вместе с XSD, если вам нужна глубокая проверка):

В DTD вы можете определить свои собственные объекты, например:

<!ENTITY MyName "DrDr.Hannibal Xerxes Utah,MBA and CEO">

В вашем документе вы можете там, где вам нужно просто code & MyName; вместо этого набрав все это.

Кроме того, предположим, что у вас есть XML-подобный файл (возможно, созданный другим приложением), который состоит из множества похожих тегов, но не имеет корневого тега, например:

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like 'ü' -->
<Book Author="Author1">
  <Titel>Erstes Buch</Titel>
</Book>
...
<Book Author="Author5">
  <Titel>Fünftes Buch</Titel>
</Book>

Предположим, что этот файл имеет имя "Booklist.TXT",

Теперь вы можете запрограммировать свой мастер-xml:

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like 'ü' -->
<DOCTYPE MyRoot [
<ENTITY AllBooks SYSTEM "Booklist.TXT">
]

<MyRoot>
... some prefix-stuff as needed ...
&AllBooks; <!-- here are all the Books -->
... some post stuff es needed ...
</MyBook>

и всякий раз, когда вам нужны книги в другом контексте, вы должны только закодировать окружающие xml и habe, чтобы не касаться или копировать сам книжный список, кроме того, вы можете обслуживать его в одном месте и иметь все изменения в любом документе.

Ответ 6

Это старая строка, но в случае, если кто-то еще сталкивается с ней... из того, что я могу сказать, DTD все еще имеет два преимущества, которые XSD не делает, а именно включение функции ENTITY, которая не существует в XSD. Это довольно удивительная функция, которая сообщает компилятору, как обрабатывать потенциально незнакомые типы файлов, определяя, какие программы открывать для их обработки.

Кроме того, DTD записываются в спецификацию XML, поэтому они могут быть записаны непосредственно в XML-документы, тогда как XSD должен существовать как внешний файл и подключаться. Не очень важно, особенно при использовании в больших документах.

Я думаю, что XSD все еще намного лучше и естественнее, поскольку он использует синтаксис XML, просто хотел играть адвоката дьявола:)

Ответ 7

XML Schema может выполнять более сложные проверки. Например, если DTD проверяет, что тип данных XML-элемента является целым или строковым. Схема XML может выполнять более сложные проверки, например, если элемент xml представляет собой строку, начинающуюся с буквы верхнего регистра или положительного целого числа. Наконец, в XML-схеме используется синтаксис XML и его естественный выбор для разработки веб-сервисов.