Учебники

DTD — Краткое руководство

DTD — Обзор

Объявление типа документа XML, широко известное как DTD, является способом точного описания языка XML. DTD проверяют правильность структуры и словаря XML-документа по отношению к грамматическим правилам соответствующего языка XML.

XML-документ может быть определен как —

  • Правильно сформированный — если документ XML придерживается всех общих правил XML, таких как теги, должны быть правильно вложенными, открывающие и закрывающие теги должны быть сбалансированы, а пустые теги должны заканчиваться символом «/>», то он называется правильно сформированным ,

    ИЛИ ЖЕ

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

Правильно сформированный — если документ XML придерживается всех общих правил XML, таких как теги, должны быть правильно вложенными, открывающие и закрывающие теги должны быть сбалансированы, а пустые теги должны заканчиваться символом «/>», то он называется правильно сформированным ,

ИЛИ ЖЕ

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

Следующая диаграмма показывает, что DTD используется для структурирования XML-документа:

Типы

DTD может быть классифицирован на основе декларации в XML-документе, например:

  • Внутренний DTD

  • Внешний DTD

Внутренний DTD

Внешний DTD

Когда DTD объявлен в файле, он называется Internal DTD, а если он объявлен в отдельном файле, он называется External DTD .

Мы узнаем больше об этом в главе Синтаксис DTD

Характеристики

Ниже приведены некоторые важные моменты, которые описывает DTD:

  • элементы, которые могут появиться в документе XML.

  • порядок, в котором они могут появляться.

  • необязательные и обязательные элементы.

  • атрибуты элемента и являются ли они необязательными или обязательными.

  • могут ли атрибуты иметь значения по умолчанию.

элементы, которые могут появиться в документе XML.

порядок, в котором они могут появляться.

необязательные и обязательные элементы.

атрибуты элемента и являются ли они необязательными или обязательными.

могут ли атрибуты иметь значения по умолчанию.

Преимущества использования DTD

  • Документация — Вы можете определить свой собственный формат для файлов XML. Глядя на этот документ, пользователь / разработчик может понять структуру данных.

  • Проверка — это дает возможность проверить достоверность файлов XML, проверив, отображаются ли элементы в правильном порядке, имеются ли обязательные элементы и атрибуты, не были ли вставлены элементы и атрибуты неправильно, и так далее.

Документация — Вы можете определить свой собственный формат для файлов XML. Глядя на этот документ, пользователь / разработчик может понять структуру данных.

Проверка — это дает возможность проверить достоверность файлов XML, проверив, отображаются ли элементы в правильном порядке, имеются ли обязательные элементы и атрибуты, не были ли вставлены элементы и атрибуты неправильно, и так далее.

Недостатки использования DTD

  • Он не поддерживает пространства имен. Пространство имен — это механизм, с помощью которого имена элементов и атрибутов могут быть назначены группам. Однако в DTD пространства имен должны быть определены внутри DTD, что нарушает цель использования пространств имен.

  • Поддерживается только тип данных текстовой строки.

  • Это не объектно-ориентированный. Следовательно, концепция наследования не может быть применена к DTD.

  • Ограниченные возможности выразить мощность элементов.

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

Поддерживается только тип данных текстовой строки.

Это не объектно-ориентированный. Следовательно, концепция наследования не может быть применена к DTD.

Ограниченные возможности выразить мощность элементов.

DTD — Синтаксис

XML DTD может быть либо указан внутри документа, либо его можно сохранить в отдельном документе, а затем документ можно связать с документом DTD для его использования.

Синтаксис

Основной синтаксис DTD выглядит следующим образом —

<!DOCTYPE element DTD identifier
[
   declaration1
   declaration2
   ........
]>

В приведенном выше синтаксисе —

  • DTD начинается с <! DOCTYPE delimiter.

  • Элемент указывает синтаксическому анализатору проанализировать документ из указанного корневого элемента.

  • DTD-идентификатор — это идентификатор для определения типа документа, который может быть путем к файлу в системе или URL-адресом к файлу в Интернете. Если DTD указывает на внешний путь, он называется внешним подмножеством.

  • Квадратные скобки [] заключают необязательный список объявлений сущностей, называемых внутренним подмножеством .

DTD начинается с <! DOCTYPE delimiter.

Элемент указывает синтаксическому анализатору проанализировать документ из указанного корневого элемента.

