Шпаргалка по DTD.
DTD – Один из способов формализованного описания схемы документа XML, сделанного на языке, понятном программе-анализатору.
В настоящее время идет отказ от использования DTD в пользу XSD (XML Schema Definition), по ряду причин:
- DTD использует отличный от XML синтаксис.
- Отсутствует типизация узлов.
- Отсутствует поддержка пространств имён.
Тем не менее этот способ ещё широко применяется поскольку является более простым и удобным для описания несложных схем документов.
КОНСТРУКЦИИ DTD
Описание схемы состоит из объявлений разметки (markup declaration), начинающихся с пары символов “<!” далее идет одно из слов:
- ELEMENT (указывает, что объявляется элемент)
- ATTLIST (список атрибутов)
- ENTITY (сущность)
- NOTATION (обозначение)
объявление разметки заканчивается “>”
ОБЪЯВЛЕНИЕ ТИПА ЭЛЕМЕНТА
(должен быть описан каждый элемент документа)
<!ELEMENT имя_элемента содержимое>
Содержимое:
- EMPTY – пустой (например
<br />
) - ANY – любое содержимое (встречается редко)
- (#PCDATA) – только символьные данные
- (список имен вложенных элементов ч.з. запятую) – вложенные элементы должны следовать в документе в том порядке, в котором они перечислены в объявлении. Объявляется только один уровень вложенности. Элементы можно группировать скобками.
Использование разделителя “|” между элементами указывает, что встречается один из разделенных элементов.
После элементов или скобок:
- “?” – встречается 0 или 1 раз
- “*” – 0 или несколько раз
- “+” – 1 или несколько раз
ОБЪЯВЛЕНИЕ АТРИБУТОВ
Атрибуты объявляются после объявления самого элемента. Все атрибуты одного элемента объявляются сразу, одним списком.
<!ATTLIST имя_элемента имя_атрибута тип свойства>
Для каждого атрибута записывается его имя, тип и признак обязательности.
Типы атрибутов:
- CDATA – (Character set of data) строка символов
- Список значений атрибута в скобках, перечисл чз “|”
- ID – уникальный идентификатор
- IDREF – идентификатор, содержащий одно из значений атрибута ID, исп в качестве ссылки на др элементы
- IDREFS – идентификатор, содержащий набор значений атрибута типа ID, перечисленных через пробел , так же исп в качестве ссылки сразу на несколько элементов.
- ENTITY – имя не проверяемой анализатором сущности (объявленные в том же описании DTD)
- ENTITIES – имена не проверяемых анализатором сущностей.
- NMTOKEN – слово, содержащее только символы, применяемые в именах (имена др элементов или атрибутов, например чтобы ссылаться на них)
- NMTOKENS – слова, перечисленные через пробелы
- NOTATION – обозначение (обозначения, расшифрованные в описании DTD)
- NOTATIONS – список нотаций
Признак обязательности
- Значение атрибута по умолчанию – указывается в кавычках и обозначает что атрибут необязателен.
- #REQUIRED – атрибут надо обязательно записывать в элементе.
- #IMPLIED – атрибут необязателен, у него нет значения по умолчанию.
- #FIXED – у атрибута есть только одно значение, кот записывается тут же через пробел.
При исп пространства имен надо всегда указывать уточненное (QName), а не локальное имя.
Атрибуты не входят в пространство имен по умолчанию.
Атрибуты “xml:lang” и “xml:space” так же дол быть объявлены в DTD в случае их применения
ОБЪЯВЛЕНИЕ СУЩНОСТЕЙ
(начинаются с “&”, а заканчиваются “;”)
Внутренние сущности – задаются при объявлении сущности.
<!ENTITY имя_сущности “сущность”>
— можно применять дальше в самом DTD ниже объявления.
Внешние сущности – содержатся в отдельном файле или встроены в программу-анализатор.
<!ENTITY имя_сущности SYSTEM “URI”>
<!ENTITY имя_сущности PUBLIC “общеизвестное_объявление” “URI”>
Параметризованные сущности – исп только внутри описания DTD
<!ENTITY % имя_сущности “сущность”>
Ссылка на параметризированную сущность начинается не с “&”, а с “%” !
Сущности делятся на разбираемые(parsed) и не разбираемые (unparsed). Разбираемые предст собой фрагмент документа XML или целый документ и подлежат обработке программой-анализатором после подстановки. После подстановки разборки сущность становится частью XML документа.
Двоичный программный код, чертеж, изображение и др. не надо обрабатывать средствами XML, для этого сущность надо объявить не разбираемой . Для этого в конце объявления сущности делается пометка “NDATA” и указывается обозначение (notation) вставляемого объекта.
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
ПРЕДОПРЕДЕЛЕННЫЕ СУЩНОСТИ В XML
<!ENTITY lt "&#60;">
<!ENTITY gt ">">
<!ENTITY amp "&#38;">
<!ENTITY apos "'">
<!ENTITY quot """>
ОБЪЯВЛЕНИЕ ОБОЗНАЧЕНИЯ (NOTATION)
Объявляются подобно сущностям, также могут быть внутренними и внешними.
Внутренняя
<!NOTATION имя_обозначения “расшифровка”>
Внешняя
SYSTEM | PUBLIC — в данном случае равнозначны т.к. в public не обязательно общеизвестная ссылка.
РАЗМЕЩЕНИЕ DTD
Либо в отдельном файле “*.dtd” указав его имя в кавычках во второй части пролога DOCTYPE, либо включить описание непосредственно во вторую часть пролога, заключив его в квадратные скобки.
<!DOCTYPE root_element SYSTEM "schema.dtd">
<?xml version="1.0" standalone="yes" ?>
<!DOCTYPE foo [
<!ELEMENT foo (#PCDATA)>
]>
<foo>
бла
</foo>