440 likes | 706 Views
Презентацию подготовила Гайнутдинова Аида, гр. 950б. 2 тема. Определение типа документа . Document Type Definition . (схемы DTD). Сегодня рассмотрим следующее:. Что такое схема DTD и каким образом она связывается с документами XML.
E N D
Презентацию подготовила Гайнутдинова Аида, гр. 950б. 2 тема. Определение типа документа. Document Type Definition. (схемы DTD).
Сегодня рассмотрим следующее: • Что такое схема DTD и каким образом она связывается с документами XML. • Как написать внутреннюю или внешнюю схему DTD. • Объявление элементов и атрибутов в DTD. • Использование ссылок в схемах DTD. • Различия между парсерами с проверкой правильности и без нее. • Некоторые недостатки схем DTD и почему необходимо создание новых тем.
Откуда появились схемы DTD DTD – это схема , разработанная еще для языка SGML. Когда впервые появился XML, он был как “SGML без DTD”. Вы можете получать хорошо оформленные документы XML, с которыми не будет связано никакой схемы, но схема DTD – это мощное средство добавления ограничений на обмен данных, позволяющее контролировать использование в документах должных структур данных, проверять правильность содержания документа на предмет соблюдения некоторых правил.
И так… Схема DTD предоставляет шаблон разметки документа, в котором указываются наличие, порядок следования и расположение элементов и их атрибутов в документе XML.
Про деревья… Документ XML можно представить в виде древовидной структуры элементов, содержащей данные, другие элементы и атрибуты. Схему DTD тоже можно представить в виде дерева, но между этими деревьями существует ряд различий, даже если документ XML полностью соответствует схеме DTD. Дерево DTD само по себе не повторяет элементы или структуру. Но его структуры дублируют элементы в соответствующем правильном экземпляре XML.
Знакомство с правилами Схемы DTD имеют дело с элементами документа XML или как с элементами-контейнерами, или как с пустыми элементами (т.е. подстановочными элементами в структуре документа). Элементы-контейнеры могут содержать данные (например, текст), дочерние элементы или и то и другое. Схема DTD предоставляет синтаксические правила для представления ограничений для этих обеих моделей содержания.* * Объявления содержания элемента или атрибута в схеме DTD называется моделью содержания для этого элемента или атрибута.
Синтаксис объявления типов основных элементов в DTD Элементы в любом документе XML – это фундаментальные структуры, которые объединены для представления экземпляра XML. Каждый элемент должен быть объявлен в схеме DTD вместе с объявлением его типа. Объявление типов элементов имеет следующий вид: <!ELEMENT имя_элемента(модель содержания)>
Простой элемент с текстовым содержанием 1. Хорошо оформленный экземпляр XML <?xml version = “1.0”?> <note>текст</note> 2.-//- и правильный(со внедр. схемой DTD) <?xml version = “1.0”?> <!DOCTYPE note [ <!ELEMENT note (#PCDATA )> ]> <note>текст</note>
Пояснения к примеру 1 Элемент note содержит только текст и ничего больше. Этот документ можно проверить, создав схему DTD с объявлением типа элемента, указывающим на то, что элемент содержит только зарезервированное ключевое слово #PCDATA или текст. PCDATA – это обычные текстовые данные, но они считываются парсеромXML и обрабатываются должным образом. Если в разметке документа есть ключевое слово #PCDATA, это повлияет на обработку всего документа, что может быть как желательным, так и нежелательным. CDATA – это тоже текст, но он не обрабатывается парсером (кроме символов <, >, &, ’’).
Пояснения к примеру 2 Строка 1 - нужно использовать версию 1.0 спецификации XML. Строка 2- объявление определенного типа документа, которое дается в прологедокумента XML: <!DOCTYPE …> Существует объявление элемента note, в [] – внутренняя схема DTD. Здесь note – корневой элемент. Строка 3 – объявление типа элемента для note. Здесь указано, что note может содержать только текстовые данные. В () указывается модель содержания, которая сообщает парсеру, что следует ожидать от каждого элемента XML в документе. Строка 4 означает закрытие внутренней схемы DTD и указывает обработчику, что дальше следует документ XML. Строка 5 содержит элемент note вместе с его текстовым содержанием(#PCDATA).
Элемент, содержащий другой элемент Элементы могут быть контейнерами для других элементов. Таким элементом обычно выступает корневой элемент документа XML. В данном случае для создания схемы DTD нужно указать, что элемент note содержит элемент message, а не текстовые данные. Затем объявить элемент message вместе с его текстовым содержанием (#PCDATA), т.к. д.б. объявлены все элементы экземпляра XML – именно эта часть структуры и подкрепляется с помощью схемы DTD.
Пример 1. *Элемент, содержащий только 1 дочерний экземпляр <?xml version = “1.0”?> <note> <message>Дочерний экземпляр</message> </note> 2.Определение типа документа для элемента* <?xml version = “1.0”?> <!DOCTYPE note [ <!ELEMENT note (message)> <!ELEMENT message(#PCDATA )> ]> <note> <message>Дочерний экземпляр</message> </note>
Объявление пустого элемента Пустые элементы обычно используются для подстановки или же для предоставления требуемых значений атрибутов, которые должным образом не изменяют другие элементы. Добавим пустой элемент number. Для этого объявим, что корневой элемент note содержит number, и укажемв модели содержания, что элемент пуст (не содержит ни текстовые данные, ни другие элементы), при помощи слова EMPTY.
Пример 1.Пустой элемент в документе XML <?xml version = “1.0”?> <note> <number /> <message>текст</message> </note> 2.Опредение типа документа для пустого элемента <?xml version = “1.0”?> <!DOCTYPE note [ <!ELEMENT note (number, message)> <!ELEMENT number EMPTY> <!ELEMENT message(#PCDATA )> ]> <note> <number /> <message>текст</message> </note>
Использование ключевого слова ANY схемы DTD Иногда мы знаем, что некий элемент не пустой (что-то содержит), но не уверенны, какая именно модель содержания нужна, тогда используется ключевое слово ANY. Оно снимает целый ряд ограничений с модели содержания, т.е. элемент может содержать данные любого типа, независимо от конкретных имен и порядка. Чтобы документ считался правильным, необходимо добавить строку <!ELEMENT date EMPTY>, без нее документ не будет правильным. Мы не можем включать в экземпляр XML элементы, которые не были объявлены в схеме DTD.
Пример 1.Добавление еще одного дочернего элемента к note <?xml version = “1.0”?> <note> <number /> <message>текст</message> <date /> </note> 2.Определение содержания для элемента note <?xml version = “1.0”?> <!DOCTYPE note [ <!ELEMENT note ANY > <!ELEMENT number EMPTY> <!ELEMENT message(#PCDATA )> <!ELEMENT date EMPTY> ]> <note> <number /> <message>текст</message> <date /> </note>
Модели смешанного содержания Эти модели используются, когда необходимо установить правило, которое разрешало бы элементу содержать некоторую комбинацию текстовых данных и других элементов. Если корневой элемент содержит текст, то нужно заранее объявить его смешанное содержание при помощи знаков “|”- “или” и “*”- элемент может использоваться несколько раз или не использоваться вообще .
Пример 1.Смешанное содержание элемента <?xml version = “1.0”?> <note>Важная заметка <number /> <message>текст</message> <date /> </note> 2.Проверка правильности элемента с помощью модели смеш.содерж. <?xml version = “1.0”?> <!DOCTYPE note [ <!ELEMENT note (#PCDATA | number | message | date)* > <!ELEMENT number EMPTY> <!ELEMENT message(#PCDATA )> <!ELEMENT date EMPTY> ]> <note>Важная заметка <number /> <message>текст</message> <date /> </note>
Подведение итогов по моделям содержания
Объявление атрибутов в схеме DTD Превратим пустые элементы number и date в атрибуты элемента message, поскольку они дополняют именно его. Объявление атрибутов представляется в следующем виде: <!ATTLIST имя_элемента имя_атрибута1 (тип) значение по умолчанию имя_атрибута2(тип)значениепо умолчанию>
Пример 1. Экземпляр XML с атрибутами <?xml version = “1.0”?> <note> <messagenumber=“10” date=“073001”> текст</message> </note>
Типы атрибутов Существует 3 фундаментальных типа атрибутов, объявляемых в рамках системы DTD: • Строки, указываемые с помощью ключевого слова CDATA. • Маркированные атрибуты, указываемые с помощью определенных раньше маркеров. • Атрибуты с перечислением, предлагающие целый список допустимых значений.
Стандартные значения атрибутов схемы DTD
Объявление атрибутов строкового типа 1.Определение типа документа с помощью ATTLIST <?xml version = “1.0”?> <!DOCTYPEnote [ <!ELEMENT note (message)> <!ELEMENT message (#PCDATA)> <!ATTLIST message number CDATA #REQUIRED date CDATA #REQUIRED> ]> <note> <message number=“10” date=“073001”> Определение типа документа</message> </note>
Объявление атрибутов типа #FIXED 1. Правильный экземпляр XML с #FIXED <?xml version = “1.0”?> <!DOCTYPEnote [ <!ELEMENT note (message)> <!ELEMENT message (#PCDATA)> <!ATTLIST message number CDATA #REQUIRED date CDATA #REQUIRED from CDATA #FIXED “Отправитель”> ]> <note> <message number=“10” date=“073001”from=“Отправитель”> Фиксированное значение атрибута</message> </note>
Объявление атрибутов типа #IMPLIED 1.Правильный экземпляр XML с атрибутом #IMPLIED <?xml version = “1.0”?> <!DOCTYPEnote [ <!ELEMENT note (message)> <!ELEMENT message (#PCDATA)> <!ATTLIST message number CDATA #REQUIRED date CDATA #REQUIRED from CDATA #FIXED “Отправитель” status CDATA #IMPLIED> ]> <note> <message number=“10” date=“073001”from=“Отправитель” status=“urgent”> Фиксированное значение атрибута</message> </note>
Атрибуты маркированных типов в схемах DTS
Использование атрибутов типов ID и IDREF Ситуация: приложение сохраняет короткие сообщения. Каждому сообщению присваивается уникальный идентификатор (атрибут number). Это же приложение сохраняет элементы outcome и связывает их с определенным элементом message (с помощью атрибута msg), для дальнейшей обработки.
Пример к ситуации <?xml version = “1.0”?> <!DOCTYPE note [ <!ELEMENT note (message+, outcome+)> <!ELEMENT message (#PCDATA)> <!ATTLIST message number ID #REQUIRED from CDATA #REQUIRED> <!ELEMENT outcome (#PCDATA)> <!ATTLIST outcome msg IDREF #IMPLIED> ]> <note> <message number=“a1” from=“KS”>текст1</message> <message number=“a2” from=“GS”>текст2</message> <message number=“a3” from=“GK”>текст3</message> <outcome msg=“a1”>к первому</outcome> <outcome msg=“a2”>ко второму</outcome> </note>
Использование элементов ENTITY в схемах DTD ENTITY – это ссылки, позволяющие реализовать подстановку строк. Объявление и определение ссылок или подстановочных элементов осуществляются в схеме. Когда обработчик XML доходит до подстановочного элемента, он заменяется соответствующими, заранее определенными данными. На наличие подстановочного элемента указывает “&”, “;” ограничивает ссылку:&ссылка; <…[ … <!ENTITY today “073001”> …]> <note><message>&today; - текст</message></note> <note><message>073001 - текст</message></note>
Использование атрибутов типа NMTOKEN Тип NMTOKEN позволяет наложить ограничение на допуcтимые символы в содержании XML (только буквы, цифры, точки, -, :, _). <…[ … phone NMTOKEN #REQUIRED …]> <note>… phone=“123-456-789” …</note> <note>… phone=“123 456 789” …</note> - неправильный вариант использования с “ ”.
Использование в схемах DTD атрибутов типов с перечислением Атрибуты типов с перечислением содержат список допустимых значений, из которых можно выбирать любое. Значения из списка указываются с помощью знака “|” – логическое “или”. <… [ … alert ( low | normal | urgent) “normal”…]> <note>…alert=“low” …</note> <note>… …</note> // alert=“normal” <… [ … alert ( low | normal | urgent) #IMPLIED…]> <note>… …</note> // необязательный
Индикаторы вхождения и объявления последовательностей в схемах DTD Индикаторы последовательностей иногда называют соединителями (connector), так как они служат для соединения или установления взаимосвязи между двумя или большим числом элементов.
Индикаторы последовательностей и вхождений для схем DTD
Анализ правильных экземпляров XML Для проверки документов XML с использованием схемы DTD необходим соответствующий парсер. Он поставляется в виде COM-объекта вместе с Internet Explorer-ом, хотя и не используется браузером. Для получения доступа к нему следует создать объект парсера в браузере с помощью сценария(JavaScript, VBScript). Или загрузить с узла MSDN (http://msdn.microsoft.com/downloads/samples/internet/xml/xml_validator/ ).
Объявление внешних схем DTD Отличие внешней схемы DTD от внутренней в том, что она сохраняется в виде отдельного файла с расширением .DTD. Для упрощения лучше хранить документы XML, схемы DTD и сценарии парсера в одной папке. Чтобы указать внешнюю схему DTD, необходимо в объявлении типа документа включить слово SYSTEM или PUBLIC, после указать адрес URL файла , содержащего DTD. PUBLIC – схема общедоступна и совместно используется многими пользователями, обычно хранится в репозитарии. <!DOCTYPE корневой_элемент SYSTEM “myrules.DTD”>
Вопросы и ответы Повторим то, что узнали сегодня.
Откуда появился подход с использованием схем DTD? • Этот подход унаследован от языка SGML. В котором он использовался на протяжении многих лет.
Для чего именно применяются схемы DTD в языке XML? • Схемы DTD (как и любые другие схемы XML) предоставляют шаблон разметки документа, в котором определяется наличие, порядок и расположение элементов и их атрибутов в документе XML.
В чем состоит различие между деревом схемы DTD и деревом документа? • Дерево DTD само по себе не содержит повторяющихся элементов или структур. Однако его структура обеспечивает повторение элементов в соответствующем правильном экземпляре XML.
Что означает объявление типа документа для экземпляра XML? • Объявление типа документа, которое располагается в прологе документа XML, связывает схему DTD с документом. Как только разработчик сталкивается с подобным объявлением, он загружает схему DTD и проверяет документ XML на соответствие всем ограничениям, изложенным в этой схеме.
Какие ключевые слова DTD можно использовать для определения различных типов содержания элементов в XML? • Ключевое слово ANY допускает любое содержание элемента – или данные, или другие элементы. Смешанное содержание позволяет элементам содержать комбинацию текстовых данных и элементов. Ключевое слово EMPTY указывает на отсутствие в элементе какого-либо содержания. Содержание можно объявить для элементов-контейнеров прямо в документе XML.
Какие два вида парсеров используются в XML? • Все парсеры XML делятся на две группы – 1)способные проверять документы на соответствие ограничениям, изложенным в схеме DTD или подобной схеме другого типа; 2) не обладающие подобными возможностями. Парсервторого типа может определить только то, что документ XML хорошо оформлен, т.е. соответствует основным синтаксическим правилам XML. Парсер первого типа способен пойти дальше, определив то, что документ XML хорошо оформлен, но и то, что он соответствует всем ограничениям, заданным в связанной с ним схеме.
Упражнение Проверьте свои знания, полученные в результате изучения материала настоящего урока. Cоздайте свою схему DTD для проверки файлов.