Объявление типа документа XML, обычно известное как DTD, является способом точного описания языка XML. DTD проверяют словарный запас и правильность структуры документов XML на соответствие грамматическим правилам соответствующего языка XML.
XML DTD может быть либо задан внутри документа, либо он может храниться в отдельном документе, а затем использоваться отдельно.
Синтаксис
Основной синтаксис DTD выглядит следующим образом —
<!DOCTYPE element DTD identifier
[
declaration1
declaration2
........
]>
В приведенном выше синтаксисе,
-
DTD начинается с <! DOCTYPE delimiter.
-
Элемент указывает синтаксическому анализатору проанализировать документ из указанного корневого элемента.
-
DTD-идентификатор — это идентификатор для определения типа документа, который может быть путем к файлу в системе или URL-адресом к файлу в Интернете. Если DTD указывает на внешний путь, он называется External Subset.
-
Квадратные скобки [] заключают в себе необязательный список объявлений сущностей, который называется Internal Subset .
DTD начинается с <! DOCTYPE delimiter.
Элемент указывает синтаксическому анализатору проанализировать документ из указанного корневого элемента.
DTD-идентификатор — это идентификатор для определения типа документа, который может быть путем к файлу в системе или URL-адресом к файлу в Интернете. Если DTD указывает на внешний путь, он называется External Subset.
Квадратные скобки [] заключают в себе необязательный список объявлений сущностей, который называется Internal Subset .
Внутренний DTD
DTD называется внутренним DTD, если элементы объявлены в файлах XML. Чтобы обозначить его как внутренний DTD, автономный атрибут в объявлении XML должен быть установлен в yes . Это означает, что объявление работает независимо от внешнего источника.
Синтаксис
Ниже приводится синтаксис внутреннего DTD —
<!DOCTYPE root-element [element-declarations]>
где root-element — это имя корневого элемента, а element-объявлений — это место, где вы объявляете элементы.
пример
Ниже приведен простой пример внутреннего DTD —
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?> <!DOCTYPE address [ <!ELEMENT address (name,company,phone)> <!ELEMENT name (#PCDATA)> <!ELEMENT company (#PCDATA)> <!ELEMENT phone (#PCDATA)> ]> <address> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </address>
Давайте пройдемся по приведенному выше коду —
Начать объявление — Начните объявление XML со следующего утверждения.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
DTD — Сразу после заголовка XML следует объявление типа документа , обычно называемое DOCTYPE —
<!DOCTYPE address [
Объявление DOCTYPE имеет восклицательный знак (!) В начале имени элемента. DOCTYPE сообщает анализатору, что DTD связан с этим документом XML.
Тело DTD — за объявлением DOCTYPE следует тело DTD, где вы объявляете элементы, атрибуты, сущности и нотации.
<!ELEMENT address (name,company,phone)> <!ELEMENT name (#PCDATA)> <!ELEMENT company (#PCDATA)> <!ELEMENT phone_no (#PCDATA)>
Здесь объявлено несколько элементов, которые составляют словарь документа <name>. <! ELEMENT name (#PCDATA)> определяет имя элемента типа «#PCDATA». Здесь #PCDATA означает анализируемые текстовые данные.
Завершение объявления — Наконец, раздел объявления DTD закрывается с помощью закрывающей скобки и закрывающей угловой скобки ( ]> ). Это эффективно завершает определение, и после этого документ XML следует сразу же.
правила
-
Объявление типа документа должно появляться в начале документа (с предшествующим только заголовком XML) — оно не разрешено где-либо еще в документе.
-
Подобно объявлению DOCTYPE, объявления элементов должны начинаться с восклицательного знака.
-
Имя в объявлении типа документа должно соответствовать типу элемента корневого элемента.
Объявление типа документа должно появляться в начале документа (с предшествующим только заголовком XML) — оно не разрешено где-либо еще в документе.
Подобно объявлению DOCTYPE, объявления элементов должны начинаться с восклицательного знака.
Имя в объявлении типа документа должно соответствовать типу элемента корневого элемента.
Внешний DTD
Во внешних DTD элементы объявляются вне XML-файла. Доступ к ним осуществляется путем указания системных атрибутов, которые могут быть либо легальным файлом .dtd, либо действительным URL-адресом. Чтобы обозначить его как внешнее DTD, автономный атрибут в объявлении XML должен быть установлен как no . Это означает, что декларация включает в себя информацию из внешнего источника.
Синтаксис
Ниже приводится синтаксис для внешнего DTD —
<!DOCTYPE root-element SYSTEM "file-name">
где file-name — это файл с расширением .dtd .
пример
В следующем примере показано использование внешнего DTD —
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?> <!DOCTYPE address SYSTEM "address.dtd"> <address> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </address>
Содержимое файла DTD address.dtd выглядит так:
<!ELEMENT address (name,company,phone)> <!ELEMENT name (#PCDATA)> <!ELEMENT company (#PCDATA)> <!ELEMENT phone (#PCDATA)>
Типы
Вы можете обратиться к внешнему DTD, используя системные идентификаторы или публичные идентификаторы .
Системные идентификаторы
Системный идентификатор позволяет указать местоположение внешнего файла, содержащего объявления DTD. Синтаксис выглядит следующим образом —
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Как видите, он содержит ключевое слово SYSTEM и ссылку URI, указывающую на местоположение документа.
Публичные идентификаторы
Открытые идентификаторы предоставляют механизм для определения местоположения ресурсов DTD и записываются следующим образом:
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Как видите, он начинается с ключевого слова PUBLIC, за которым следует специальный идентификатор. Публичные идентификаторы используются для идентификации записи в каталоге. Публичные идентификаторы могут следовать любому формату, однако обычно используемый формат называется формальными общедоступными идентификаторами или FPI .