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

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

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

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

...

Внутри же документа DTD- декларации включаются следующим образом:

... ... ]> ...

В том случае, если используются одновременно внутренние и внешние описания, то программой-анализатором будут сначала рассматриваться внутренние, т.е. их приоритет выше. При проверке документа XML- процессор в первую очередь ищет DTD внутри документа. Если правила внутри документа не определены и не задан атрибут standalone ="yes" , то программа загрузит указанный внешний файл и правила, находящиеся в нем, будут считаны оттуда. Если же атрибут standalone имеет значение "yes ", то использование внешних DTD описаний будет запрещено.

Определение элемента

Элемент в DTD определяется с помощью дескриптора!ELEMENT , в котором указывается название элемента и структура его содержимого.

Например, для элемента можно определить следующее правило:

Ключевое слово ELEMENT указывает, что данной инструкцией будет описываться элемент XML. Внутри этой инструкции задается название элемента(flower) и тип его содержимого.

В определении элемента мы указываем сначала название элемента(flower), а затем его модель содержимого - определяем, какие другие элементы или типы данных могут встречаться внутри него. В данном случае содержимое элемента flower будет определяться при помощи специального маркера PCDATA(что означает parseable character data - любая информация, с которой может работать программа-анализатор). Существует еще две инструкции, определяющие тип содержимого: EMPTY,ANY. Первая указывает на то, что элемент должен быть пустым(например, ), вторая - на то, что содержимое элемента специально не описывается.

Последовательность дочерних для текущего элемента объектов задается в виде списка разделенных запятыми названий элементов. При этом для того, чтобы указать количество повторений включений этих элементов могут использоваться символы +,*, ? :

В этом примере указывается, что внутри элемента должны быть определены элементы title, author и table-of-contents, причем элемент title является обязательным элементом и может встречаться лишь однажды, элемент author может встречаться несколько раз, а элемент table-of-contents является опциональным, т.е. может отсутствовать. В том случае, если существует несколько возможных вариантов содержимого определяемого элемента, их следует разделять при помощи символа "|" :

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

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

Пример корректного XML- документа:

]> ...

Marks avenue
12-12-12 46-23-62 [email protected]

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

Списки атрибутов элемента определяются с помощью ключевого слова!ATTLIST . Внутри него задаются названия атрибутов, типы их значений и дополнительные параметры. Например, для элемента

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

В данном примере для элемента article определяются три атрибута: id, about и type , которые имеют типы ID(идентификатор), CDATA и список возможных значений соответственно. Всего существует шесть возможных типов значений атрибута:

  • CDATA - содержимым документа могут быть любые символьные данные
  • ID - определяет уникальный идентификатор элемента в документе
  • IDREF(IDREFS)- указывает, что значением атрибута должно выступать название(или несколько таких названий, разделенных пробелами во втором случае) уникального идентификатора определенного в этом документе элемента
  • ENTITY(ENTITIES) - значение атрибута должно быть названием(или списком названий, если используется ENTITIES) компонента (макроопределения), определенного в документе
  • NMTOKEN (NMTOKENS) - содержимым элемента может быть только одно отдельное слово(т.е. этот параметр является ограниченным вариантом CDATA)
  • Список допустимых значений - определяется список значений, которые может иметь данный атрибут.

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

  • #REQUIRED - определяет обязательный атрибут, который должен быть задан во всех элементах данного типа
  • #IMPLIED - атрибут не является обязательным
  • #FIXED "значение" - указывает, что атрибут должен иметь только указанное значение, однако само определение атрибута не является обязательным, но в процессе разбора его значение в любом случае будет передано программе-анализатору
  • Значение - задает значение атрибута по умолчанию

Определение компонентов(макроопределений)

Компонент (entity) представляет собой определения, содержимое которых может быть повторно использовано в документе. В других языках программирования подобные элементы называются макроопределениями. Создаются DTD- компоненты при помощи инструкции!ENTITY:

Программа-анализатор, просматривая в первую очередь содержимое области DTD- определений, обработает эту инструкцию и при дальнейшем разборе документа будет использовать содержимое DTD- компонента в том месте, где будет встречаться его название. Т.е. теперь в документе мы можем использовать выражение &hello; , которое будет заменено на строчку "Мы рады приветствовать Вас"

В общем случае, внутри DTD можно задать три типа макроопределений:

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

В XML существует пять предустановленных внутренних символьных констант:

  • < - символ "<"
  • > - символ ">"
  • & - символ "&"
  • " - символ апострофа """
  • " - символ двойной кавычки """

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

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

Например, для следующего фрагмента документа:

можно использовать более короткую форму записи:

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

Типизация данных

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

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

Задав атрибуту значение по умолчанию LONG и определив его как FIXED, мы позволили тем самым программе-клиенту получить необходимую информацию о типе содержимого данного элемента, и теперь она может самостоятельно определить соответствие типа этого содержимого указанному в DTD- определении.

Вот пример XML- документа, в котором определяются и используются несколько элементов с различными типами данных:

... 5 2 32.5 true 18346 34 р. 28 к. ...

Как видно из примера, механизм создания элементов документа при этом нисколько не изменился. Все необходимая для проверки типов данных информация заложена в определения элементов внутри блока DTD.

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

XML для описания подобных "самодеятельных" тэгов используются схемы . Они необходимы для того, чтобы:
  • описать, что именно является разметкой;
  • описать точно, что означает разметка.

Наиболее известными языками описания схем являются следующие:

  • DTD (Document Type Definition) - язык определения типа документов, который первоначально использовался в качестве язык описания структуры SGML-документа.
  • XDR (XML Data Reduced) – диалект схемы XML, разработанный Microsoft, который поддерживался в Internet Explorer 4 и 5 версий.
  • XML Schema или просто XSD (язык определения схем XML) – рекомендация консорциума W3C с 2001 года.

Рассмотрим подробнее первые два из них. Третий язык описания схем рассматривается в лабораторной работе 11.

DTD схема

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

В рамках DTD модель содержимого XML документа можно описать следующим образом:

Каждый элемент документа может иметь один из типов:

Содержание Синтаксис Комментарий
Данные Содержит только текстовые данные
Другие элементы Содержит только дочерние элементы
Смешанное Содержит комбинацию текстовых данных и дочерних элементов
EMPTY Ничего не содержит
ANY Может содержать текстовые данные или дочерние элементы

Атрибуты, находящиеся внутри тэгов документа, описываются отдельно с помощью синтаксиса:

При этом атрибут в DTD может иметь один из трех типов:

  • Строка
  • Маркированные атрибут
  • Атрибута с перечислением

Кроме типа атрибута можно также задавать и его модальность:

Рассмотрим в качестве примера описание атрибутов строкового типа для элемента, описывающего некоторое сообщение:

Если этот элемент содержит атрибуты с перечислением , то их описание может выглядеть, например, следующим образом:

Маркированных атрибуты элемента могут быть четырех типов:

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

Символ Пример Описание
, (a, b, c) Последовательное использование элементов списка
| (a | b | c) Используется один из членов списка
date Используется один и только один элемент
? subject ? Необязательное использование (0 или 1 раз)
+ paragraph+ Используется один или несколько раз
* brother* Используется ноль или несколько раз

В качестве примера приведем DTD схему, описывающую структуру электронного почтового ящика:

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

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

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

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

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

"#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;" >

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

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

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

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

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

(DT|DD) +>

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

(%block;|SCRIPT) + -(FORM) >

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

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

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

Например:

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 содержится в самом тексте документа. Например:

]> ]>

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

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

"http://www.w3.org/TR/html4/strict.dtd">

Пример

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

(person*) > (name, birthdate?, gender?, socialsecuritynumber?) > (#PCDATA) > (#PCDATA) > (#PCDATA) >

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

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

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

> > > Fred Bloggs> > 27/11/2008> > Male> > 1234567890> > >

См. также


Wikimedia Foundation . 2010 .

Смотреть что такое "DTD" в других словарях:

    DTD - , die in einer ASCII Datei (ASCII) abgelegte Beschreibung der Struktur von Dokumenten, welche alle vom selben Typ sind. Eine DTD wird nach den Regeln der international anerkannten… … Universal-Lexikon

    DTD - may stand for: Contents 1 Media 2 Music 3 Sports 4 Technologies 4.1 Computing … Wikipedia

    DTD - steht für: Inhaltsverzeichnis 1 Medien 2 Music 3 Technologien 3.1 Computer 3.1.1 Spiele … Deutsch Wikipedia

    Dtd - steht für: Darwin Digital Television, eine australische Fernsehstation Delta Tau Delta, eine US amerikanische Studentenorganisation Document Type Definition, siehe Dokumenttypdefinition … Deutsch Wikipedia

    DTD - (dē tē dēʹ) n. A set of rules for marking up a document in SGML. * * * … Universalium

    DTD - (document type definition) specification written in the Standard Generalized Markup Language and containing information about the format of a particular document (Computers) … English contemporary dictionary

Как раз таковыми и являются. Причём XML сам по себе предусматривает расширяемость. Документы созданные с помощью этих языков могут быть «корректными (well-formed)» и «допустимыми (valid)».

С проверкой документа на корректность проблем не возникает: если ошибок не выскочило и всё отобразилось так, как мы хотели, то документ корректен. Например, если в HTML-документе написать что-то вроде « Привет! », то наш документ будет полностью корректен, но проигнорирован браузером. Почему? Потому что браузер ничего не знает о том, что это за «Z» такой. И если мы проверим наш документ на допустимость с помощью валидатора , то документ таковым признан не будет. А как об этом узнает валидатор и на основании чего он вынес такой вердикт?

Допустимость проверяется с помощью определения типа документа (DTD, document type definition). Например, для «строгого» HTML он выглядит так .

DTD может быть описан как внутри документа, так и вынесен в отдельный файл (аналогия с CSS: встроенные и подключаемые таблицы стилей).

Объявление DTD

Объявление DTD располагается перед первым (корневым) элементом документа, начинается с последовательности « ».

Внутреннее DTD описывается так:

Между квадратными скобками располагается содержимое DTD, так называемое внутреннее подмножество , например:

] >

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

Соответственно, в этом файле и прописываются все правила, так называемое внешнее подмножество .

Имя, указанное за словом « DOCTYPE » (в нашем случае « catalog »), должно соответствовать имени корневого элемента. То есть, XML-документ должен быть примерно таким:

Hello, world!

Вместо ключевого слова « SYSTEM » может быть использовано слово « PUBLIC », указывающее, что DTD применяется для широкого использования:

Внутренние и внешние подмножества могут быть заданы одновременно (опять же, аналогия с CSS):

] >

Здесь, сначала зачитывается содержимое файла « catalog.dtd », а потом содержимое, указанное внутри квадратных скобок.

Элементы документа

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

Если у элемента есть дочерние элементы, то это записывается так:

что соответствует документу:

</book> </p><p>Если у элемента несколько дочерних элементов, то они перечисляются через запятую и должны следовать строго в указанном порядке:</p><p> <!ELEMENT book (title, author)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> </p><p>Приведённый выше пример читается следующим образом. Элемент « book » должен содержать только один элемент « title », за которым должен следовать только один элемент « author ». Сами элементы « title » и « author » никаких элементов не содержат, а могут содержать лишь какой-нибудь текст.</p> <p>С помощью следующих <a href="/zyxel/kodovye-znaki-specialnye-simvoly-dlya-nika-zv-zdochki-serdechki/">специальных символов</a> можно определять количественное присутствие элемента:</p> <ul><li>Символ « * », следующий после элемента, означает, что элемент может присутствовать один или несколько раз, или не присутствовать вовсе(от нуля до + бесконечности)</li> <li>Символ « + », следующий после элемента, означает, что элемент может присутствовать один или несколько раз(от 1 до + бесконечности)</li> <li>Символ « ? », следующий после элемента, означает, что элемент может либо отсуствовать, либо присутствовать только один раз(0 или 1)</li> </ul> <!ELEMENT book (title, author)> ... <!ELEMENT book (title*, author)> ... <!ELEMENT book (title+, author)> ... <!ELEMENT book (title?, author)> <p>Если существует необходимость указать один из нескольких элементов (или title, или author — любой из них, но не оба), надо испольовать символ « | »:</p><p> <!ELEMENT book (title | author)> </p><p>Текст тоже равноправный участник игры. Ключевое слово « PCDATA » указывает на анализируемые символьные данные, поэтому любой текст содержащий символы разметки (« < », « > » и « & ») будет трактоваться как разметка. <a href="/windows/zvonok-idet-odnovremenno-na-dva-raznyh-aifona---otklyuchaem-funkciyu/">Совместное использование</a> текста и элементов называется <i>смешанным содержимым </i>. При объявлении смешанного содержимого, « PCDATA » необходимо указывать первым:</p><p> <!ELEMENT book (#PCDATA | title | author)> </p><p>Следующий фрагмент документа валиден вышеприведенному примеру:</p><p> <book> <title /> </book> <book> <author /> </book> <book> Нет данных </book> </p><p>Группы элементов заключаются в круглые скобки. Элемент « book » должен содержать либо текст, либо (один « title », один или неколько « author » и может быть один « pubyear » именно в таком порядке):</p><p> <!ELEMENT book (#PCDATA | (title, author+, pubyear?))> <!ELEMENT disc (#PCDATA | title)*> </p><p>Данному примеру соответствует следующий фрагмент XML-документа:</p><p> <disc /> <book> <title /> <author /> <author /> </book> <book> Нет данных </book> </p><p>Элемент может быть пустым. Такой элемент не может содержать не дочерних элементов ни текста (например, элемент « br » в HTML). Такой элемент задается с <a href="/program/generaciya-klyuchevyh-slov-onlain-servis-podbora-klyuchevyh-slov/">ключевым словом</a> « EMPTY »:</p><p> <!ELEMENT photo EMPTY> </p><p>Элемент также может быть объявлен с ключевым словом « ANY » означающее, что элемент может содержать и элементы, и текст, и все это вместе, и даже быть пустым.</p> <h3>Атрибуты элементов</h3> <p>Элементы в XML-документе могут иметь атрибуты, которые записываются в виде « имя = значение » в открывающем или пустом тегах. Общее объявление атрибутов конкретного элемента начинается с ключевого слова « ATTLIST », после которого следует имя данного элемента и объявления самих атрибутов:</p><p> <!ELEMENT title (#PCDATA)> <!ATTLIST title id CDATA #REQUIRED stock CDATA #IMPLIED> </p><p>Ключевое слово « REQUIRED » указывает на то, что атрибут обязателен. Ключевое слово « IMPLIED », наоборот, говорит, что атрибут необязателен.</p> <p>У атрибутов могут быть перечисленны разрешенные значения:</p><p> <!ATTLIST title readonly (yes|no) #REQUIRED> </p><p>Также может быть задано значение по-умолчанию:</p><p> <!ATTLIST title readonly (yes|no) #REQUIRED "yes"> pubyear CDATA #IMPLIED "2007"> </p><p>Атрибут может быть и константой, то есть у него может быть только то значение, которое заявлено в объявлении атрибута. Делается это с помощью ключевого слова « FIXED »:</p><p> <!ATTLIST title copyright <strong>#FIXED "udvikler"> </p><p>Тип атрибута « CDATA »позволяет использовать любые символы кроме « < », « > », « & », « " » и « " ». В случае использования, данные символы должны быть заменены на спецсимволы типа « < » и т.п. Внимание : в DTD ключевое слово « CDATA » имеет другое значение, чем раздел « CDATA » в XML-документе!</p> <p>Помимо типа CDATA, атрибуты могут иметь следующие типы:</p> <ul><li>NMTOKEN - может содержать только буквы, цифры, « . », « - », « _ » и « : »</li> <li>NMTOKENS - может содержать те же символы, что и « NMTOKEN », а также символы пробела, возврата каретки, перевода строки и табуляции</li> </ul> <!ATTLIST title id CDATA #REQUIRED stock NMTOKEN #IMPLIED publisher NMTOKENS #IMPLIED> <p>Еще один тип атрибута « ID » разрешает задавать те же значения, что и тип NMTOKEN, но начинаться значение должно либо с буквы, либо с « _ », либо с « : ». У любого элемента может быть только один атрибут с типом « ID ». Атрибут типа « ID » не может быть константой (объявляться как « FIXED »). Значение атрибута типа « ID » должно быть уникальным для всего XML-документа:</p><p> <!ELEMENT book (title, author)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ATTLIST title id ID #REQUIRED stock CDATA #IMPLIED> <!ATTLIST author id ID #REQUIRED city CDATA #IMPLIED> </p><p>Атрибут элемента может быть ссылкой на атрибут типа « ID » другого элемента. Для этого он объявляется как атрибут типа « IDREF ». Если атрибут должен ссылаться на атрибут типа « ID » нескольких элементов, то испольуется ключевое слово « IDREFS »:</p><p> <!ELEMENT book (title+, author, year, publisher)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ATTLIST title id ID #REQUIRED> <!ATTLIST author id ID #REQUIRED> <!ATTLIST year ref IDREF #REQUIRED> <!ATTLIST publisher from IDREFS #REQUIRED> </p><p>В XML-документе это будет выглядить так:</p><p> <book> <title id="t1" /> <title id="t2" /> <title id="t3" /> <author id="a1" /> <year ref="t2" /> <publisher from="t1 t2 a1" /> </book> </p><h3>Объявление сущностей</h3> <p>Помимо элементов и их атрибутов, мы можем определить <i>сущности </i>, записываемые с помощью ключевого слова « ENTITY »:</p><p> <!ENTITY name "SuperMegaMaster"> </p><p> <userName>&name;</userName> </p><p>В результате чего, на место имени сущности « name », будет подставлено ее значение, в нашем случае — « SuperMegaMaster ».</p> <p>И для полноты нашего счастья, надо добавить, что атрибуты элементов могут иметь в качестве значения подобные сущности — <i>сущности-атрибуты </i>. Они тоже определяются с помощью ключевого слова « ENTITY », но имеют одно ограничение — они должны ссылаться на внешние неанализируемые сущности, определенные во внешнем подмножестве DTD:</p><p> <!DOCTYPE catalog [ <!ENTITY list SYSTEM "companyList.html" NDATA parse> <!ELEMENT catalog (user+)> <!ELEMENT user (name)> <!ATTLIST user company ENTITY #REQUIRED> <!ELEMENT name (#PCDATA)> ] > </p><p>В вышеприведённом примере, объявлена сущность « list », которая ссылается на внешний документ « companyList.html ». Ключевое слово « NDATA », говорит о том, что внешний документ неявляется XML-документом. Далее, для элемента « user » объявляется атрибут « company », который является обязательным и имеет тип « ENTITY », то есть ссылается на какую-либо сущность. Поскольку в нашем пример задана только одна сущность (« list »), то именно она и только она может быть значением атрибута « company » в XML-документе:</p><p> <catalog> <user company="list"> <name>SuperMegaMaster</name> </user> </catalog> </p><p>Осталось только понять, что означает « parse » в строке объявления сущности « list »? Когда используются неанализируемые данные, то есть те, которые не анализируются синтаксическим анализатором XML, хорошо было бы дать информацию приложению (использующему данный XML-документ), каким образом обработать эту сущность, если все-таки потребуется. Для этого нужно использовать нотацию, задаваемую ключевым словом « NOTATION » и дополнить наш DTD следующим образом:</p><p> <!NOTATION parse SYSTEM "iexlorer"> <!ENTITY list SYSTEM "companyList.html" NDATA parse> </p><p>Слово « parse » в объявлении сущности лист указывает на то, каким образом можно проанализировать файл « companyList.html » — найти нотацию с именем « parse » и следовать ее указаниям. В нашем случае, приложение может открыть MS InternetExplorer и загрузить в него документ « companyList.html ».</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> </article> <div class="row article-info"> <div class="share"> <p>Поделиться:</p> <div class="ya-share2" data-services="vkontakte,facebook,odnoklassniki,moimir,twitter" data-counter="" data-image=""></div> </div> <div id="post-ratings-496" class="post-ratings" itemscope itemtype="http://schema.org/Article" data-nonce="adfbd60e67"><img id="rating_496_1" src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="1 Звезда" title="1 Звезда" onmouseover="current_rating(496, 1, '1 Звезда');" onmouseout="ratings_off(5, 0, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" / loading=lazy><img id="rating_496_2" src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 Звезды" title="2 Звезды" onmouseover="current_rating(496, 2, '2 Звезды');" onmouseout="ratings_off(5, 0, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" / loading=lazy><img id="rating_496_3" src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="3 Звезды" title="3 Звезды" onmouseover="current_rating(496, 3, '3 Звезды');" onmouseout="ratings_off(5, 0, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" / loading=lazy><img id="rating_496_4" src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="4 Звезды" title="4 Звезды" onmouseover="current_rating(496, 4, '4 Звезды');" onmouseout="ratings_off(5, 0, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" / loading=lazy><img id="rating_496_5" src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="5 Звезд" title="5 Звезд" onmouseover="current_rating(496, 5, '5 Звезд');" onmouseout="ratings_off(5, 0, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" / loading=lazy> <span>5,00 / 3</span> </div> </div> <div class="breadcrumbs" typeof="BreadcrumbList" vocab="http://schema.org/"> <span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Роутер. Настройка. Антивирусы. Программы. Хаки. Windows" href="/" class="home"><span property="name">Главная</span></a> <meta property="position" content="1"> </span><span class="sep">→</span><span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Netgear" href="/category/netgear/" class="taxonomy category"><span property="name">Netgear</span></a> <meta property="position" content="2"> </span><span class="sep">→</span><span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Введение в XML DTD. Основы использования XML-схем для определения элементов" href="/netgear/vvedenie-v-xml-dtd-osnovy-ispolzovaniya-xml-shem-dlya-opredeleniya/" class="taxonomy category"><span property="name">Введение в XML DTD. Основы использования XML-схем для определения элементов</span></a> <meta property="position" content="3"> </span><span class="sep">→</span> </div> <div class="title-30">Статьи по теме:</div> <ul class="row related"> <li><a href="/zyxel/pristavka-perfeo-pf-120-dvb-t2-instrukciya-nastroika-i-podklyuchenie-pristavki/"><img src="https://i2.wp.com/nix.ru/autocatalog/usb_chargers/337385_2254_draft_small.jpg" alt="Настройка и подключение приставки цифрового телевидения" / loading=lazy>Настройка и подключение приставки цифрового телевидения</a></li> <li><a href="/program/cifrovoi-dvb-t2-resiver-perfeo-nastroika-i-podklyuchenie-pristavki-cifrovogo/"><img src="https://i0.wp.com/video-audio.ru/system/files/upload/PF-168-1-IN-NEW_0.jpg" alt="Настройка и подключение приставки цифрового телевидения" / loading=lazy>Настройка и подключение приставки цифрового телевидения</a></li> <li><a href="/program/besprovodnaya-akustika-jbl-go-otzyvy-pokupatelei-besprovodnaya/"><img src="https://i2.wp.com/mediapure.ru/wp-content/uploads/2015/05/DSC_0015.jpg" alt="Беспроводная акустика JBL GO Black (JBLGOBLK) - Отзывы Внешний вид и элементы управления" / loading=lazy>Беспроводная акустика JBL GO Black (JBLGOBLK) - Отзывы Внешний вид и элементы управления</a></li> <li><a href="/program/cifrovaya-sistema-vch-svyazi-po-lep-mc04-plc-virtualnyi-kompyuternyi/"><img src="https://i0.wp.com/radis.ru/images/DSC1557.jpg" alt=" Виртуальный компьютерный музей Dx связь" / loading=lazy> Виртуальный компьютерный музей Dx связь</a></li> </ul> </main> <div class="container colorline sidebar-mobile"> <span class="orange"></span> <span class="green"></span> <span class="blue"></span> <span class="red"></span> <span class="orange-2"></span> </div> <aside class="height sidebar"> <div class="title-30">Подписывайтесь!</div> <div id="social" align="center"> <ul> <li class="vk"><a href="https://vk.com/share.php?url=https://exactlycase.ru/netgear/vvedenie-v-xml-dtd-osnovy-ispolzovaniya-xml-shem-dlya-opredeleniya/"> </a></li> <li class="fb"><a href="https://www.facebook.com/sharer/sharer.php?u=https://exactlycase.ru/netgear/vvedenie-v-xml-dtd-osnovy-ispolzovaniya-xml-shem-dlya-opredeleniya/"> </a></li> </ul> </div> <script id="custom-block-89228387" type="text/javascript">ads_block(3, 89228387, 5127);</script><div class="title-30">Популярные статьи</div> <div class="popular-articles"> <div class="article-block"> <img width="640" height="480" src="/uploads/82bebdc84b91d704bb703db1c13f4723.jpg" class="attachment-image145x100 size-image145x100 wp-post-image" alt="Как шифровалась связь: технологии защиты в годы войны Вч связь по линиям электропередачи" sizes="(max-width: 640px) 100vw, 640px" / loading=lazy> <div class="rating"><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy> <span>5,00 / 2</span></div> <a class="title" href="/data-recovery/virtualnyi-kompyuternyi-muzei-kak-shifrovalas-svyaz/">Как шифровалась связь: технологии защиты в годы войны Вч связь по линиям электропередачи</a> </div> <div class="article-block"> <img width="640" height="480" src="/uploads/7b53f01240591a70f8e86d62eecb8afa.jpg" class="attachment-image145x100 size-image145x100 wp-post-image" alt="Почему возникает ошибка "Использование модальных окон в данном режиме запрещено"?" sizes="(max-width: 640px) 100vw, 640px" / loading=lazy> <div class="rating"><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy> <span>5,00 / 2</span></div> <a class="title" href="/data-recovery/modalnaya-forma-1s-pochemu-voznikaet-oshibka-ispolzovanie-modalnyh-okon/">Почему возникает ошибка "Использование модальных окон в данном режиме запрещено"?</a> </div> <div class="article-block"> <img width="640" height="480" src="/uploads/0ba28e35715d9e5b4778445ecb25a55a.jpg" class="attachment-image145x100 size-image145x100 wp-post-image" alt="Как включить полный интерфейс в 1с 8" sizes="(max-width: 640px) 100vw, 640px" / loading=lazy> <div class="rating"><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy> <span>5,00 / 2</span></div> <a class="title" href="/linux/kak-vklyuchit-polnyi-interfeis-v-1s-8-3-panel-funkcii-tekushchego/">Как включить полный интерфейс в 1с 8</a> </div> <div class="article-block"> <img width="640" height="480" src="/uploads/9c5fe177a21ae2141f03ef3a89dd5d0a.jpg" class="attachment-image145x100 size-image145x100 wp-post-image" alt="Переключатели, обычное приложение, управляемые формы" sizes="(max-width: 640px) 100vw, 640px" / loading=lazy> <div class="rating"><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy> <span>5,00 / 2</span></div> <a class="title" href="/netgear/1s-8-pereklyuchatel-na-upravlyaemoi-forme-pereklyuchateli-obychnoe-prilozhenie/">Переключатели, обычное приложение, управляемые формы</a> </div> <div class="article-block"> <img width="640" height="480" src="/uploads/cd81568f2a505fce902e0f2b50b90a07.jpg" class="attachment-image145x100 size-image145x100 wp-post-image" alt="Атол 11 драйвер. Настройка ккт атол. Раздел1: интеграция по и ккт «атол» с использованием библиотек драйвера ккм" sizes="(max-width: 640px) 100vw, 640px" / loading=lazy> <div class="rating"><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy> <span>5,00 / 2</span></div> <a class="title" href="/network-equipment/atol-11-draiver-nastroika-kkt-atol-razdel1-integraciya-po-i-kkt/">Атол 11 драйвер. Настройка ккт атол. Раздел1: интеграция по и ккт «атол» с использованием библиотек драйвера ккм</a> </div> <div class="article-block"> <img width="640" height="480" src="/uploads/a3095541f5fbd28df38fc7f1ccf2739d.jpg" class="attachment-image145x100 size-image145x100 wp-post-image" alt="С информационной системой казначейство – клиент Федеральная информационная система федерального казначейства" sizes="(max-width: 640px) 100vw, 640px" / loading=lazy> <div class="rating"><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy> <span>5,00 / 2</span></div> <a class="title" href="/asus/osobennosti-organizacii-avtomatizirovannyh-informacionnyh-sistem-v-kaznacheistve-s-informacionnoi-si/">С информационной системой казначейство – клиент Федеральная информационная система федерального казначейства</a> </div> <div class="article-block"> <img width="640" height="480" src="/uploads/b575c7853bfef3c4005111c5e4e08f20.jpg" class="attachment-image145x100 size-image145x100 wp-post-image" alt="Функция очистки барабана в стиральной машине фирмы LG" sizes="(max-width: 640px) 100vw, 640px" / loading=lazy> <div class="rating"><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy><img src="https://exactlycase.ru/wp-content/plugins/wp-postratings/images/stars_kraska/rating_on.gif" alt="2 оценки, среднее: 5,00 из 5" title="2 оценки, среднее: 5,00 из 5" class="post-ratings-image" / loading=lazy> <span>5,00 / 2</span></div> <a class="title" href="/asus/samoochistka-stiralnoi-mashiny-lg-funkciya-ochistki-barabana-v/">Функция очистки барабана в стиральной машине фирмы LG</a> </div> </div> <div id="float-block"> <script id="custom-block-15153835" type="text/javascript">ads_block(33, 15153835, 7513);</script></div> </aside> </div> </div> <div class="container colorline"> <span class="orange"></span> <span class="green"></span> <span class="blue"></span> <span class="red"></span> <span class="orange-2"></span> </div> <footer class="footer"> <div class="small-logo"> <span><img src="/img/logo.png" alt="Роутер. Настройка. Антивирусы. Программы. Хаки. Windows" itemprop="url " loading=lazy> <br></span> <div class="counter"> </div> <br> <p class="copy">© 2024. Все права защищены</p> </div> <ul> <li><a href="" >О проекте</a></li> <li><a href="/feedback/" >Контакты</a></li> <li><a href="" >Рекламодателям</a></li> <li><a href="/sitemap.xml">Карта сайта</a></li> </ul> <div class="info"> </div> <div class="clearfix"></div> </footer> <div id="BlockPeek" style="display: block;text-align: center;position: relative;width: auto;height:0;overflow: hidden"> <div id="yandex_rtb_R-A-175272-8"></div> </div> <script src='//exactlycase.ru/assets/1512461662index1.js' type="text/javascript"></script> <script type='text/javascript'> /* <![CDATA[ */ var rlArgs = { "script":"fancybox","selector":"lightbox","customEvents":"","activeGalleries":"1","modal":"0","showOverlay":"1","showCloseButton":"1","enableEscapeButton":"1","hideOnOverlayClick":"1","hideOnContentClick":"0","cyclic":"0","showNavArrows":"1","autoScale":"1","scrolling":"yes","centerOnScroll":"1","opacity":"1","overlayOpacity":"70","overlayColor":"#666","titleShow":"1","titlePosition":"outside","transitions":"fade","easings":"swing","speeds":"300","changeSpeed":"300","changeFade":"100","padding":"5","margin":"5","videoWidth":"1080","videoHeight":"720","woocommerce_gallery":"0"} ; /* ]]> */ </script> <script src='//exactlycase.ru/assets/1512461662index1.js' type="text/javascript"></script> <script src='//exactlycase.ru/assets/1512461662index1.js' type="text/javascript"></script> <script src="https://yastatic.net/share2/share.js" async="async"></script> </body> </html><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>