DTD-идентификатор — это идентификатор для определения типа документа, который может быть путем к файлу в системе или URL-адресом к файлу в Интернете. Если DTD указывает на внешний путь, он называется внешним подмножеством.

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

Внутренний 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.

DTD — Компоненты

В этой главе мы обсудим компоненты XML с точки зрения DTD. DTD будет в основном содержать объявления следующих компонентов XML:

  • Элемент

  • Атрибуты

  • юридические лица

Элемент

Атрибуты

юридические лица

элементы

Элементы XML могут быть определены как строительные блоки документа XML. Элементы могут вести себя как контейнер для хранения текста, элементов, атрибутов, объектов мультимедиа или их комбинации.

Каждый документ XML содержит один или несколько элементов, границы которых либо ограничены начальными и конечными тегами, либо пустыми элементами.

пример

Ниже приведен простой пример элементов XML

<name>
   Tutorials Point
</name>

Как видите, мы определили тег <name>. Между начальным и конечным тегом <name> есть текст. Элементы, когда они используются в XML-DTD, должны быть объявлены, что будет подробно обсуждаться в главе Элементы DTD .

Атрибуты

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

пример

Ниже приведен простой пример атрибутов XML —

<img src = "flower.jpg"/>

Здесь img — имя элемента, тогда как src — это имя атрибута, а flower.jpg — значение, данное для атрибута src .

Если атрибуты используются в XML DTD, их необходимо объявить, что будет подробно обсуждаться в главе Атрибуты DTD.

юридические лица

Сущности являются заполнителями в XML. Они могут быть объявлены в прологе документа или в DTD. Объекты могут быть в первую очередь классифицированы как —

  • Встроенные объекты

  • Персонажи персонажей

  • Общие лица

  • Параметр сущностей

Встроенные объекты

Персонажи персонажей

Общие лица

Параметр сущностей

Есть пять встроенных сущностей, которые играют в правильно сформированном XML, они —

  • амперсанд: & amp;

  • Одинарная кавычка: & apos;

  • Больше чем: & gt;

  • Менее чем: & lt;

  • Двойная кавычка: & quot;

амперсанд: & amp;

Одинарная кавычка: & apos;

Больше чем: & gt;

Менее чем: & lt;

Двойная кавычка: & quot;

Мы подробнее рассмотрим объявления сущностей в XML DTD в главе DTD Entities

DTD — Элементы

Элементы XML могут быть определены как строительные блоки документа XML. Элементы могут вести себя как контейнер для хранения текста, элементов, атрибутов, объектов мультимедиа или их комбинации.

Элемент DTD объявляется с объявлением ELEMENT. Когда файл XML проверяется DTD, анализатор сначала проверяет корневой элемент, а затем проверяются дочерние элементы.

Синтаксис

Все объявления элементов DTD имеют эту общую форму —

<!ELEMENT elementname (content)>
  • Объявление ELEMENT используется для указания синтаксического анализатора, который вы собираетесь определить элемент.

  • elementname — это имя элемента (также называемое универсальным идентификатором ), которое вы определяете.

  • content определяет, какой контент (если есть) может идти внутри элемента.

Объявление ELEMENT используется для указания синтаксического анализатора, который вы собираетесь определить элемент.

elementname — это имя элемента (также называемое универсальным идентификатором ), которое вы определяете.

content определяет, какой контент (если есть) может идти внутри элемента.

Типы содержимого элемента

Содержимое объявления элементов в DTD можно классифицировать следующим образом:

  • Пустой контент

  • Содержание элемента

  • Смешанный контент

  • Любой контент

Пустой контент

Содержание элемента

Смешанный контент

Любой контент

Пустой контент

Это особый случай объявления элемента. Это объявление элемента не содержит никакого содержимого. Они объявлены с ключевым словом EMPTY .

Синтаксис

Ниже приводится синтаксис объявления пустого элемента —

<!ELEMENT elementname EMPTY >

В приведенном выше синтаксисе —

  • ELEMENT — объявление элемента категории EMPTY

  • elementname — имя пустого элемента.

ELEMENT — объявление элемента категории EMPTY

elementname — имя пустого элемента.

пример

Ниже приведен простой пример, демонстрирующий объявление пустого элемента —

<?xml version = "1.0"?>

<!DOCTYPE hr[
   <!ELEMENT address EMPTY>    
]>
<address />

