DTD описывает схему документа для конкретного языка разметки посредством набора объявлений (объектов-параметров, элементов и атрибутов), которые описывают его класс (или тип) с точки зрения синтаксических ограничений этого документа. Также DTD может объявлять конструкции, которые всегда необходимы для определения структуры документа, но, зато, могут влиять на интерпретацию определённых документов.
Объявление объекта-параметра определяет макрос определённого типа, на который можно ссылаться и который может быть развернут где-нибудь в DTD. Эти макросы могут не появляться в самом документе, а быть только в DTD. Если на объект-параметр ссылаются по имени их DTD, то он разворачивается в строку, в которой указано содержимое этого объекта.
Объект-параметр fontstyle содержит в себе группу тегов TT | I | B | BIG | SMALL .
"#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;" >
Объект-параметр inline содержит в себе текстовые данные и ещё четыре объекта-параметра fontstyle , phrase , special и formctrl .
Объявления элементов образовывают перечень разрешенных названий элементов в документе, а также определяют информацию относительно тегов (являются ли они обязательными) и модели содержимого для каждого элемента.
Различные ключевые слова и символы определяют содержимое элемента:
(DT|DD) +>
Элемент DL должен содержать один и более элементов DT или DD в произвольном порядке.
(%block;|SCRIPT) + -(FORM) >
Элемент FORM должен содержать в себе один или более элементов с объектом-параметром block или элементы SCRIPT в произвольном порядке, однако исключена возможность содержать ещё один элемент FORM .
С каждым элементом DTD-документа можно сопоставить список атрибутов. Для этого используется директива!ATTLIST , в которой указываются имя элемента, с которым может быть сопоставлен список атрибутов и параметры каждого атрибута: его имя, тип и свойства по умолчанию.
Например:
name CDATA #REQUIRED>
В этом примере определен атрибут name для элемента MAP . Он является обязательным.
Существуют такие типы атрибутов:
Существуют такие свойства по умолчанию:
Чтобы связать документ с определённым DTD, необходимо в начале текста документа указать элемент Объявление Типа Документа.
В зависимости от места расположения DTD, Объявление Типа Документа может быть двух видов:
Набор объявлений DTD содержится в самом тексте документа. Например:
]> ]>
Набор объявлений DTD располагается в отдельном текстовом файле с расширением.dtd В этом случае ссылку на файл можно сделать через публичный идентификатор и (или) через системный идентификатор. Например:
"http://www.w3.org/TR/html4/strict.dtd">
Пример очень простого XML DTD, описывающего список людей:
(person*) > (name, birthdate?, gender?, socialsecuritynumber?) > (#PCDATA) > (#PCDATA) > (#PCDATA) >
Начиная с первой строки:
Пример XML-документа, использующего этот DTD:
Wikimedia Foundation . 2010 .
DTD - , die in einer ASCII Datei (ASCII) abgelegte Beschreibung der Struktur von Dokumenten, welche alle vom selben Typ sind. Eine DTD wird nach den Regeln der international anerkannten… … Universal-Lexikon
DTD - may stand for: Contents 1 Media 2 Music 3 Sports 4 Technologies 4.1 Computing … Wikipedia
DTD - steht für: Inhaltsverzeichnis 1 Medien 2 Music 3 Technologien 3.1 Computer 3.1.1 Spiele … Deutsch Wikipedia
Dtd - steht für: Darwin Digital Television, eine australische Fernsehstation Delta Tau Delta, eine US amerikanische Studentenorganisation Document Type Definition, siehe Dokumenttypdefinition … Deutsch Wikipedia
DTD - (dē tē dēʹ) n. A set of rules for marking up a document in SGML. * * * … Universalium
DTD - (document type definition) specification written in the Standard Generalized Markup Language and containing information about the format of a particular document (Computers) … English contemporary dictionary
Используйте для определения структуры XML-документов XML-схемы вместо DTD
XML-схема обладает более мощными возможностями, чем DTD. Для иллюстрации преимуществ использования механизма XML-схем в первых трех листингах сравниваются различные способы представления элементов. В представлена выдержка из XML-документа. В показаны два элемента, объявленные в синтаксисе DTD, а в представлен синтаксис, соответствующий XML-схеме. Обратите внимание, что синтаксис в Листинге 3 подобен синтаксису XML. При использовании схемы, валидирующий парсер может выполнить проверку, является ли элемент InvoiceNo положительным целым числом, и состоит ли ProductID из заданного набора символов (шести цифр и одной буквы от A до Z). Парсер, обрабатывающий DTD-определение, может лишь подтвердить, что данные элементы представляют собой строки.
Несмотря на то, что DTD служат разработчикам SGML и HTML в качестве механизма описания структурированной информации вот уже на протяжении 20-ти лет, DTD обладают некоторыми ограничениями по сравнению с XML-схемами.
Согласно DTD элемент может быть представлен одним из трех способов:
DTD не обладает синтаксисом XML и предлагает лишь ограниченную поддержку для типов и пространств имен.
При совместной работе одна сторона может обрабатывать документы других сторон, и разные стороны могут представлять свои элементы данных по-разному. Более того, в отдельном документе им может потребоваться независимо друг от друга ссылаться на элементы с одинаковым именем, созданные разными сторонами. Использование XML-схемы позволяет различать определения с одним и тем же именем при помощи определения разных пространств имен.
Такая XML-схема определяет набор новых имен, таких как имена элементов, типов, атрибутов, групп атрибутов, чьи определения и объявления описаны в схеме. В имена определяются как InvoiceNo , ProductID и ProductCode .
Имена, определенные в схеме принадлежат так называемому целевому пространству имен . Само по себе пространство имен является фиксированным, произвольным именем, которое должно соответствовать синтаксису URL. К примеру, пространство имен для схемы, представленной в , можно задать следующим образом: http://www.SampleStore.com/Account .
Синтаксис объявления пространства имен иногда может сбить с толку. Объявление начинается с http:// , однако оно не ссылается на файл с описанием схемы. На самом деле, ссылка http://www.SampleStore.com/Account вообще не ведет ни на один файл, а только на назначенное имя.
Определения и объявления в схеме могут ссылаться на имена, которые могут принадлежать другим пространствам имен. В данной статье мы ссылаемся на такие пространства имен как на исходные пространства имен . В каждой схеме может быть определено одно целевое пространство имен и возможно множество исходных пространств имен. Вообще, каждое имя в заданной схеме принадлежит некоему пространству имен. Имена пространства имен могут быть довольно длинными, однако их можно сократить при помощи синтаксиса объявления xmlns в документе XML-схемы. Все эти концепции проиллюстрированы в .
В XML-схеме, представленной с , пространством имен targetNamespace является http://www.SampleStore.com/Account , оно содержит имена InvoiceNo , ProductID и ProductCode . Имена schema , element , simpleType , pattern , string и positive-integer принадлежат исходному пространству имен http://www.w3.org/1999/XMLSchema , которое сокращается как xsd путем объявления xmlns . В псевдониме xsd нет ничего особенного, можно выбрать и другое имя. Для удобства и простоты в оставшейся части статьи мы будем использовать префикс xsd для ссылки на пространство имен http://www.w3.org/1999/XMLSchema , пропуская уточнение xsd в некоторых частях кода. В нашем примере targetNamespace является также одним из исходных пространств имен, так как имя ProductCode используется в определении других имен.
Определением элемента заключается в определении его имени и модели контента. В XML-схеме модель контента элемента определяется его типом. Следовательно, элементы в XML-документе могут иметь только значения, которые подходят типам, определенным в его схеме.
Спецификация XML-схемы определяет несколько простых типов для значений, как показано в Таблице 2 -предопределенные простые типы значений.
Тип элемента может быть простым или комплексным (сложным). Элемент простого типа не может содержать другие элементы или атрибуты. Комплексный тип может создавать эффект встраивания элементов в другие элементы или может ассоциировать атрибуты с элементом. До этого момента мы использовали только примеры с простыми типами, определенными пользователем (см. ProductCode). В спецификацию XML-схемы также включены предопределенные простые типы (см. вставку ). Предопределенный простой тип ограничивает значения по их базовому типу. К примеру, значением предопределенного простого типа ProductCode является подмножество значений базового типа string .
Элемент, который не содержит атрибутов или других элементов может быть отнесен к простому типу, предопределенному или определенному пользователем, такому как string , integer , decimal , time , ProductCode и т.п.
Теперь попробуем добавить к простому элементу price из атрибут currency . Вы не сможете этого сделать, так как элемент простого типа не может иметь атрибутов. Если вы хотите добавить атрибут, вам необходимо определить price как элемент комплексного типа. В примере из , мы определяем, так называемый анонимный тип , в котором комплексному типу не дается явного имени. Другими словами, атрибут name элемента complexType не определен.
В XML-документе в элемент могут быть вложены другие элементы. Это требование выражается напрямую в DTD. XML-схема вместо этого определяет элемент и его тип, который может включать объявления других элементов и атрибутов. Пример приведен в .
XML-схема предлагает большую гибкость, чем DTD при выражении ограничений для модели контента элементов. На простейшем уровне, таком как в DTD, вы можете ассоциировать с элементом атрибуты, а также указать, что в нем может появляться последовательность из только одного (1), нуля или более (*), или одного или более (+) элементов из заданного набора элементов. В XML-схеме можно выразить дополнительные ограничения, используя для этой цели, к примеру, атрибуты minOccurs и maxOccurs для элемента element и элементы choice , group и all .
В тег Title является опциональным по отношению к тегу Book (такое же правило можно задать и в DTD). Однако здесь также говорится, что в элементе Book должен быть хотя бы один и не более двух элементов Author . Значением атрибутов minOccurs и maxOccurs тега element по умолчанию является 1. Элемент choice указывает на то, что может появиться только один из указанных дочерних элементов. Другой элемент all определяет, что все дочерние элементы могут появляться только один раз, вместе и в любом порядке, или не появляться совсем. В объявляется, что оба тега Title и Author должны появляться в Book в любом порядке, или не появляться вообще. Подобные ограничения сложно выразить при помощи DTD.
В данном документе мы раскрыли при помощи простых примеров наиболее фундаментальные концепции, необходимые для определения структуры элементов при помощи XML-схемы. Доступно также множество других мощных механизмов:
Дополнительную информацию по XML-схемам можно получить из документаций на сайтах W3C (См. ) и dW XML zone. Теперь, когда спецификация XML-схемы получила подтверждение в качестве кандидата на рекомендацию W3C, вы без сомнения можете использовать ее в полной мере.
Определение типов документа (DTD) декларирует допустимые строительные блоки XML документа. Оно задает структуру документа со списком допустимых элементов и атрибутов.
DTD может декларироваться как в коде самого XML документа, так и во внешнем файле с подключением его к XML документу.
Если DTD декларируется внутри XML файла, то она должны быть заключена в специальный тег декларации DOCTYPE , который имеет следующий синтаксис:
Пример XML документа с внутренним DTD:
]>
DTD в приведенном примере интерпретируется следующим образом:
Если DTD декларируется во внешнем файле, то подключение осуществляется следующим образом:
Ниже приводится тот же XML документ, что и ранее, но с внешней декларацией DTD:
А вот что содержится в файле "note.dtd", который декларирует DTD:
С DTD каждый ваш XML файл может нести описание своего собственного формата.
С DTD различные, не связанные друг с другом, группы людей могут приходить к соглашению о стандартах взаимно обмениваемых данных.
С DTD вы можете быть уверены, что получаемые из внешних источников данные будут корректными.
Также, вы можете использовать DTD, чтобы проводит проверки корректности своих собственных данных.
Шпаргалка по DTD .
DTD – Один из способов формализованного описания схемы документа XML , сделанного на языке, понятном программе-анализатору.
В настоящее время идет отказ от использования DTD в пользу XSD (XML Schema Definition ), по ряду причин:
Тем не менее этот способ ещё широко применяется поскольку является более простым и удобным для описания несложных схем документов.
Описание схемы состоит из объявлений разметки (markup declaration ), начинающихся с пары символов “ ” далее идет одно из слов:
объявление разметки заканчивается “> ”
(должен быть описан каждый элемент документа)
Содержимое:
Атрибуты объявляются после объявления самого элемента. Все атрибуты одного элемента объявляются сразу, одним списком.
Для каждого атрибута записывается его имя, тип и признак обязательности.
При исп пространства имен надо всегда указывать уточненное (QName ), а не локальное имя.
Атрибуты не входят в пространство имен по умолчанию.
Атрибуты “xml:lang ” и “xml:space ” так же дол быть объявлены в DTD в случае их применения
(начинаются с “&”, а заканчиваются “;”)
Внутренние сущности – задаются при объявлении сущности.
— можно применять дальше в самом DTD ниже объявления.
Внешние сущности – содержатся в отдельном файле или встроены в программу-анализатор.
Параметризованные сущности – исп только внутри описания DTD
Сущности делятся на разбираемые(parsed ) и не разбираемые (unparsed ). Разбираемые предст собой фрагмент документа XML или целый документ и подлежат обработке программой-анализатором после подстановки. После подстановки разборки сущность становится частью XML документа.
Двоичный программный код, чертеж, изображение и др. не надо обрабатывать средствами XML , для этого сущность надо объявить не разбираемой. Для этого в конце объявления сущности делается пометка “NDATA ” и указывается обозначение (notation ) вставляемого объекта.
Объявляются подобно сущностям, также могут быть внутренними и внешними.
Внутренняя
Внешняя
SYSTEM | PUBLIC — в данном случае равнозначны т.к. в public не обязательно общеизвестная ссылка.
Либо в отдельном файле “*.dtd ” указав его имя в кавычках во второй части пролога DOCTYPE , либо включить описание непосредственно во вторую часть пролога, заключив его в квадратные скобки.
]>
В этой главе мы обсудим о атрибутах DTD. Атрибут дает больше информации о элементе или более точно он определяет свойство элемента. Атрибут XML всегда в форме пары им-значения. Элемент может иметь любое число уникально атрибутов.
Объявление атрибута очень много подобно к объявлениям элемента в много путей за исключением одного; вместо объявлять позволяемое содержание для элементов, вы объявляете список позволяемых атрибутов для каждого элемента. Эти списки вызваны объявлением ATTLIST.
Основной синтаксис объявления атрибутов DTD следующим образом:
В вышеуказанном синтаксисе
Старт атрибутов DTD с
элемент-имя определяет имя элемента к которому атрибут применяется.
атрибут-имя определяет имя атрибута который включен с элемент-именем.
атрибут-тип определяет тип атрибутов. Мы обсудим больше на этом в следующих разделах.
атрибут со значением принимает фикчированное значение которое атрибуты должны определить. Мы обсудим больше на этом в следующих разделах.
Ниже простой пример для объявления атрибута в DTD:
]>
Препятствуйте нам пойти через вышеуказанный Код:
Начните с объявлением XML с следующим заявлением:
Немедленно после коллектора XML тип объявление документа, обыкновенно называемое DOCTYPE:
DOCTYPE сообщает парсер что DTD связан с этим документом XML. Объявление DOCTYPE имеет восклицательный знак (!) в начале имени элемента.
Следование тело DTD. Здесь мы объявляли элемент и атрибут:
Удостоверение личности атрибута для имени элемента определено как:
Здесь тип атрибута CDATA и свое значение #REQUIRED .
Все атрибуты используемые в документе XML необходимо объявить в определении типа документа (DTD) используя объявление Атрибут-Списка
Атрибуты могут только появиться в старт или пустые бирки.
Ключевое слово ATTLIST должно находиться в верхушке - случае
Никакие двойные имена атрибута не будут позволены внутри список атрибута для, котор дали элемента.
Объявляя атрибуты, вы можете определить как обработчик должен отрегулировать данные которые появляются в значение. Мы можем классифицировать атрибут печатаем внутри 3 главным образом категории на машинке:
Тип строки
Типы Tokenized
Перечисленные типы
Следовать таблица обеспечивает сводку различных типов атрибута:
Тип | Описание |
---|---|
CDATA | CDATA данные по характера (текст и не повышение цены). Тип атрибута строки . |
Удостоверение личности | Это уникально обозначение атрибута. Оно не должен появиться больше чем раз. Тип атрибута Tokenized . |
IDREF | Оно использован для того чтобы снабдить ссылками удостоверение личности другого элемента. Оно использован для того чтобы установить элементы связь между. Тип атрибута Tokenized . |
IDREFS | Оно использован для того чтобы снабдить ссылками множественное удостоверение личности. Тип атрибута Tokenized . |
РЕАЛЬНОСТЬ | Она представляет внешнюю реальность в документе. Тип атрибута Tokenized . |
РЕАЛЬНОСТИ | Оно представляет список внешних реальностей в документе. Тип атрибута Tokenized . |
NMTOKEN | Оно подобен к CDATA и атрибут со значением состоит из действительного имени XML. Тип атрибута Tokenized . |
NMTOKENS | Оно подобен к CDATA и атрибут со значением состоит список действительного имени XML. Тип атрибута Tokenized . |
НОТАЦИЯ | Элемент будет снабжен ссылками к объявленной нотации в документе DTD. Перечисленный тип атрибута . |
Обозначение | Оно позволяет определить специфический список значений где одно из значений должно соответствовать. Перечисленный тип атрибута . |
В пределах каждого объявления атрибута, вы должны определить как значение появится в документ. Вы можете определить если атрибут:, то
смогите иметь автоматически принимаемое значение
смогите иметь фикчированное значение
подразумевает
Он содержит автоматически принимаемое значение. Значения могут быть заключили в одиночные кавычки (") или двойные цитаты (")
СинтаксисСледование синтаксис значения:
где значени по умолчанию-значение определенный атрибут со значением.
ПримерСледование простой пример объявления атрибута с автоматически принимаемым значением:
]>
В этом примере мы имеем элемент имени с удостоверением личности атрибута которого автоматически принимаемое значение 0 . Автоматически принимаемое значение заключено в пределах двойных цитат.
ключевое слово #FIXED следовать фикчированным значением использовано когда вы хотите определить что атрибут со значением постоянн и не может быть изменен. Общяя польза фикчированных атрибутов определяет номера версии.
СинтаксисСледование синтаксис фикчированных значений:
где #FIXED определенный атрибут со значением.
ПримерСледование простой пример объявления атрибута с ФИКЧИРОВАННЫМ значением:
]>
В этом примере мы использовали #FIXED ключевого слова где оно показывает что значение «tutorialspoint» единственное значение для имени
атрибута
Следование инвалидный DTD:
]>
Когда вы хотите определите что атрибут необходим, используйте ключевое слово #REQUIRED.
СинтаксисСледование синтаксис #REQUIRED:
где #REQUIRED определенный тип атрибута.
ПримерСледование простой пример объявления атрибута DTD с ключевым словом #REQUIRED:
]>
В этом примере мы использовали ключевое слово #REQUIRED для того чтобы определить что удостоверение личности атрибута необходимо предусмотреть для имени элемент- имени
Объявляя атрибуты вы должны всегда определять объявление значения. Если атрибут вы объявляете не имеет никакое автоматически принимаемое значение, то не имеет никакое фикчированное значение, и не требует, тогда вы должны объявить что атрибут как подразумевали . #IMPLIED ключевого слова использовано для того чтобы определить атрибут как подразумевали .
СинтаксисСледование синтаксис #IMPLIED:
где #IMPLIED определенный тип атрибута.
ПримерСледование простой пример #IMPLIED
]>
В этом примере мы использовали #IMPLIED ключевого слова по мере того как мы не хотим определить любые атрибуты, котор нужно включить в имени элемента. Оно опционный.