DTD
DTD (англ. Document Type Definition — определение типа документа) — включает в себя два понятия:
- Термин, который используется для описания схемы документа или его части языком схем DTD.
- Язык схем DTD (DTD schema language) — компьютерный язык, который используется для записи фактических синтаксических правил метаязыков разметки текста SGML и XML. С момента его внедрения другие языки схем для спецификаций, такие как XML Schema и RELAX NG, выпускаются с дополнительной функциональностью.
Из-за определённых отличий между XML и SGML, применение DTD также имеет некоторые особенности в зависимости от целевого документа
Сейчас идёт отказ от использования DTD в XML-технологии по ряду причин:
- Используется отличный от XML синтаксис.
- Отсутствует типизация узлов.
- Отсутствует поддержка пространств имён.
На смену 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
— задаёт список возможных альтернатив значений.
Существуют такие свойства по умолчанию:
-
IMPLIED
— значение атрибута указывать не обязательно; -
REQUIRED
— значение атрибута обязательно должно быть указано; -
FIXED
— значение этого атрибута задано как константа в DTD и в документе не может быть изменено; - некоторое конкретное значение, которое используется по умолчанию.
Связь документа с определённым 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"
"www.w3.org/TR/html4/strict.dtd">
Пример
Пример очень простого XML DTD, описывающего список людей:
<!ELEMENT people_list (person*)>
<!ELEMENT person (name, birthdate?, gender?, socialsecuritynumber?)>
<!ELEMENT name (#PCDATA) >
<!ELEMENT birthdate (#PCDATA) >
<!ELEMENT gender (#PCDATA) >
<!ELEMENT socialsecuritynumber (#PCDATA) >
Начиная с первой строки:
- Элемент
<people_list>
содержит любое число элементов<person>
. Знак<*>
означает что возможно 0, 1 или более элементов<person>
внутри элемента<people_list>
. - Элемент
<person>
содержит элементы<name>
,<birthdate>
,<gender>
и<socialsecuritynumber>
. Знак<?>
означает что элемент необязателен. Элемент<name>
не содержит<?>
, что означает что элемент<person>
обязательно должен содержать элемент<name>
. - Элемент
<name>
содержит данные. - Элемент
<birthdate>
содержит данные. - Элемент
<gender>
содержит данные. - Элемент
<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>
См. также
<imagemap>: неверное или отсутствующее изображение |
Для улучшения этой статьи желательно?:
|
Напишите отзыв о статье "DTD"
Отрывок, характеризующий DTD
– Мамаша, ведь вы сами гадали… – сказала дочь.– А как это в амбаре гадают? – спросила Соня.
– Да вот хоть бы теперь, пойдут к амбару, да и слушают. Что услышите: заколачивает, стучит – дурно, а пересыпает хлеб – это к добру; а то бывает…
– Мама расскажите, что с вами было в амбаре?
Пелагея Даниловна улыбнулась.
– Да что, я уж забыла… – сказала она. – Ведь вы никто не пойдете?
– Нет, я пойду; Пепагея Даниловна, пустите меня, я пойду, – сказала Соня.
– Ну что ж, коли не боишься.
– Луиза Ивановна, можно мне? – спросила Соня.
Играли ли в колечко, в веревочку или рублик, разговаривали ли, как теперь, Николай не отходил от Сони и совсем новыми глазами смотрел на нее. Ему казалось, что он нынче только в первый раз, благодаря этим пробочным усам, вполне узнал ее. Соня действительно этот вечер была весела, оживлена и хороша, какой никогда еще не видал ее Николай.
«Так вот она какая, а я то дурак!» думал он, глядя на ее блестящие глаза и счастливую, восторженную, из под усов делающую ямочки на щеках, улыбку, которой он не видал прежде.
– Я ничего не боюсь, – сказала Соня. – Можно сейчас? – Она встала. Соне рассказали, где амбар, как ей молча стоять и слушать, и подали ей шубку. Она накинула ее себе на голову и взглянула на Николая.
«Что за прелесть эта девочка!» подумал он. «И об чем я думал до сих пор!»
Соня вышла в коридор, чтобы итти в амбар. Николай поспешно пошел на парадное крыльцо, говоря, что ему жарко. Действительно в доме было душно от столпившегося народа.
На дворе был тот же неподвижный холод, тот же месяц, только было еще светлее. Свет был так силен и звезд на снеге было так много, что на небо не хотелось смотреть, и настоящих звезд было незаметно. На небе было черно и скучно, на земле было весело.
«Дурак я, дурак! Чего ждал до сих пор?» подумал Николай и, сбежав на крыльцо, он обошел угол дома по той тропинке, которая вела к заднему крыльцу. Он знал, что здесь пойдет Соня. На половине дороги стояли сложенные сажени дров, на них был снег, от них падала тень; через них и с боку их, переплетаясь, падали тени старых голых лип на снег и дорожку. Дорожка вела к амбару. Рубленная стена амбара и крыша, покрытая снегом, как высеченная из какого то драгоценного камня, блестели в месячном свете. В саду треснуло дерево, и опять всё совершенно затихло. Грудь, казалось, дышала не воздухом, а какой то вечно молодой силой и радостью.
С девичьего крыльца застучали ноги по ступенькам, скрыпнуло звонко на последней, на которую был нанесен снег, и голос старой девушки сказал:
– Прямо, прямо, вот по дорожке, барышня. Только не оглядываться.
– Я не боюсь, – отвечал голос Сони, и по дорожке, по направлению к Николаю, завизжали, засвистели в тоненьких башмачках ножки Сони.
Соня шла закутавшись в шубку. Она была уже в двух шагах, когда увидала его; она увидала его тоже не таким, каким она знала и какого всегда немножко боялась. Он был в женском платье со спутанными волосами и с счастливой и новой для Сони улыбкой. Соня быстро подбежала к нему.
«Совсем другая, и всё та же», думал Николай, глядя на ее лицо, всё освещенное лунным светом. Он продел руки под шубку, прикрывавшую ее голову, обнял, прижал к себе и поцеловал в губы, над которыми были усы и от которых пахло жженой пробкой. Соня в самую середину губ поцеловала его и, выпростав маленькие руки, с обеих сторон взяла его за щеки.
– Соня!… Nicolas!… – только сказали они. Они подбежали к амбару и вернулись назад каждый с своего крыльца.
Когда все поехали назад от Пелагеи Даниловны, Наташа, всегда всё видевшая и замечавшая, устроила так размещение, что Луиза Ивановна и она сели в сани с Диммлером, а Соня села с Николаем и девушками.
Николай, уже не перегоняясь, ровно ехал в обратный путь, и всё вглядываясь в этом странном, лунном свете в Соню, отыскивал при этом всё переменяющем свете, из под бровей и усов свою ту прежнюю и теперешнюю Соню, с которой он решил уже никогда не разлучаться. Он вглядывался, и когда узнавал всё ту же и другую и вспоминал, слышав этот запах пробки, смешанный с чувством поцелуя, он полной грудью вдыхал в себя морозный воздух и, глядя на уходящую землю и блестящее небо, он чувствовал себя опять в волшебном царстве.
– Соня, тебе хорошо? – изредка спрашивал он.
– Да, – отвечала Соня. – А тебе ?
На середине дороги Николай дал подержать лошадей кучеру, на минутку подбежал к саням Наташи и стал на отвод.
– Наташа, – сказал он ей шопотом по французски, – знаешь, я решился насчет Сони.
– Ты ей сказал? – спросила Наташа, вся вдруг просияв от радости.
– Ах, какая ты странная с этими усами и бровями, Наташа! Ты рада?
– Я так рада, так рада! Я уж сердилась на тебя. Я тебе не говорила, но ты дурно с ней поступал. Это такое сердце, Nicolas. Как я рада! Я бываю гадкая, но мне совестно было быть одной счастливой без Сони, – продолжала Наташа. – Теперь я так рада, ну, беги к ней.
– Нет, постой, ах какая ты смешная! – сказал Николай, всё всматриваясь в нее, и в сестре тоже находя что то новое, необыкновенное и обворожительно нежное, чего он прежде не видал в ней. – Наташа, что то волшебное. А?
– Да, – отвечала она, – ты прекрасно сделал.
«Если б я прежде видел ее такою, какою она теперь, – думал Николай, – я бы давно спросил, что сделать и сделал бы всё, что бы она ни велела, и всё бы было хорошо».
– Так ты рада, и я хорошо сделал?
– Ах, так хорошо! Я недавно с мамашей поссорилась за это. Мама сказала, что она тебя ловит. Как это можно говорить? Я с мама чуть не побранилась. И никому никогда не позволю ничего дурного про нее сказать и подумать, потому что в ней одно хорошее.
– Так хорошо? – сказал Николай, еще раз высматривая выражение лица сестры, чтобы узнать, правда ли это, и, скрыпя сапогами, он соскочил с отвода и побежал к своим саням. Всё тот же счастливый, улыбающийся черкес, с усиками и блестящими глазами, смотревший из под собольего капора, сидел там, и этот черкес был Соня, и эта Соня была наверное его будущая, счастливая и любящая жена.
Приехав домой и рассказав матери о том, как они провели время у Мелюковых, барышни ушли к себе. Раздевшись, но не стирая пробочных усов, они долго сидели, разговаривая о своем счастьи. Они говорили о том, как они будут жить замужем, как их мужья будут дружны и как они будут счастливы.
На Наташином столе стояли еще с вечера приготовленные Дуняшей зеркала. – Только когда всё это будет? Я боюсь, что никогда… Это было бы слишком хорошо! – сказала Наташа вставая и подходя к зеркалам.