В этом примере адрес объявлен как пустой элемент. Разметка для элемента address будет выглядеть как <address />.

Элемент Содержимое

В объявлении элемента с содержимым элемента содержимое будет допустимым элементом в скобках. Мы также можем включить более одного элемента.

Синтаксис

Ниже приведен синтаксис объявления элемента с содержимым элемента:

<!ELEMENT elementname (child1, child2...)>
  • ELEMENT — тег объявления элемента

  • elementname — это имя элемента.

  • child1, child2 .. являются элементами, и каждый элемент должен иметь свое собственное определение в DTD.

ELEMENT — тег объявления элемента

elementname — это имя элемента.

child1, child2 .. являются элементами, и каждый элемент должен иметь свое собственное определение в 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>

В приведенном выше примере address является родительским элементом, а name , company и phone_no являются его дочерними элементами.

Список операторов и синтаксических правил

Ниже в таблице приведен список операторов и синтаксических правил, которые можно применять при определении дочерних элементов.

оператор Синтаксис Описание пример
+ <! ELEMENT element-name (child1 +)> Это указывает на то, что дочерний элемент может встречаться один или несколько раз внутри родительского элемента.

<! ELEMENT адрес (имя +)>

Имя дочернего элемента может встречаться один или несколько раз внутри адреса имени элемента.

* <! ELEMENT element-name (child1 *)> Это указывает, что дочерний элемент может встречаться ноль или более раз внутри родительского элемента.

<! ELEMENT адрес (имя *)>

Имя дочернего элемента может встречаться ноль или более раз внутри адреса имени элемента.

? <! ELEMENT element-name (child1?)> Это указывает на то, что дочерний элемент может появляться ноль или один раз внутри родительского элемента.

<! ELEMENT адрес (имя?)>

Имя дочернего элемента может встречаться ноль или один раз внутри адреса имени элемента.

, <! ELEMENT element-name (child1, child2)> Это дает последовательность дочерних элементов, разделенных запятой, которая должна быть включена в имя элемента.

<! ELEMENT адрес (имя, компания)>

Последовательность дочерних элементов name , company , которая должна встречаться в том же порядке внутри адреса имени элемента.

| <! ELEMENT element-name (child1 | child2)> Это позволяет делать выбор в дочернем элементе.

<! ELEMENT адрес (имя | компания)>

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

<! ELEMENT адрес (имя +)>

Имя дочернего элемента может встречаться один или несколько раз внутри адреса имени элемента.

<! ELEMENT адрес (имя *)>

Имя дочернего элемента может встречаться ноль или более раз внутри адреса имени элемента.

<! ELEMENT адрес (имя?)>

Имя дочернего элемента может встречаться ноль или один раз внутри адреса имени элемента.

<! ELEMENT адрес (имя, компания)>

Последовательность дочерних элементов name , company , которая должна встречаться в том же порядке внутри адреса имени элемента.

<! ELEMENT адрес (имя | компания)>

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

правила

Мы должны следовать определенным правилам, если есть более одного элемента контента —

  • Последовательности — часто элементы в документах DTD должны отображаться в определенном порядке. Если это так, вы определяете содержимое с помощью последовательности.

    Объявление указывает, что у элемента <address> должно быть ровно три дочерних элемента — <name>, <company> и <phone> — и что они должны появляться в этом порядке. Например —

Последовательности — часто элементы в документах DTD должны отображаться в определенном порядке. Если это так, вы определяете содержимое с помощью последовательности.

Объявление указывает, что у элемента <address> должно быть ровно три дочерних элемента — <name>, <company> и <phone> — и что они должны появляться в этом порядке. Например —

<!ELEMENT address (name,company,phone)>
  • Выбор. Предположим, вам нужно разрешить один или другой элемент, но не оба. В таких случаях вы должны использовать символ трубы (|). Труба функционирует как эксклюзивное ИЛИ. Например —

Выбор. Предположим, вам нужно разрешить один или другой элемент, но не оба. В таких случаях вы должны использовать символ трубы (|). Труба функционирует как эксклюзивное ИЛИ. Например —

<!ELEMENT address (mobile | landline)>

Содержание смешанного элемента

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

Синтаксис

Ниже приведен общий синтаксис для содержимого смешанных элементов:

<!ELEMENT elementname (#PCDATA|child1|child2)*>
  • ELEMENT — тег объявления элемента.

  • elementname — это имя элемента.

  • PCDATA — это текст, который не является разметкой. #PCDATA должен стоять первым в объявлении смешанного содержимого.

  • child1, child2 .. являются элементами, и каждый элемент должен иметь свое собственное определение в DTD.

  • Оператор (*) должен следовать за смешанным объявлением контента, если включены дочерние элементы

  • Объявления (#PCDATA) и дочерних элементов должны быть разделены оператором (|).

ELEMENT — тег объявления элемента.

elementname — это имя элемента.

PCDATA — это текст, который не является разметкой. #PCDATA должен стоять первым в объявлении смешанного содержимого.

child1, child2 .. являются элементами, и каждый элемент должен иметь свое собственное определение в DTD.

Оператор (*) должен следовать за смешанным объявлением контента, если включены дочерние элементы

Объявления (#PCDATA) и дочерних элементов должны быть разделены оператором (|).

пример

Ниже приведен простой пример, демонстрирующий объявление смешанного элемента содержимого в DTD.

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

<!DOCTYPE address [
   <!ELEMENT address (#PCDATA|name)*>
   <!ELEMENT name (#PCDATA)>
]>

<address>
   Here's a bit of text mixed up with the child element.
   <name>
      Tanmay Patil
   </name>
</address>

ЛЮБОЙ элемент контента

Вы можете объявить элемент, используя ключевое слово ANY в содержимом. Это чаще всего упоминается как элемент смешанной категории. ЛЮБОЙ полезно, когда вам еще предстоит определить допустимое содержимое элемента.

Синтаксис

Ниже приведен синтаксис объявления элементов с ЛЮБЫМ контентом:

<!ELEMENT elementname ANY>

Здесь ключевое слово ANY указывает, что текст (PCDATA) и / или любые элементы, объявленные в DTD, могут использоваться в содержимом элемента <elementname>. Их можно использовать в любом порядке любое количество раз. Однако ключевое слово ANY не позволяет включать элементы, которые не объявлены в DTD.

пример

Ниже приведен простой пример, демонстрирующий объявление элемента с ЛЮБОЙ информацией.

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

<!DOCTYPE address [
   <!ELEMENT address ANY>
]>

<address>
   Here's a bit of sample text
</address>

DTD — Атрибуты

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

Объявление атрибута очень похоже на объявление элемента во многих отношениях, кроме одного; вместо того, чтобы объявлять допустимый контент для элементов, вы объявляете список допустимых атрибутов для каждого элемента. Эти списки называются декларацией ATTLIST.

Синтаксис

Основной синтаксис объявления атрибутов DTD следующий:

<!ATTLIST element-name attribute-name attribute-type attribute-value>

В приведенном выше синтаксисе —

  • Атрибуты DTD начинаются с ключевого слова <! ATTLIST, если элемент содержит атрибут.

  • element-name указывает имя элемента, к которому применяется атрибут.

  • имя-атрибута указывает имя атрибута, который включен в имя-элемента.

  • attribute-type определяет тип атрибутов. Мы обсудим это подробнее в следующих разделах.

  • Значение атрибута принимает фиксированное значение, которое атрибуты должны определить. Мы обсудим это подробнее в следующих разделах.

Атрибуты DTD начинаются с ключевого слова <! ATTLIST, если элемент содержит атрибут.

element-name указывает имя элемента, к которому применяется атрибут.

имя-атрибута указывает имя атрибута, который включен в имя-элемента.

attribute-type определяет тип атрибутов. Мы обсудим это подробнее в следующих разделах.

Значение атрибута принимает фиксированное значение, которое атрибуты должны определить. Мы обсудим это подробнее в следующих разделах.

пример

Ниже приведен простой пример объявления атрибута в DTD.

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA #REQUIRED>
]>

<address>
   <name id = "123">Tanmay Patil</name>
</address>

Давайте пройдемся по приведенному выше коду —

  • Начните с объявления XML со следующего утверждения —

Начните с объявления XML со следующего утверждения —

<?xml version = "1.0"?>
  • Сразу за заголовком XML следует объявление типа документа, обычно называемое DOCTYPE, как показано ниже —

    DOCTYPE сообщает анализатору, что DTD связан с этим документом XML. Объявление DOCTYPE имеет восклицательный знак (!) В начале имени элемента.

Сразу за заголовком XML следует объявление типа документа, обычно называемое DOCTYPE, как показано ниже —

DOCTYPE сообщает анализатору, что DTD связан с этим документом XML. Объявление DOCTYPE имеет восклицательный знак (!) В начале имени элемента.

<!DOCTYPE address [
  • Ниже приводится тело DTD. Здесь мы объявили элемент и атрибут —

Ниже приводится тело DTD. Здесь мы объявили элемент и атрибут —

<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
  • Идентификатор атрибута для имени элемента определен как дано ниже —

    Здесь тип атрибута — CDATA, а его значение — #REQUIRED .

Идентификатор атрибута для имени элемента определен как дано ниже —

Здесь тип атрибута — CDATA, а его значение — #REQUIRED .

<!ATTLIST name id CDATA #REQUIRED>

Правила декларации атрибута

  • Все атрибуты, используемые в документе XML, должны быть объявлены в определении типа документа (DTD) с использованием объявления списка атрибутов.

  • Атрибуты могут появляться только в начальных или пустых тегах.

  • Ключевое слово ATTLIST должно быть в верхнем регистре

  • Повторные имена атрибутов не будут разрешены в списке атрибутов для данного элемента.

Все атрибуты, используемые в документе XML, должны быть объявлены в определении типа документа (DTD) с использованием объявления списка атрибутов.

Атрибуты могут появляться только в начальных или пустых тегах.

Ключевое слово ATTLIST должно быть в верхнем регистре

Повторные имена атрибутов не будут разрешены в списке атрибутов для данного элемента.

Типы атрибутов

При объявлении атрибутов вы можете указать, как процессор должен обрабатывать данные, которые появляются в значении. Мы можем классифицировать типы атрибутов в трех основных категориях —

  • Тип строки

  • Типы токенов

  • Перечисляемые типы

Тип строки

Типы токенов

Перечисляемые типы

В следующей таблице приведена сводка различных типов атрибутов.

Sr.No. Тип и описание
1

CDATA

CDATA — это символьные данные (текстовые, а не разметочные). Это тип строкового атрибута .

2

Я БЫ

Это уникальный идентификатор атрибута. Оно не должно появляться более одного раза. Это тип атрибута Tokenized .

3

IDREF

Он используется для ссылки на идентификатор другого элемента. Он используется для установления связей между элементами. Это тип атрибута Tokenized .

4

IDREFS

Он используется для ссылки на несколько идентификаторов. Это тип атрибута Tokenized .

5

ЮРИДИЧЕСКОЕ ЛИЦО

Он представляет внешнюю сущность в документе. Это тип атрибута Tokenized .

6

СУБЪЕКТЫ

Он представляет собой список внешних объектов в документе. Это тип атрибута Tokenized .

7

NMTOKEN

Он похож на CDATA, и значение атрибута состоит из действительного имени XML. Это тип атрибута Tokenized .

8

NMTOKENS

Это похоже на CDATA, и значение атрибута состоит из списка допустимого имени XML. Это тип атрибута Tokenized .

9

ОБОЗНАЧЕНИЯ

Элемент будет ссылаться на нотацию, объявленную в документе DTD. Это перечисляемый тип атрибута .

10

перечисление

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

CDATA

CDATA — это символьные данные (текстовые, а не разметочные). Это тип строкового атрибута .

Я БЫ

Это уникальный идентификатор атрибута. Оно не должно появляться более одного раза. Это тип атрибута Tokenized .

IDREF

Он используется для ссылки на идентификатор другого элемента. Он используется для установления связей между элементами. Это тип атрибута Tokenized .

IDREFS

Он используется для ссылки на несколько идентификаторов. Это тип атрибута Tokenized .

ЮРИДИЧЕСКОЕ ЛИЦО

Он представляет внешнюю сущность в документе. Это тип атрибута Tokenized .

СУБЪЕКТЫ

Он представляет собой список внешних объектов в документе. Это тип атрибута Tokenized .

NMTOKEN

Он похож на CDATA, и значение атрибута состоит из действительного имени XML. Это тип атрибута Tokenized .

NMTOKENS

Это похоже на CDATA, и значение атрибута состоит из списка допустимого имени XML. Это тип атрибута Tokenized .

ОБОЗНАЧЕНИЯ

Элемент будет ссылаться на нотацию, объявленную в документе DTD. Это перечисляемый тип атрибута .

перечисление

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

Объявление значения атрибута

В каждом объявлении атрибута вы должны указать, как значение будет отображаться в документе. Вы можете указать, если атрибут —

  • может иметь значение по умолчанию

  • может иметь фиксированное значение

  • необходимо

  • подразумевается

может иметь значение по умолчанию

может иметь фиксированное значение

необходимо

подразумевается

Значения по умолчанию

Содержит значение по умолчанию. Значения могут быть заключены в одинарные кавычки (‘) или двойные кавычки («).

Синтаксис

Ниже приводится синтаксис значения —

<!ATTLIST element-name attribute-name attribute-type "default-value">

где default-value — это определенное значение атрибута.

пример

Ниже приведен простой пример объявления атрибута со значением по умолчанию —

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA "0">
]>

<address>
   <name id = "123">
      Tanmay Patil
   </name>
</address>

В этом примере у нас есть элемент name с атрибутом id , значение по умолчанию которого равно 0 . Значение по умолчанию заключено в двойные кавычки.

ИСПРАВЛЕНО Значения

Ключевое слово #FIXED, за которым следует фиксированное значение, используется, когда вы хотите указать, что значение атрибута является постоянным и не может быть изменено. Обычное использование фиксированных атрибутов — указание номеров версий.

Синтаксис

Ниже приводится синтаксис фиксированных значений —

<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >

где #FIXED — определенное значение атрибута.

пример

Ниже приведен простой пример объявления атрибута со значением FIXED —

<?xml version = "1.0"?>

<!DOCTYPE address [
  <!ELEMENT address (company)*>
  <!ELEMENT company (#PCDATA)>
  <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>

<address>
  <company name = "tutorialspoint">we are a free online teaching faculty</company>
</address>

В этом примере мы использовали ключевое слово #FIXED, где оно указывает, что значение «tutorialspoint» является единственным значением для имени атрибута элемента <company>. Если мы пытаемся изменить значение атрибута, то это дает ошибку.

Следующее является недействительным DTD —

<?xml version = "1.0"?>

<!DOCTYPE address [
  <!ELEMENT address (company)*>
  <!ELEMENT company (#PCDATA)>
  <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>

<address>
  <company name = "abc">we are a free online teaching faculty</company>
</address>

ТРЕБУЕМЫЕ ЦЕННОСТИ

Всякий раз, когда вы хотите указать, что атрибут является обязательным, используйте ключевое слово #REQUIRED.

Синтаксис

Ниже приведен синтаксис #REQUIRED —

<!ATTLIST element-name attribute-name attribute-type #REQUIRED>

где #REQUIRED — это определенный тип атрибута.

пример

Ниже приведен простой пример объявления атрибута DTD с ключевым словом #REQUIRED —

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA #REQUIRED>
]>

<address>
   <name id = "123">
      Tanmay Patil
   </name>
</address>

В этом примере мы использовали ключевое слово #REQUIRED, чтобы указать, что для имени элемента должен быть указан идентификатор атрибута.

ПОДРАЗУМЕВАЕМЫЕ ЦЕННОСТИ

При объявлении атрибутов вы всегда должны указывать декларацию значения. Если декларируемый вами атрибут не имеет значения по умолчанию, не имеет фиксированного значения и не является обязательным, вы должны объявить этот атрибут как подразумеваемый . Ключевое слово #IMPLIED используется для указания атрибута как подразумеваемого .

Синтаксис

Ниже приводится синтаксис #IMPLIED —

<!ATTLIST element-name attribute-name attribute-type #IMPLIED>

где #IMPLIED — это определенный тип атрибута.

пример

Ниже приведен простой пример # ПРЕДПОЛАГАЕТСЯ

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA #IMPLIED>
]>

<address>
   <name />
</address>

В этом примере мы использовали ключевое слово #IMPLIED, поскольку мы не хотим указывать какие-либо атрибуты, которые будут включены в имя элемента. Это необязательно.

DTD — Сущности

Объекты используются для определения ярлыков для специальных символов в документах XML. Объекты могут быть в основном четырех типов —

  • Встроенные объекты

  • Персонажи персонажей

  • Общие лица

  • Параметр сущностей

Встроенные объекты

Персонажи персонажей

Общие лица

Параметр сущностей

Синтаксис декларации объекта

В общем, объекты могут быть объявлены внутренне или внешне . Давайте разберемся с каждым из них и их синтаксисом следующим образом:

Внутренняя сущность

Если объект объявлен в DTD, он называется внутренним объектом.

Синтаксис

Ниже приводится синтаксис объявления внутренней сущности:

<!ENTITY entity_name "entity_value">

В приведенном выше синтаксисе —

  • entity_name — это имя объекта, за которым следует его значение в двойных или одинарных кавычках.

  • entity_value содержит значение для имени объекта.

  • Значение сущности Внутреннего Сущности отменяется путем добавления префикса & к имени сущности, т. Е. & Entity_name.

entity_name — это имя объекта, за которым следует его значение в двойных или одинарных кавычках.

entity_value содержит значение для имени объекта.

Значение сущности Внутреннего Сущности отменяется путем добавления префикса & к имени сущности, т. Е. & Entity_name.

пример

Ниже приведен простой пример для объявления внутренней сущности:

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>

<!DOCTYPE address [
   <!ELEMENT address (#PCDATA)>
   <!ENTITY name "Tanmay patil">
   <!ENTITY company "TutorialsPoint">
   <!ENTITY phone_no "(011) 123-4567">
]>

<address>
   &name;
   &company;
   &phone_no;
</address>

В приведенном выше примере имена соответствующих сущностей name , company и phone_no заменены их значениями в XML-документе. Значения сущности освобождаются от ссылки путем добавления префикса & к имени сущности.

Сохраните этот файл как sample.xml и откройте его в любом браузере. Вы заметите, что значения сущностей для name , company , phone_no заменяются соответственно.

Внешняя сущность

Если объект объявляется вне DTD, он называется внешним объектом. Вы можете ссылаться на внешнюю сущность, используя системные идентификаторы или открытые идентификаторы.

Синтаксис

Ниже приведен синтаксис объявления внешнего объекта:

<!ENTITY name SYSTEM "URI/URL">

В приведенном выше синтаксисе —

  • имя это имя объекта.

  • СИСТЕМА это ключевое слово.

  • URI / URL — это адрес внешнего источника, заключенный в двойные или одинарные кавычки.

имя это имя объекта.

СИСТЕМА это ключевое слово.

URI / URL — это адрес внешнего источника, заключенный в двойные или одинарные кавычки.

Типы

Вы можете обратиться к внешнему DTD, используя —

  • Системные идентификаторы . Системный идентификатор позволяет указать местоположение внешнего файла, содержащего объявления DTD.

    Как вы можете видеть, он содержит ключевое слово SYSTEM и ссылку URI, указывающую на местоположение документа. Синтаксис выглядит следующим образом —

Системные идентификаторы . Системный идентификатор позволяет указать местоположение внешнего файла, содержащего объявления DTD.

Как вы можете видеть, он содержит ключевое слово SYSTEM и ссылку URI, указывающую на местоположение документа. Синтаксис выглядит следующим образом —

<!DOCTYPE name SYSTEM "address.dtd" [...]>
  • Публичные идентификаторы — Публичные идентификаторы предоставляют механизм для определения местоположения ресурсов DTD и записываются, как показано ниже:

    Как видите, он начинается с ключевого слова PUBLIC, за которым следует специальный идентификатор. Публичные идентификаторы используются для идентификации записи в каталоге. Публичные идентификаторы могут иметь любой формат; однако обычно используемый формат называется формальными общедоступными идентификаторами или FPI.

Публичные идентификаторы — Публичные идентификаторы предоставляют механизм для определения местоположения ресурсов DTD и записываются, как показано ниже:

Как видите, он начинается с ключевого слова PUBLIC, за которым следует специальный идентификатор. Публичные идентификаторы используются для идентификации записи в каталоге. Публичные идентификаторы могут иметь любой формат; однако обычно используемый формат называется формальными общедоступными идентификаторами или FPI.

<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">

пример

Давайте поймем внешнюю сущность со следующим примером —

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!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)>

Встроенные объекты

Все анализаторы XML должны поддерживать встроенные объекты. В общем, вы можете использовать эти ссылки на сущности где угодно. Вы также можете использовать обычный текст в документе XML, например, в содержимом элемента и значениях атрибута.

Есть пять встроенных сущностей, которые играют свою роль в правильно сформированном XML, они —

  • амперсанд: & amp;

  • Одинарная кавычка: & apos;

  • Больше чем: & gt;

  • Менее чем: & lt;

  • Двойная кавычка: & quot;

амперсанд: & amp;

Одинарная кавычка: & apos;

Больше чем: & gt;

Менее чем: & lt;

Двойная кавычка: & quot;

пример

В следующем примере демонстрируется объявление встроенной сущности:

<?xml version = "1.0"?>

<note>
   <description>I'm a technical writer & programmer</description>
<note>

Как вы можете видеть здесь & amp; символ заменяется на & всякий раз, когда процессор сталкивается с этим.

Персонажи персонажей

Символьные объекты используются для именования некоторых объектов, которые являются символическим представлением информации, т.е. символы, которые сложно или невозможно ввести, могут быть заменены символьными объектами.

пример

Следующий пример демонстрирует объявление сущности символа —

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE author[
   <!ELEMENT author (#PCDATA)>
   <!ENTITY writer "Tanmay patil">
   <!ENTITY copyright "&#169;">
]>
<author>&writer;&copyright;</author>

Вы заметите, что здесь мы использовали & # 169; как значение для символа авторского права. Сохраните этот файл как sample.xml и откройте его в браузере, и вы увидите, что авторское право заменяется символом ©.

Общие лица

Общие сущности должны быть объявлены в DTD, прежде чем их можно будет использовать в документе XML. Вместо представления только одного символа, общие объекты могут представлять символы, абзацы и даже целые документы.

Синтаксис

Чтобы объявить общую сущность, используйте объявление этой общей формы в своем DTD —

<!ENTITY ename "text">

пример

Следующий пример демонстрирует общее объявление сущности —

<?xml version = "1.0"?>

<!DOCTYPE note [
   <!ENTITY source-text "tutorialspoint">
]>

<note>
   &source-text;
</note>

Всякий раз, когда синтаксический анализатор XML встречает ссылку на объект исходного текста , он передает текст замены в приложение в точке ссылки.

Параметр сущностей

Цель объекта параметра — дать вам возможность создавать многократно используемые разделы замещающего текста.

Синтаксис

Ниже приводится синтаксис объявления объекта параметра:

<!ENTITY % ename "entity_value">
  • entity_value — это любой символ, который не является символом «&», «%» или «».

entity_value — это любой символ, который не является символом «&», «%» или «».

пример

В следующем примере демонстрируется объявление сущности параметра. Предположим, у вас есть объявления элементов, как показано ниже —

<!ELEMENT residence (name, street, pincode, city, phone)>
<!ELEMENT apartment (name, street, pincode, city, phone)>
<!ELEMENT office (name, street, pincode, city, phone)>
<!ELEMENT shop (name, street, pincode, city, phone)>

Теперь предположим, что вы хотите добавить дополнительную страну элементов, а затем вам нужно добавить ее ко всем четырем объявлениям. Следовательно, мы можем перейти к ссылке на объект параметра. Теперь, используя ссылку на сущность параметра, приведенный выше пример будет —

<!ENTITY % area "name, street, pincode, city">
<!ENTITY % contact "phone">

Объекты параметров разыменовываются так же, как ссылка на общий объект, только со знаком процента вместо амперсанда —

<!ELEMENT residence (%area;, %contact;)>
<!ELEMENT apartment (%area;, %contact;)>
<!ELEMENT office (%area;, %contact;)>
<!ELEMENT shop (%area;, %contact;)>

Когда синтаксический анализатор читает эти объявления, он заменяет текст замены объекта ссылкой на объект.

DTD — Проверка

Мы используем DTD для точного описания XML-документа. DTD проверяют правильность структуры и словаря XML-документа по отношению к грамматическим правилам соответствующего языка XML. Теперь, чтобы проверить достоверность DTD, можно использовать следующие процедуры:

Использование инструментов проверки XML DTD. Можно использовать некоторые IDE, такие как XML Spy (не бесплатный) и XMLStarlet (opensource), чтобы проверять файлы XML в документе DTD.

Использование онлайновых валидаторов XML DTD — Сервис валидации разметки W3C предназначен для валидации веб-документов. Используйте онлайн-валидатор, чтобы проверить валидность вашего XML DTD здесь .

Создайте свои собственные средства проверки XML с помощью API проверки XML DTD. Более новые версии JDK (выше 1.4) поддерживают API проверки XML DTD. Вы можете написать свой собственный код валидатора, чтобы проверить правильность проверки XML DTD.