Dtd что это: Document Type Definition (DTD).  | Download Scientific Diagram

Содержание

DTD — это… Что такое DTD?

DTD (англ. Document Type Definition определение типа документа) — включает в себя два понятия:

  • Термин, который используется для описания схемы документа или его части языком схем DTD.
  • Язык схем DTD (DTD schema language) — искусственный язык, который используется для записи фактических синтаксических правил метаязыков разметки текста SGML и XML. С момента его внедрения другие языки схем для спецификаций, такие как XML Schema и RELAX NG, выпускаются с дополнительной функциональностью.

Из-за определённых отличий между XML и SGML, применение DTD также имеет некоторые особенности в зависимости от целевого документа

Сейчас идёт отказ от использования DTD в XML-технологии по ряду причин:

  1. Используется отличный от XML синтаксис.
  2. Отсутствует типизация узлов.
  3. Отсутствует поддержка пространств имён.

На смену DTD пришёл стандарт консорциума W3C XML Schema.

Описание схемы документа

DTD описывает схему документа для конкретного языка разметки посредством набора объявлений (объектов-параметров, элементов и атрибутов), которые описывают его класс (или тип) с точки зрения синтаксических ограничений этого документа. Также DTD может объявлять конструкции, которые всегда необходимы для определения структуры документа, но, зато, могут влиять на интерпретацию определённых документов.

Объявление объектов-параметров

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

Примеры:

<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">

Объект-параметр fontstyle содержит в себе группу тегов TT | I | B | BIG | SMALL.

<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

Объект-параметр inline содержит в себе текстовые данные и ещё четыре объекта-параметра fontstyle, phrase, special и formctrl.

Объявление элементов

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

Различные ключевые слова и символы определяют содержимое элемента:

  • EMPTY — пустое содержимое
  • ANY — любое содержимое
  • , — указывает порядок
  • | — разделение альтернатив
  • () — группировка
  • * — любое количество элементов (ноль и более)
  • + — по крайней мере один элемент (один и более)
  •  ? — необязательное наличие элемента (ноль или один)
  • Если нет *, + или ? — элемент должен быть только один

Примеры:

<!ELEMENT DL - - (DT|DD)+>

Элемент DL должен содержать один и более элементов DT или DD в произвольном порядке.

<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>

Элемент FORM должен содержать в себе один или более элементов с объектом-параметром block или элементы SCRIPT в произвольном порядке, однако исключена возможность содержать ещё один элемент FORM.

Определение атрибутов

С каждым элементом DTD-документа можно сопоставить список атрибутов. Для этого используется директива !ATTLIST, в которой указываются имя элемента, с которым может быть сопоставлен список атрибутов и параметры каждого атрибута: его имя, тип и свойства по умолчанию.

Например:

<!ATTLIST MAP name CDATA #REQUIRED>

В этом примере определен атрибут name для элемента MAP. Он является обязательным.

Существуют такие типы атрибутов:

  • CDATA (Character set of data) — значением атрибута могут быть любые символьные данные
  • ID — значением атрибута должен быть уникальный идентификатор элемента
  • IDREF — значением элемента является ссылка на элемент по его ID
  • IDREFS — тоже что и IDREF, но с возможностью ссылок не по одному идентификатору, а по нескольким
  • NMTOKEN — значением атрибута может быть последовательность символов, в чём-то схожая с именем (отсюда и названием — name token). Это строка, которая содержит любую комбинацию тех символов, которые разрешено использовать для имен XML.
  • NMTOKENS — значением атрибута является список значений
  • ENTITY — значение используется для ссылки на внешнюю сущность.
  • ENTITIES — позволяет задать список внешних сущностей, разделённых пробелами.
  • NOTATION — значением атрибута может быть одна из ранее определённых нотаций
  • NOTATIONS — позволяет задать список нотаций.
  • Listings и NOTATION-listings
  • ENUMERATION — задаёт список возможных альтернатив значений.

Существуют такие свойства по умолчанию:

  1. IMPLIED — значение атрибута указывать не обязательно;
  2. REQUIRED — значение атрибута обязательно должно быть указано;
  3. FIXED — значение этого атрибута задано как константа в DTD и в документе не может быть изменено;
  4. некоторое конкретное значение, которое используется по умолчанию.

Связь документа с определённым DTD

Чтобы связать документ с определённым DTD, необходимо в начале текста документа указать элемент Объявление Типа Документа.

В зависимости от места расположения DTD, Объявление Типа Документа может быть двух видов:

  • Внутреннее подмножество DTD

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

<!DOCTYPE foo [ <!ENTITY greeting "helloworld"> ]>
 
<!DOCTYPE bar [ <!ENTITY greeting "helloworld"> ]>
  • Внешнее подмножество DTD

Набор объявлений DTD располагается в отдельном текстовом файле с расширением .dtd В этом случае ссылку на файл можно сделать через публичный идентификатор и (или) через системный идентификатор. Например:

<!-- Валидация простого HTML 4.01 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

</source>

Пример

Пример очень простого XML DTD, описывающего список людей:

<!ELEMENT people_list (person*)>
<!ELEMENT person (name, birthdate?, gender?, socialsecuritynumber?)>
<!ELEMENT name (#PCDATA) >
<!ELEMENT birthdate (#PCDATA) >
<!ELEMENT gender (#PCDATA) >
<!ELEMENT socialsecuritynumber (#PCDATA) >

Начиная с первой строки:

  1. Элемент <people_list> содержит любое число элементов <person> . Знак <*> означает что возможно 0, 1 или более элементов <person>
    внутри элемента <people_list>.
  2. Элемент <person> содержит элементы <name>, <birthdate>, <gender> и <socialsecuritynumber>. Знак <?> означает что элемент необязателен. Элемент <name> не содержит <?>, что означает что элемент <person> обязательно должен содержать элемент <name>.
  3. Элемент <name> содержит данные.
  4. Элемент <birthdate> содержит данные.
  5. Элемент <gender> содержит данные.
  6. Элемент <socialsecuritynumber> содержит данные.

Пример XML-документа, использующего этот DTD:

<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE people_list SYSTEM "example.dtd">
<people_list>
    <person>
        <name>Fred Bloggs</name>
        <birthdate>27/11/2008</birthdate>
        <gender>Male</gender>
        <socialsecuritynumber>1234567890</socialsecuritynumber>
    </person>
</people_list>

См. также

DTD — это… Что такое DTD?

DTD (англ. Document Type Definition определение типа документа) — включает в себя два понятия:

  • Термин, который используется для описания схемы документа или его части языком схем DTD.
  • Язык схем DTD (DTD schema language) — искусственный язык, который используется для записи фактических синтаксических правил метаязыков разметки текста SGML и XML. С момента его внедрения другие языки схем для спецификаций, такие как XML Schema и RELAX NG, выпускаются с дополнительной функциональностью.

Из-за определённых отличий между XML и SGML, применение DTD также имеет некоторые особенности в зависимости от целевого документа

Сейчас идёт отказ от использования DTD в XML-технологии по ряду причин:

  1. Используется отличный от XML синтаксис.
  2. Отсутствует типизация узлов.
  3. Отсутствует поддержка пространств имён.

На смену DTD пришёл стандарт консорциума W3C XML Schema.

Описание схемы документа

DTD описывает схему документа для конкретного языка разметки посредством набора объявлений (объектов-параметров, элементов и атрибутов), которые описывают его класс (или тип) с точки зрения синтаксических ограничений этого документа. Также DTD может объявлять конструкции, которые всегда необходимы для определения структуры документа, но, зато, могут влиять на интерпретацию определённых документов.

Объявление объектов-параметров

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

Примеры:

<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">

Объект-параметр fontstyle содержит в себе группу тегов TT | I | B | BIG | SMALL.

<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

Объект-параметр inline содержит в себе текстовые данные и ещё четыре объекта-параметра fontstyle, phrase, special и formctrl.

Объявление элементов

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

Различные ключевые слова и символы определяют содержимое элемента:

  • EMPTY — пустое содержимое
  • ANY — любое содержимое
  • , — указывает порядок
  • | — разделение альтернатив
  • () — группировка
  • * — любое количество элементов (ноль и более)
  • + — по крайней мере один элемент (один и более)
  •  ? — необязательное наличие элемента (ноль или один)
  • Если нет *, + или ? — элемент должен быть только один

Примеры:

<!ELEMENT DL - - (DT|DD)+>

Элемент DL должен содержать один и более элементов DT или DD в произвольном порядке.

<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>

Элемент FORM должен содержать в себе один или более элементов с объектом-параметром block или элементы SCRIPT в произвольном порядке, однако исключена возможность содержать ещё один элемент FORM.

Определение атрибутов

С каждым элементом DTD-документа можно сопоставить список атрибутов. Для этого используется директива !ATTLIST, в которой указываются имя элемента, с которым может быть сопоставлен список атрибутов и параметры каждого атрибута: его имя, тип и свойства по умолчанию.

Например:

<!ATTLIST MAP name CDATA #REQUIRED>

В этом примере определен атрибут name для элемента MAP. Он является обязательным.

Существуют такие типы атрибутов:

  • CDATA (Character set of data) — значением атрибута могут быть любые символьные данные
  • ID — значением атрибута должен быть уникальный идентификатор элемента
  • IDREF — значением элемента является ссылка на элемент по его ID
  • IDREFS — тоже что и IDREF, но с возможностью ссылок не по одному идентификатору, а по нескольким
  • NMTOKEN — значением атрибута может быть последовательность символов, в чём-то схожая с именем (отсюда и названием — name token). Это строка, которая содержит любую комбинацию тех символов, которые разрешено использовать для имен XML.
  • NMTOKENS — значением атрибута является список значений
  • ENTITY — значение используется для ссылки на внешнюю сущность.
  • ENTITIES — позволяет задать список внешних сущностей, разделённых пробелами.
  • NOTATION — значением атрибута может быть одна из ранее определённых нотаций
  • NOTATIONS — позволяет задать список нотаций.
  • Listings и NOTATION-listings
  • ENUMERATION — задаёт список возможных альтернатив значений.

Существуют такие свойства по умолчанию:

  1. IMPLIED — значение атрибута указывать не обязательно;
  2. REQUIRED — значение атрибута обязательно должно быть указано;
  3. FIXED — значение этого атрибута задано как константа в DTD и в документе не может быть изменено;
  4. некоторое конкретное значение, которое используется по умолчанию.

Связь документа с определённым DTD

Чтобы связать документ с определённым DTD, необходимо в начале текста документа указать элемент Объявление Типа Документа.

В зависимости от места расположения DTD, Объявление Типа Документа может быть двух видов:

  • Внутреннее подмножество DTD

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

<!DOCTYPE foo [ <!ENTITY greeting "helloworld"> ]>
 
<!DOCTYPE bar [ <!ENTITY greeting "helloworld"> ]>
  • Внешнее подмножество DTD

Набор объявлений DTD располагается в отдельном текстовом файле с расширением .dtd В этом случае ссылку на файл можно сделать через публичный идентификатор и (или) через системный идентификатор. Например:

<!-- Валидация простого HTML 4.01 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

</source>

Пример

Пример очень простого XML DTD, описывающего список людей:

<!ELEMENT people_list (person*)>
<!ELEMENT person (name, birthdate?, gender?, socialsecuritynumber?)>
<!ELEMENT name (#PCDATA) >
<!ELEMENT birthdate (#PCDATA) >
<!ELEMENT gender (#PCDATA) >
<!ELEMENT socialsecuritynumber (#PCDATA) >

Начиная с первой строки:

  1. Элемент <people_list> содержит любое число элементов <person> . Знак <*> означает что возможно 0, 1 или более элементов <person> внутри элемента <people_list>.
  2. Элемент <person> содержит элементы <name>, <birthdate>, <gender> и <socialsecuritynumber>. Знак <?> означает что элемент необязателен. Элемент <name> не содержит <?>, что означает что элемент <person> обязательно должен содержать элемент <name>.
  3. Элемент <name> содержит данные.
  4. Элемент <birthdate> содержит данные.
  5. Элемент <gender> содержит данные.
  6. Элемент <socialsecuritynumber> содержит данные.

Пример XML-документа, использующего этот DTD:

<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE people_list SYSTEM "example.dtd">
<people_list>
    <person>
        <name>Fred Bloggs</name>
        <birthdate>27/11/2008</birthdate>
        <gender>Male</gender>
        <socialsecuritynumber>1234567890</socialsecuritynumber>
    </person>
</people_list>

См. также

DTD — это… Что такое DTD?

DTD (англ. Document Type Definition определение типа документа) — включает в себя два понятия:

  • Термин, который используется для описания схемы документа или его части языком схем DTD.
  • Язык схем DTD (DTD schema language) — искусственный язык, который используется для записи фактических синтаксических правил метаязыков разметки текста SGML и XML. С момента его внедрения другие языки схем для спецификаций, такие как XML Schema и RELAX NG, выпускаются с дополнительной функциональностью.

Из-за определённых отличий между XML и SGML, применение DTD также имеет некоторые особенности в зависимости от целевого документа

Сейчас идёт отказ от использования DTD в XML-технологии по ряду причин:

  1. Используется отличный от XML синтаксис.
  2. Отсутствует типизация узлов.
  3. Отсутствует поддержка пространств имён.

На смену DTD пришёл стандарт консорциума W3C XML Schema.

Описание схемы документа

DTD описывает схему документа для конкретного языка разметки посредством набора объявлений (объектов-параметров, элементов и атрибутов), которые описывают его класс (или тип) с точки зрения синтаксических ограничений этого документа. Также DTD может объявлять конструкции, которые всегда необходимы для определения структуры документа, но, зато, могут влиять на интерпретацию определённых документов.

Объявление объектов-параметров

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

Примеры:

<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">

Объект-параметр fontstyle содержит в себе группу тегов TT | I | B | BIG | SMALL.

<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

Объект-параметр inline содержит в себе текстовые данные и ещё четыре объекта-параметра fontstyle, phrase, special и formctrl.

Объявление элементов

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

Различные ключевые слова и символы определяют содержимое элемента:

  • EMPTY — пустое содержимое
  • ANY — любое содержимое
  • , — указывает порядок
  • | — разделение альтернатив
  • () — группировка
  • * — любое количество элементов (ноль и более)
  • + — по крайней мере один элемент (один и более)
  •  ? — необязательное наличие элемента (ноль или один)
  • Если нет *, + или ? — элемент должен быть только один

Примеры:

<!ELEMENT DL - - (DT|DD)+>

Элемент DL должен содержать один и более элементов DT или DD в произвольном порядке.

<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>

Элемент FORM должен содержать в себе один или более элементов с объектом-параметром block или элементы SCRIPT в произвольном порядке, однако исключена возможность содержать ещё один элемент FORM.

Определение атрибутов

С каждым элементом DTD-документа можно сопоставить список атрибутов. Для этого используется директива !ATTLIST, в которой указываются имя элемента, с которым может быть сопоставлен список атрибутов и параметры каждого атрибута: его имя, тип и свойства по умолчанию.

Например:

<!ATTLIST MAP name CDATA #REQUIRED>

В этом примере определен атрибут name для элемента MAP. Он является обязательным.

Существуют такие типы атрибутов:

  • CDATA (Character set of data) — значением атрибута могут быть любые символьные данные
  • ID — значением атрибута должен быть уникальный идентификатор элемента
  • IDREF — значением элемента является ссылка на элемент по его ID
  • IDREFS — тоже что и IDREF, но с возможностью ссылок не по одному идентификатору, а по нескольким
  • NMTOKEN — значением атрибута может быть последовательность символов, в чём-то схожая с именем (отсюда и названием — name token). Это строка, которая содержит любую комбинацию тех символов, которые разрешено использовать для имен XML.
  • NMTOKENS — значением атрибута является список значений
  • ENTITY — значение используется для ссылки на внешнюю сущность.
  • ENTITIES — позволяет задать список внешних сущностей, разделённых пробелами.
  • NOTATION — значением атрибута может быть одна из ранее определённых нотаций
  • NOTATIONS — позволяет задать список нотаций.
  • Listings и NOTATION-listings
  • ENUMERATION — задаёт список возможных альтернатив значений.

Существуют такие свойства по умолчанию:

  1. IMPLIED — значение атрибута указывать не обязательно;
  2. REQUIRED — значение атрибута обязательно должно быть указано;
  3. FIXED — значение этого атрибута задано как константа в DTD и в документе не может быть изменено;
  4. некоторое конкретное значение, которое используется по умолчанию.

Связь документа с определённым DTD

Чтобы связать документ с определённым DTD, необходимо в начале текста документа указать элемент Объявление Типа Документа.

В зависимости от места расположения DTD, Объявление Типа Документа может быть двух видов:

  • Внутреннее подмножество DTD

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

<!DOCTYPE foo [ <!ENTITY greeting "helloworld"> ]>
 
<!DOCTYPE bar [ <!ENTITY greeting "helloworld"> ]>
  • Внешнее подмножество DTD

Набор объявлений DTD располагается в отдельном текстовом файле с расширением .dtd В этом случае ссылку на файл можно сделать через публичный идентификатор и (или) через системный идентификатор. Например:

<!-- Валидация простого HTML 4.01 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

</source>

Пример

Пример очень простого XML DTD, описывающего список людей:

<!ELEMENT people_list (person*)>
<!ELEMENT person (name, birthdate?, gender?, socialsecuritynumber?)>
<!ELEMENT name (#PCDATA) >
<!ELEMENT birthdate (#PCDATA) >
<!ELEMENT gender (#PCDATA) >
<!ELEMENT socialsecuritynumber (#PCDATA) >

Начиная с первой строки:

  1. Элемент <people_list> содержит любое число элементов <person> . Знак <*> означает что возможно 0, 1 или более элементов <person> внутри элемента <people_list>.
  2. Элемент <person> содержит элементы <name>, <birthdate>, <gender> и <socialsecuritynumber>. Знак <?> означает что элемент необязателен. Элемент <name> не содержит <?>, что означает что элемент <person> обязательно должен содержать элемент <name>.
  3. Элемент <name> содержит данные.
  4. Элемент <birthdate> содержит данные.
  5. Элемент <gender> содержит данные.
  6. Элемент <socialsecuritynumber> содержит данные.

Пример XML-документа, использующего этот DTD:

<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE people_list SYSTEM "example.dtd">
<people_list>
    <person>
        <name>Fred Bloggs</name>
        <birthdate>27/11/2008</birthdate>
        <gender>Male</gender>
        <socialsecuritynumber>1234567890</socialsecuritynumber>
    </person>
</people_list>

См. также

XML DTD

XML документ с корректной синтаксической структурой является «синтаксически верным».

XML документ, прошедший проверку по DTD, является «синтаксически верным» и «валидным».

Валидные XML документы

«Валидный» XML документ — это «синтаксически верный» XML документ, который также соответствует правилам DTD (определениям типов документов):


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь обо мне в эти выходные!</body>
</note>

В приведенном примере, декларация DOCTYPE является ссылкой на внешний файл определений типов документа (DTD). Содержимое этого файла показано ниже.

XML DTD

Цель DTD состоит в том, чтобы определить структуру XML документа. Это делается путем определения списка допустимых элементов:


<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

Приведенное выше DTD интерпретируется следующим образом:

  • !DOCTYPE note определяет, что корневым элементом документа является note
  • !ELEMENT note определяет, что элемент note содержит четыре элемента: to, from, heading, body
  • !ELEMENT to определяет, что элемент to должен быть типа «#PCDATA»
  • !ELEMENT from определяет, что элемент from должен быть типа «#PCDATA»
  • !ELEMENT heading определяет, что элемент heading должен быть типа «#PCDATA»
  • !ELEMENT body определяет, что элемент body должен быть типа  «#PCDATA»

#PCDATA означает разбираемые текстовые данные.

Использование DTD для определения сущностей

Определения типов документа (DTD) также можно использовать для декларации специальных символов и символьных строк, используемых в XML документе:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY nbsp "&#xA0;">
<!ENTITY writer "Writer: Donald Duck.">
<!ENTITY copyright "Copyright: MSiter.RU.">
]>

<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь обо мне в эти выходные!</body>
   <footer>&writer;&nbsp;&copyright;</footer>
</note>

Сущность состоит из трех частей: амперсанда (&), имени сущности и точки с запятой (;).

Зачем нужно использовать DTD?

С DTD ваш XML файл может нести собственный формат.

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

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

Когда не стоит использовать DTD?

Вообще-то для работы XML не требуется DTD.

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

Если вы разрабатываете приложения, то стоит подождать, пока спецификации не станут стабильными, и только тогда добавлять определения. В обратном случае ваше приложение может перестать работать из-за ошибок валидации.

XML схемы Вверх Валидация XML документов

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

Объявление типа документа 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.

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

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.

В этой главе мы обсудим компоненты 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

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

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

Синтаксис

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Синтаксис

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

<!ELEMENT elementname EMPTY >

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

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. Атрибут дает больше информации об элементе или, точнее, он определяет свойство элемента. Атрибут 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 version = "1.0"?>
  • Сразу за заголовком XML следует объявление типа документа, обычно называемое DOCTYPE, как показано ниже —

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

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

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

<!DOCTYPE address [

Ниже приводится тело 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, поскольку мы не хотим указывать какие-либо атрибуты, которые будут включены в имя элемента. Это необязательно.

Объекты используются для определения ярлыков для специальных символов в документах 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 для точного описания 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.

В чем разница между XML-схемой и DTD?

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

Целью DTD было сохранение уровня совместимости с SGML для приложений, которые могут захотеть преобразовать DTD SGML в XML DTD. Тем не менее, в соответствии с одной из целей XML, «краткость разметки XML имеет минимальное значение», нет реальной проблемы с кратким изложением синтаксиса.

[…]

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

Typing

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

[…]

Ограничения вхождения

Другая область, где DTD и Схема значительно различаются, связана с ограничениями вхождения. Если вы вспомните из наших предыдущих примеров в главе 2 «Структура схемы» (или свою собственную работу с DTD), есть три символа, которые вы можете использовать для ограничения числа вхождений элемента: *, + и?.

[…]

Перечисления

Итак, допустим, у нас был элемент, и мы хотели иметь возможность определить атрибут размера для рубашки, который позволял пользователям выбирать размер: маленький, средний или большой. Наш DTD будет выглядеть так:

<!ELEMENT item (shirt)>
<!ELEMENT shirt (#PCDATA)>
<!ATTLIST shirt
    size_value (small | medium | large)>

[…]

Но что, если мы хотим sizeбыть элементом? Мы не можем сделать это с DTD. DTD не обеспечивают перечисления в текстовом содержимом элемента. Однако из-за типов данных в Schema, когда мы объявили перечисление в предыдущем примере, мы фактически создали simpleTypeвызов, size_valuesкоторый мы теперь можем использовать с элементом:

<xs:element name="size" type="size_value">

[…]

Введение в язык определения типов Document Type Definition (DTD) (Михаил Дроздов

Введение в язык определения типов Document Type Definition (DTD) (Михаил Дроздов — VFP)

5858

Введение в язык определения типов Document Type Definition (DTD)

 

Содержание.

Для чего используется DTD.

В спецификация XML 1.0 указывается, что логическую структуру XML-документа (подробности об XML см. в Кратком введении в XML) можно описать с помощью языка Определений Типов Документов — Document Type Definition (DTD) http://www.w3.org/TR/REC-xml#dt-doctype. В DTD используется формальная грамматика, позволяющая определить как структуру документа, так и допустимые значения. При обработке документов, если с ними будут ассоциированы правила, оформленные на языке DTD, анализаторы могут проверять данные на их соответствие с описаниями, тем самым сигнализировать о наличие структурных ошибок в данных XML-документов.

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

Правильно оформленные документы (см. Правильно оформленные документы во Введении в XML), написанные в соответствии с неявными правилами для языка XML не способны выполнить подобный контроль данных. Ошибки в данных могут быть пропущены и тогда они приведут либо к не способности приложения выполнить работу с документом, либо могут привести к получению некорректных результатов его работы. Напротив, при наличии описания структуры на DTD при обработке документа (см. Состоятельные (или допустимые) документы во Введении в XML), его данные могут быть подвергнуты анализаторами, обеспечивающими проверку документа на допустимость, контролю на соответствие данных  грамматическим правилам, описанным в нём (см. XML-анализаторы во Введении в XML). Таким образом, если требуется эффективный контроль проверки структурных ошибок в документе, то можно воспользоваться определениями, написанными на DTD и анализатором, проверяющим документ на допустимость.

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

Ассоциирование DTD с XML-документом.

Определения, написанные на DTD могут быть связаны (ассоциированы) с XML-документами. Таким образом, анализаторы, проверяющие XML-документ на допустимость могут осуществить проверку корректности структуры документа по отношению к описаниям. DTD-описания могут быть внешними, внутренними или и теми и другими, т.е. смешанными. В последнем случае внутренние имеют более высокий приоритет над внешними (т.е. переопределяют последние). Связь между XML-документом и DTD-описанием осуществляется с помощью декларации DOCTYPE, помещаемой в XML-документ (см. Декларация типа документа во Введении в XML).

Декларация DOCTYPE представляет из себя тег следующей структуры:

<!DOCTYPE Name ExternalID MarkupDecl >

где

  • Name — имя элемента документа (element document), т.е. единственный элемента, подчинённые элементы которого, включают прикладные данные XML-документа (см. Тело документа во Введении в XML).
  • ExternalID — если присутствует, то указывает на внешний источник, содержащий DTD-определения. В этих случаях говорят, что документ имеет внешние определения. ExternalID может быть в двух формах:
    • ‘SYSTEM’ SystemLiteral — здесь SystemLiteral представляет из себя универсальный идентификатор ресурса (Uniform Resource Identifier [URI]), причём реально содержащий DTD-определения по этому адресу. Например: <!DOCTYPE MyDoc SYSTEM «http://MyServer/MyDefs/MyDoc.dtd»>.  
    • ‘PUBLIC’ PubidLiteral SystemLiteral — здесь PubidLiteral представляет из себя «хорошо известный» универсальный идентификатор ресурса… и в этом случае анализатор может найти соответствующие DTD-определения любым, наиболее приемлемым для анализатора способом. Таким образом, PubidLiteral — это просто уникальный идентификатор, обычно обозначающий хорошо известный стандарт, и не обязана реально содержать DTD-определений. Если в определении присутствует SystemLiteral, то этот URI обязан содержать реальный файл с DTD-определенеиями (по существу тоже что и SystemLiteral в ‘SYSTEM’, описанным выше). Если по указанному URI файл определений не будет найден, то приложение запросит именованный файл с Web-сервера. Например: <!DOCTYPE MyDoc PUBLIC «universal/Pub/Defs» «http://www.universal/Pub/CommonDocs.dtd»>
    управление же тем: будут ли реально внешние DTD-определения обработаны в XML-документе, осуществляется XML-декларацией standalone (см. XML-декларации во Введении в XML). И её значение «no» предписывает анализатору использовать внешние DTD-определения при обработке XML-документа, в то время как «yes» указывает на обработку документа без учёта внешних DTD-определий.
  • MarkupDecl — если присутствует, то имеет формат: [ markupdecl ] и сдержит DTD-определения или DTD-деклорации. В этих случаях говорят, что документ содержит внутренние определения. 
Декларации в DTD.

Допустимое в XML-содержание определяется следующими декларациями в DTD:

Конструкция в DTD Назначение
ELEMENT — декларации типа элемента XML
ATTLIST — декларации атрибутов, могут быть назначены конкретным элементам, а также определить разрешённые значения атрибутов
ENTITY — декларации повторно используемого содержания
NOTATION — декларации определяют внешнее содержание
ELEMENT.

Элемент является основным объектом языка XML, в DTD элемент объявляется с помощью тега ELEMENT и имеет следующую структуру:

<!ELEMENT Name contentspec>

где

Name — имя типа элемента. На имя типа элемента накладываются следующие ограничения, всегда применяемые к именам в XML (см. также Имена во Введении в XML): имена могут содержать буквы, цифры, двоеточия (‘:’), символ нижнего подчёркивания (‘_’), дефис (тире или знак минуса) (‘-‘) и точку (‘.’), но не могут начинаться с цифры. Они должны начинаться только с буквы, знака подчёркивания или двоеточия. 

contentspec — определяет содержание элемента и может быть:

  • EMPTY — в случае когда содержание элемента обязано быть всегда пустым, в т.ч. не включать в себя порождённые элементы, однако такой элемент может иметь атрибуты.
  • ANY — когда в качестве содержания элемента может быть всё что угодно.
  • содержание элемента определяется формальным правилом, т.н. моделью содержания(content model)

В последнем случае различают две модели содержания:

  • только порождённые элементы (Children) - содержанием элемента является набор порождённых элементов, но не текст.
  • смешанное содержание (Mixed) —  означает, что в качестве содержания могут быть: порождённые элементы, анализируемые символьные данные (#PCDATA) и текст.

Формальные правила, с помощью которых определяют содержание элемента, очень похожи на те, которые используются в расширенных формах Бэкуса-Наура (Extended Backus-Naur Form — EBNF) при определении синтаксиса в языках программирования.

Определение порядка и выбор элементов

В таблице ниже представлены символы-разделители между элементами:

Символ Назначение
, — определяет последовательность
| — указывает на выбор одного из

При помощи первого (символ запятая ‘,’), элементы можно объединить в последовательность, создав список элементов. Например:

        
<!ELEMENT PersonName (First, Middle, Last)> 
здесь определено, что все три элемента должны присутствовать, причём в указанном порядке. В то время как второй (символ-разделитель ‘|’) - указывает на выбор из возможных альтернатив. Так элемент FruitBasket в определении:
        
<!ELEMENT FruitBasket (Apple | Orange)> 
может содержать одно из двух: либо Apple, либо Orange, но не обоих одновременно.
Повторяемость элементов.

Повторяемость элемента или группы элементов (определитель множественности или кардинальность), задаётся следующими символами:

Символ Назначение
? — не обязательный, может отсутствовать
* — ноли или больше
+ — один или больше

Отсутствие символа повторяемости указывает, что элемент должен присутствовать, причём только один раз. Символ повторяемость ставится сразу за названием элемента или сразу за закрывающей круглой скобкой группы элементов. Вот пример с использованием символов повторяемости:

        
<!ELEMENT FruitBasket (Cherry+, (Apple | Orange)*)> 

и эта группа модели содержания означает, что наша корзина может содержать один или несколько элементов Cherry, после которых следует ноль или больше экземпляров выбора между элементами Apple и Orange. Обратите внимание, что элементы Cherry должны быть расположены вместе. Ниже пример данных, удовлетворяющий такой декларации: 

        
    <FruitBasket>
    <Cherry>...</Cherry> 
    <Cherry>...</Cherry> 
    <Apple>...</Apple> 
    <Orange>...</Orange> 
    <Orange>...</Orange> 
    </FruitBasket> 

Вот ещё несколько примеров определений элементов:

        
<!ELEMENT foo (A?, ((B, C) | D), E?)> 

здесь определено, что элемент foo может содержать от одного до четырёх порождённых элементов, в зависимости от сделанного выбора, причём первым может быть  A, B или D (элемент A не обязателен), затем появляется B и C, или D, в завершении E (элемент E не обязателен).

        
<!ELEMENT foo (A, (B, C)*, D+)> 

здесь за элементом A следует ноль или больше пар B и C, а в конце по крайней мере один элемент D.

Для того, чтобы указать на смешанное содержание, в модель содержания введено ключевое слово #PCDATA. В этом случае элементы модели содержания следует разделять символом | и у группы в целом объявить множественность «ноли или больше»:

        
<!ELEMENT MixedBag (#PCDATA | ItemA | ItemB)*)> 

Ниже пример данных, удовлетворяющий такому описанию:

        
    <MixedBag>
    <ItemA>...</ItemA> 
    Текст, включённый как PCDATA 
    <ItemA>...</ItemA> 
    <ItemB>...</ItemB> 
    </MixedBag> 

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

ATTLIST.

Атрибуты, подобны свойствам в ООП у классов, и информационно дополняют XML-элементы (см. также раздел Атрибут во Введении в XML). Объявления атрибутов DTD имеют следующую структуру:

        
<!ATTLIST ElementName AttDef* >
где ElementName — имя элемента, для которого объявляются атрибуты, а AttDef имеет следующую структуру:
        
AttDef ::=  AttName AttType DefaultDecl

здесь AttName — имя атрибута,  AttType - тип атрибута, а  DefaultDecl — значение атрибута. На имя атрибута наложены такие же ограничения, что и имя XML-элемента (см. в разделе ELEMENT данного документа, а также раздел Имена во Введении в XML).

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

Тип атрибута (AttType) может быть одним из следующих:

Тип Назначение
CDATA — символьные данные
ID — уникальный идентификатор
IDREF — ссылка на уникальный идентификатор
IDREFS — набор ссылок на уникальные идентификаторы
ENTITY — сущность (или замещаемое содержание)
ENTITIES — набор сущностей
NMTOKEN — именной токен 
NMTOKENS — набор именных токенов
NOTATION — один из типов нотаций
[явное перечисление] — перечисление возможных значений атрибутов

Следует сделать несколько пояснений к типам атрибутов:

  • Символьные данные — в качестве значения атрибута может использоваться строка произвольной длины с символьными данными, допустимыми в XML (см. раздел Символьные данные во Введении в XML).
  • Уникальный идентификатор — атрибуты типа ID обязаны содержать уникальные значения в рамках документа, таким образом, являются аналогами Primary ключей в реляционных базах данных, однозначно идентифицируя каждый конкретный элемент. Тип ID может быть использован для создания кросс-ссылок между элементами, если информационные связи между элементами выходят за рамки нормальной древовидной структуры документа. В этом случае, уникальные значения в атрибуте типа ID могут быть использованы в атрибутах типа IDREF и/или IDREFS. Также, в языке XPath есть функция id [node-set id(object)], возвращающая множество узлов документа, у которых значение атрибута типа ID совпадает со значением, переданным в качестве параметра. И для использования этой функции, необходимо предварительно определить атрибут(ы) типа ID с применением языка DTD для XML-документа. 
  • Сущность (или замещаемое содержание) — применяется для повторного использования некоторых конструкций, предварительно объявив их как сущности, или для ссылок на не анализируемых в рамках XML данные, например файлы изображений (см. также раздел ENTITY данного документа).
  • Именной токен — при необходимости использовать в качестве значений атрибутов некоторый фиксированный набор значений, обычно используют «явное перечисление». Однако, если полный список такого перечисления не может быть известен заранее, — применяют тип NMTOKEN. И в этом случае, в качестве значения атрибута, можно использовать произвольные имена, допустимые в рамках XML (см. раздел Имена во Введении в XML), правда для такого типа отсутствуют ограничения на первый символ.
  • Один из типов нотаций — средствами определений нотаций (см. раздел NOTATION данного документа) могут быть определены приложения для обработки содержимого элементов, у которых атрибут подобного типа использован.    
Значения атрибутов.

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

Значение Назначение
#REQUIRED — атрибут должен всегда присутствовать в каждом элементе и иметь значение
#IMPLIED — атрибут является не обязательным и может отсутствовать в элементе
#FIXED + значение — определяет атрибут, всегда имеющий одно и тоже значение
значение — значение, заключённое в кавычки, определяет значение по умолчанию

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

Например:

        
<!ATTLIST product
 title CDATA #REQUIRED
 id ID #IMPLIED
 type NMTOKEN #REQUIRED;
 quantity CDATA "1"
 value CDATA #FIXED "дорого"
 color (серый|белый) "серый"
> 

определяет для элемента product следующие атрибуты:

Атрибут Требования к значению
title — обязательный атрибут, содержащий символьные данные
id — необязательный атрибут, который может содержать уникальный идентификатор элемента внутри документа
type — обязательный атрибут, значение которого произвольно, но обязано удовлетворять правилам имён в XML для типа NMTOKEN (например type=»сыпучий»)
quantity — определяет атрибут, который может и не присутствовать в элементе, в этом случае подразумевается, что его значение равно «1»
value — определяет атрибут, который всегда должен иметь значение «дорого»
color — определяет атрибут, имеющий одно из значений: «серый» или «белый», причём по умолчанию — «серый» 
ENTITY.

Часто используемы конструкции языка или внешние данные, могут быть предварительно объявлены как сущности, а затем использованы в документе. Имеется два вида сущностей: внутренние и внешние. 

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

Внутренняя сущность используется (в том числе и в значениях атрибутов) для повторного использования одних и тех же конструкций. Так, если одна и та же конструкция используется несколько раз, то можно объявить представляющую её сущность, а затем ссылаться на последнюю везде, где возникает необходимость в конструкции (см. также раздел Ссылки во Введении в XML). Близким аналогом таких сущностей являются макроподстановки в некоторых языках программирования. Например, объявление сущности animal:

        
<!ENTITY animal "слон" >

позволяет в дальнейшем её использовать (в том числе и в атрибутах) подобно:

        
<product title="&animal;" /> <!-- здесь после подстановки сущности значение атрибута title="слон" -->  

Выше было показано объявление сущности, которая могла быть использована в любом месте XML-документа. Тем не менее, существует объявление сущностей, которые могут быть использованы только в рамках DTD-языка, например объявление элемента shape

        
<ELEMENT shape (x, y, z, R)>

после предварительного объявления сущности coords:

        
<!ENTITY % coords "x, y, z" >

может быть записано следующим образом:

        
<ELEMENT shape (%coords;, R)>

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

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

Объявление внешней сущности имеет вид:

<!ENTITY имя ExternalID NDataDecl>

здесь:

ExternalID ::= ‘SYSTEM’ SystemLiteral | ‘PUBLIC’ PubidLiteral SystemLiteral
NDataDecl ::= ‘NDATA’ Name

где:

  • SystemLiteral — URL, т.е. определяет ссылку на реально существующий внешний файл. 
  • PubidLiteral — URI, т.е. представляет из себя «хорошо известный» идентификатор ресурса, не обязательно реально существующий. 
  • NDataDecl — если присутствует, означает внешнюю не разбираемую сущность.

Следует также отметить, что:

  • для PUBLIC наличие второго параметра (SystemLiteral) не обязательно, однако если он присутствует, то должен указывать на реально существующий ресурс.
  • присутствие NDataDecl означает также, что должно быть определено приложение-обработчик для не разбираемой сущности. В DTD это делается с помощью определения нотаций (см. также раздел NOTATION данного документа).

Рассмотрим несколько примеров, поясняющих использование внешних сущностей.

        
<!ENTITY animal SYSTEM "ent/animal.ent" >

В данном случае определена внешняя разбираемая сущность (содержимое файла animal.ent с указанным относительным его расположением) и использование ссылки на сущность &animal; в любом месте XML документа будет приводить к замене ссылки сущности на содержимое указанного файла.

        
<!ENTITY animal PUBLIC "-//ZOO//Elephant/Description" "http://enimalhost.com/animal.ent" >

Это также определение внешней разбираемой сущности, однако теперь, специализированный анализатор для зоологических XML-файлов, встретив публичную и известную ему ссылку «-//ZOO//Elephant/Description», может и не загружать определение, находящееся по адресу http://enimalhost.com/animal.ent непосредственно с сервера. Как именно в данном случае определить сущность animal - ложится на плечи анализатора. Однако в любом случае, она (сущность animal) при использовании данного объявления должна быть корректно определена.

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

NOTATION.

XML-анализаторы не имеют средств по обработке двоичных файлов непосредственно. Что же делать, если мы в документе желаем использовать данные в формате двоичных файлов? Чтобы обойти эту проблему в XML используются объявления нотаций, которые позволяют связать названия форматов с внешними приложениями-обработчиками (helper application) для файлов этих форматов. Формально определение нотаций имеет вид:

<!NOTATION TypeName ExternalID>

здесь ExternalID по своей структуре полностью аналогичен тому, что и во Внешней сущности у ENTITY, т.е.:

ExternalID ::= ‘SYSTEM’ SystemLiteral | ‘PUBLIC’ PubidLiteral SystemLiteral

и определяет приложение-обработчик двоичных файлов для типа TypeName. Если в XML-документе использованы несколько различных форматов двоичных файлов (т.е. определёны как внешние сущности с применением NDATA у ENTITY), то при помощью этого определения необходимо указать соответствующие приложения-обработчики каждому из типов.  

Применяя NOTATION, имеется две возможности обработки двоичных файлов в XML.

В первом вариант требуется: 

  • объявления для всех двоичных файлов как не разбираемых сущностей ENTITY, с указанием типов (используя NDATA) 
  • определения каждому из типов (использованных в NDATA у ENTITY) соответствующие приложения-обработчики (применяя NOTATION)  

Рассмотрим пример поясняющий это:


<!DOCTYPE menu [ 
 <!ELEMENT menu (menuitem*)>
 <!ELEMENT menuitem EMPTY>
 <!ATTLIST menuitem
  image ENTITY #REQUIRED
  title CDATA #REQUIRED
  href CDATA #REQUIRED>
 <!NOTATION gif SYSTEM "gif-viewer.exe">
 <!NOTATION jpg SYSTEM "jpg-viewer.exe">
 <!ENTITY news SYSTEM "images/news.gif" NDATA gif>
 <!ENTITY products SYSTEM "images/products.jpg" NDATA jpg>
 <!ENTITY support SYSTEM "images/support.gif" NDATA gif>
]>
<menu>
 <menuitem image="news" title="News" href="news.htm"/>
 <menuitem image="products" title="Products" href="products.htm"/>
 <menuitem image="support" title="Support" href="support.htm"/>
</menu>

Здесь атрибут image у элемента menuitem, является обязательным, и принадлежит типу ENTITY. Это означает, что должны быть объявления используемых сущностей. Действительно, имеется три объявления внешних сущностей: news, products, и support, причём все три являются не анализируемыми, т.к. у каждой из них присутствует NDATA, определяющий соответствующий тип. При этом, задействовано всего два различных типа: gif и jpg, и каждому из них определёно приложение-обработчик, используя определения NOTATION, — это gif-viewer.exe и jpg-viewer.exe, соответственно. 

Теперь рассмотрим второй вариант:


<!DOCTYPE root [ 
 <!ELEMENT root (#PCDATA)>
 <!ATTLIST root
  type NOTATION (rtf|htm|txt) #REQUIRED>
 <!NOTATION rtf SYSTEM "wordpad.exe">
 <!NOTATION htm SYSTEM "iexplore.exe">
 <!NOTATION txt SYSTEM "notepad.exe">
]>
<root type="htm">
 <![CDATA[
   <html>
    <header>
     <title>Examp</title>
    </header>
    <body>
     <!-- Здесь содержимое документа -->
    </body>
   </html>
 ]]>
</root>

Здесь через нотации определены три типа данных: rtf, htm, txt. Атрибут type элемента root указывает на формат данных, содержащихся в элементе. В данном случае это html-формат, обрабатываемый приложением iexplore.exe.

Литература
  • XML для профессионалов. Дидье Мартин, и др. Серия «Программист - программисту». Изд. «Лори», 2001.
  • XML. Питц-Моултис Н., Кирк Ч. СПб.:BHV - Санк-Петербург, 2000.
  • Технология XSLT. Алексей Валиков. СПб.:БХВ — Санк-Петербург, 2002.
  • Microsoft® XML Core Services (MSXML) 4.0 SDK

См. также:

 

DTD Учебник


Что такое DTD?

DTD — это определение типа документа.

DTD определяет структуру, правовые элементы и атрибуты XML-документа.


Зачем нужно DTD?

С помощью DTD независимые группы людей могут согласовать стандартный DTD для обмена данными.

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


Внутренняя декларация DTD

Если DTD объявлен внутри XML-файла, он должен быть заключен в определение :

XML-документ с внутренним DTD







]>

Tove
Jani
Напоминание
Не забывай меня в эти выходные

Просмотреть XML-файл »

В XML-файле выберите «просмотреть источник», чтобы просмотреть DTD.

DTD выше интерпретируется следующим образом:

  • ! DOCTYPE note определяет, что корневым элементом этого документа является примечание
  • ! ELEMENT note определяет, что элемент примечания должен содержать четыре элемента: «to, from, heading, body»
  • ! ELEMENT to определяет, что элемент to должен иметь тип «#PCDATA»
  • ! ELEMENT из определяет, что элемент from должен иметь тип «#PCDATA»
  • ! Заголовок ELEMENT определяет, что элемент заголовка должен иметь тип «#PCDATA»
  • ! ELEMENT body определяет, что элемент body имеет тип «#PCDATA»


Внешняя декларация DTD

Если DTD объявлен во внешнем файле, определение должно содержать ссылку на файл DTD:

XML-документ со ссылкой на внешний DTD




Тове
Яни
Напоминание
Не забывай меня в эти выходные!

Просмотреть XML-файл »

А вот и файл note.dtd, содержащий DTD:







Определение типа документа — DTD

A Определение типа документа (DTD) описывает древовидную структуру документа и некоторые сведения о его данных.Это набор подтверждений разметки, которые фактически определяют тип документа для семейства SGML, например GML, SGML, HTML, XML.

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

Есть 2 типа данных, PCDATA и CDATA

  • PCDATA — это анализируемые символьные данные.
  • CDATA — символьные данные, обычно не анализируемые.

Синтаксис:

 
 

Пример:


DTD для приведенного выше дерева:

XML-документ с внутренним DTD:

XML

как

интерпретируемый выше это:

  • ! Адрес DOCTYPE определяет, что корневым элементом этого документа является адрес.
  • ! ELEMENT address определяет, что элемент адреса должен содержать четыре элемента: «имя, адрес электронной почты, телефон, день рождения».
  • ! ELEMENT name определяет, что элемент name должен содержать два элемента: «first, last».
    • ! ELEMENT сначала определяет первый элемент типа «#PCDATA».
    • ! ELEMENT last определяет последний элемент типа «#PCDATA».
  • ! ELEMENT email определяет элемент электронной почты как «#PCDATA».
  • ! ELEMENT phone определяет элемент phone как «#PCDATA».
  • ! ELEMENT birthday определяет, что элемент дня рождения должен содержать три элемента «год, месяц, день».
    • ! ELEMENT year определяет, что элемент года имеет тип «#PCDATA».
    • ! ELEMENT month определяет элемент месяца как «#PCDATA».
    • ! ELEMENT day определяет элемент дня типа «#PCDATA».

XML-документ с внешним DTD:

XML

xml версия = "1.0" ?>

9000 ! ELEMENT name (first, last)>

]>

< адрес >

05

05

05

< первый > R ohit первый >

< последний > Sharma последний >

000 имя> имя> < электронная почта > sharmarohit @ gmail.com электронная почта >

< телефон > 9876543210 телефон >

день рождения день рождения < год > 1987 год >

< месяц > июнь месяц >

0 901 день > 23 день >

день рождения >

адрес >

dtd:

Вывод:

Внимание читатель! Не прекращайте учиться сейчас.Освойте все важные концепции HTML с помощью Web Design for Beginners | HTML курс.


Определение типа документа XML (DTD)

Определение типа XML-документа - это формальное выражение (в XML) структурных ограничений для класса XML-документов. Конструкции языка DTD - это объявления списков элементов и атрибутов. Объявления элементов называют элементы, разрешенные в документе этого типа, и указывают, могут ли и как объявленные элементы и серии символьных данных содержаться в каждом элементе.Объявления списка атрибутов называют разрешенные атрибуты для каждого объявленного элемента, включая тип каждого значения атрибута, если это не явный набор допустимых значений. DTD связывается с XML-документом через объявление типа документа, которое представляет собой тег, который появляется в начале XML-документа. Объявление устанавливает, что документ является экземпляром типа, определенного указанным DTD. Эти объявления в документе XML могут быть внутренними или внешними. Внутренние объявления DTD указываются в начале XML-документа и должны быть заключены в определение .Пример внутреннего объявления из учебника W3schools DTD выглядит следующим образом:

]>

<примечание>

Тове

Яни

Напоминание

Не забывай меня в эти выходные

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

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

DTD Introduction - XML ​​Files


Целью DTD является определение юридических строительных блоков XML-документа.Он определяет структуру документа со списком юридических элементов. DTD может быть объявлен встроенным в ваш XML-документ или как внешняя ссылка.


Внутренний DTD

Это XML-документ с определением типа документа: (откройте его
в IE5 и выберите источник просмотра)

xml версия = "1.0 " ?>

< адрес >

< имя < первый > Rohit первый >

< последний > Sharma последний > > 901

9000 >

< электронная почта > sharmarohit @ gmail.com электронная почта >

< телефон > 9876543210 телефон >

день рождения день рождения < год > 1987 год >

< месяц > июнь месяц >

0 901 день > 23 день >

день рождения >

адрес >

 

  
  
  
  
]>
<примечание>
 Тове 
 Яни 
 Напоминание 
 Не забывай меня в эти выходные! 
 

DTD интерпретируется следующим образом:
! ELEMENT note (в строке 2) определяет элемент «note» как имеющий
четыре элемента: «to, from, heading, body».От
! ELEMENT до (в строке 3) определяется, что элемент «to» должен быть
типа «CDATA».
! ЭЛЕМЕНТ из (в строке 4) определяет элемент «from» как тип
«CDATA»
и так далее… ..


Внешний DTD

Это тот же XML-документ с внешним DTD: (откройте его
в IE5 и выберите источник просмотра)

 

<примечание>
 Тове 
 Яни 
 Напоминание 
 Не забывай меня в эти выходные! 
 

Это копия файла «note.dtd », содержащий определение типа документа
:

 




 


Зачем использовать DTD?

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

Появляется множество форумов для определения стандартных DTD почти для всего в областях обмена данными. Взгляните на: обмен XML CommerceNet и http://www.schema.net.

XML DTD - javatpoint


Что такое DTD

DTD означает Определение типа документа . Он определяет юридические строительные блоки XML-документа.Он используется для определения структуры документа со списком юридических элементов и атрибутов.

Назначение DTD

Его основная цель - определить структуру XML-документа. Он содержит список юридических элементов и определяет структуру с их помощью.


Проверка валидации

Перед тем, как продолжить работу с XML DTD, необходимо проверить валидацию. XML-документ называется «правильно сформированным», если он содержит правильный синтаксис.

Правильно сформированный и действительный XML-документ - это документ, который прошел проверку на соответствие DTD.

Посетите http://www.xmlvalidation.com , чтобы проверить XML-файл.


Действительный и правильно сформированный XML-документ с DTD

Давайте возьмем пример правильно сформированного и действительного XML-документа. Он следует всем правилам DTD.

employee.xml

<сотрудник> vimal jaiswal <электронная почта> vimal @ javatpoint.ru

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

сотрудник.dtd

Проверить это сейчас

Описание DTD

Он определяет, что корневым элементом документа является сотрудник.

Он определяет, что элемент employee содержит 3 элемента: «имя, фамилия и адрес электронной почты».

Он определяет, что элемент firstname имеет тип #PCDATA. (анализируемый тип данных).

Он определяет, что элемент lastname имеет тип #PCDATA. (анализируемый тип данных).

Он определяет, что элемент электронной почты набран #PCDATA.(анализируемый тип данных).


XML DTD с объявлением объекта

Объявление doctype может также определять специальные строки, которые могут использоваться в файле XML.

Организация состоит из трех частей:

  1. Амперсанд (&)
  2. Название организации
  3. точка с запятой (;)

Синтаксис для объявления объекта:

Давайте посмотрим на код для определения ENTITY в объявлении doctype.

author.xml

]> & sj;

Проверить это сейчас

В приведенном выше примере sj - это объект, который используется внутри элемента author. В таком случае он напечатает значение сущности sj, то есть "Sonoo Jaiswal".

Примечание. Одно DTD можно использовать во многих файлах XML.

TheScarms Document Type Definition (DTD) Tutorial

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

DTD - это документ Определение типа.

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

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

Стандарты

DTD определены Консорциум World Wide Web (W3C). Сайт W3C предоставляет исчерпывающий ссылка на DTD.

Однако в этом руководстве основное внимание уделяется Реализация Microsoft XML и DTD. Все примеры содержали здесь требуется Internet Explorer 5.0 или новее.

Использование DTD в XML-документе

DTD могут быть объявлены встроенными в ваш XML-код или они могут ссылаться на внешний файл.

Это пример внутреннего DTD. Вы можете откройте его в проводнике, затем выберите «Просмотр» | Источник для просмотра полного XML документ с включенным DTD.







]>
<сообщение>
Дэйв
Сьюзан
Напоминание
Не забудьте купить молока по дороге домой.

Строка 2 определяет элемент как имеющий четыре дочерних элемента: <до>, <от>, <тема> и <текст>.


В этой строке определяется, что элемент относится к типу PCDATA.

Вот тот же документ с внешним DTD ссылка:



<сообщение>
Дэйв
Сьюзан
Напоминание
Не забудьте купить молока по дороге домой.

А вот и упомянутый файл DTD. Вы можете откройте его в проводнике и выберите Просмотр | Источник, как указано выше.








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

  • Элементы XML
    Элемент XML состоит из начала и конечный тег с данными между ними. Теги опишите данные. Данные называются значением элемент. Элементы могут иметь значение, дочерние элементы или они могут быть пустыми (не имеют значения).

    Например, этот элемент XML является элементом со значением «Bill Смит ».

    Билл Смит

  • Атрибуты
    Элемент может дополнительно содержать один или несколько атрибутов в его начальном теге.Атрибут - это пара имя-значение, разделенная знаком равенства. знак равно Значения атрибутов всегда должны быть указаны в кавычках.

    Вестфилд

    ZIP = "01085" - атрибут элемента .

  • Анализируемые символьные данные - PCDATA
    Как мы уже говорили, у элементов есть значения.Если у значения есть теги, представляющие дочерний элемент элементы, эти теги необходимо развернуть или проанализировать и обрабатываются как отдельные элементы.
  • Символьные данные - CDATA
    Значение элемента рассматривается как один элемент и не раскрывается.
  • Объекты
    Некоторые символы, такие как «<», имеют в XML особое значение.Если хотите используйте эти специальных символов в ваших данных, вам нужен способ сообщить XML синтаксический анализатор, чтобы не интерпретировать их как имеющие свое обычное значение.

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

    Организация

    Специальный символ

    & lt;

    <

    & gt;

    >

    & amp;

    и

    & quot;

    "

    '

    '

    Чтобы использовать "<" в ваших данных, вы должны использовать объект "& lt;" вместо.

В DTD элементы объявляются с помощью объявления элемента со следующим синтаксисом:

  • Пустые элементы
    Пустые элементы используют пустое ключевое слово.Переместите наведите указатель мыши на текст для получения дополнительной информации.
  • Элементы с данными
    Если у элемента есть данные, вы должны указать тип его данные.



    Пример:

    ЛЮБОЙ может содержать любой тип данных.
    #CDATA - данные символьного типа.
    #PCDATA - символьные данные, которые необходимо проанализировать и расширен. Если раздел #PCDATA содержит элементы, эти элементы также должны быть заявил.

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

    Используя пример сообщения:

    Пример:

    Дочерние элементы также должны быть объявлены.Вот их декларации:





  • Определение DOCTYPE
    Для внутреннего DTD вам потребуется определение DOCTYPE, чтобы указать код DTD.

    Пример:







    ]>
    <сообщение>
    Дэйв
    Сьюзан
    Напоминание
    Не забудьте купить молока по дороге домой.

  • Экземпляры элементов
    Вы можете указать, сколько раз элемент может встречаться в документе.

    Символ

    Экземпляры

    нет

    должно происходить ровно 1 раз

    *

    0 или более раз

    +

    1 или более раз

    ?

    Ровно 0 или 1 раз

    Например:

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

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

  • Тип атрибута
    Атрибуты могут иметь следующие типы:

    Тип

    Описание

    CDATA

    Символьные данные

    ЛИЦ

    Организация

    ЛИЦА

    Список данных юридических лиц

    ID

    Уникальные данные идентификатора

    IDREF

    ID другого элемента

    IDREFS

    Список идентификаторов других элементов

    NMTOKEN

    Данные имени XML

    NMTOKENS

    Список имен XML

    ОБОЗНАЧЕНИЕ

    Наименование записи

    (знач1 | знач2 |...)

    Список значений

    xml:

    Предустановленное значение

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

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

    Описание

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

    Если в данных XML нет значения, значение, указанное в DTD будет использоваться

    # ФИКСИРОВАННОЕ значение

    Если в данных XML существует другое значение, произойдет ошибка

    # ПРЕДПОЛАГАЕТСЯ

    Это значение необязательно указывать в данных XML.

    # ТРЕБУЕТСЯ

    Если данные XML не имеют значения, произойдет ошибка.

  • Примеры DTD
    Вот несколько примеров операторов DTD.Наведите указатель мыши на текст, чтобы узнать больше Информация.

    Вот оператор XML, который удовлетворяет всем вышеперечисленным операторам DTD.

    Этот оператор XML не удовлетворяет правилу 2 DTD, которое требует значения "мужской".

    Этот оператор XML не соответствует правилу 5 DTD, потому что "unknown" не является приемлемым ценить.

    <пол человека = "неизвестно">

Напомним, сущности - это переменных , которые представляют другие значения.Значение сущность заменяется сущностью при анализе XML-документа.

Объекты могут быть определены внутри или внешне к вашему DTD.

Внутренняя декларация:

Пример:

Внешняя декларация:

Пример:

Вышеупомянутый объект делает эту строку XML действительной.

Строка XML:
и веб-сайт

Вычисляет до:
http: // www.TheScarms.com

Щелкните эту ссылку, чтобы просмотреть полный пример DTD.

DTD | Определение типа документа | Пример

DTD обозначает определение документа. DTD - это метод языка Smarkup (SGML, XML, HTML), используемый для определения структуры XML-документа. XML - Элементы, атрибуты, функционалисты ссылок на сущности определены в DTD .

Это - текстовый документ с расширением точек dtd (.dtd) .

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

Типы HTML DTD

Вы можете определить DTD двумя способами.

Примеры и синтаксис DTD

Для объявления любых ссылок на элементы, атрибуты или сущности необходим синтаксис объявления «. Давайте посмотрим один за другим синтаксис и его примеры.

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

    

Синтаксис объявления элемента

Для имя элемента можно выбрать в качестве требований приложения. модель содержимого описывает тип данных - текст, пустой или смешанный контент или дочерний элемент. Так что в основном разрешен тип элемента данных или дочерний элемент.

Давайте посмотрим на один пример.

Имя элемента - « служащий », дочерние элементы (empno, name, salary).Дочерние элементы также требовали объявления в этом DTD. #PCDATA - это тип данных, допускающий только текстовые данные и использующий только элементы формы.

PCDATA означает анализируемые символьные данные.

В этом примере определяется 4 элемента , где 3 являются дочерними элементами .

  




]>  

XML для верхнего уровня DTD (элементы XML - это элементы, определяемые пользователем, а структура определяется в DTD).

  <сотрудники>
 
Джон 480900

В модели содержимого 5 возможных типов содержимого:

  • Только текстовый элемент - Только разрешенные текстовые данные. И String, и int (number) считаются текстовыми данными. Для этого вы можете использовать #PCDATA .
  • Дочерний элемент - элемент внутри любого элемента, называемый дочерним элементом.У дочернего элемента может быть дочерний элемент. В этом элементе не должно быть элементов другого типа.
  • Пустой элемент
  • Любой элемент
  • Смешанный элемент

Как отобразить DTD в XML?

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

Если вы пишете DTD в XML-документе . Давайте посмотрим на это на примере.Он специфичен только для этого XML-документа и не подлежит повторному использованию. Поэтому всегда рекомендуется использовать External DTD .

  




]>
<сотрудники>
 12345 
 Джон 
<зарплата> 54000 
  

Если вы пишете DTD в другой документ и связаны с XML-документом .

  1. XML-документ со ссылкой на внешний DTD
  

<сотрудники>
 12345 
 Джон 
<зарплата> 54000 
  

А вот и файл «emplows.dtd», содержащий DTD:

  


  

Каковы преимущества DTD?
  • Документация - Сначала вы можете определить свой собственный формат файла XML в соответствии с требованиями приложения.Это поможет понять структуру данных.
  • Проверка - с ее помощью вы можете проверять данные. Например, проверка того, расположены ли элементы в правильном порядке ? ИЛИ Наличие обязательных элементов и атрибутов.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *