Презентацию подготовила Гайнутдинова Аида, гр. 950 б.
Что такое схема DTD и каким образом она связывается с документами XML. Как написать внутреннюю или внешнюю схему DTD. Объявление элементов и атрибутов в DTD. Использование ссылок в схемах DTD. Различия между парсерами с проверкой правильности и без нее. Некоторые недостатки схем DTD и почему необходимо создание новых тем.
DTD – это схема, разработанная еще для языка SGML. Когда впервые появился XML, он был как SGML без DTD. Вы можете получать хорошо оформленные документы XML, с которыми не будет связано никакой схемы, но схема DTD – это мощное средство добавления ограничений на обмен данных, позволяющее контролировать использование в документах должных структур данных, проверять правильность содержания документа на предмет соблюдения некоторых правил.
Схема DTD предоставляет шаблон разметки документа, в котором указываются наличие, порядок следования и расположение элементов и их атрибутов в документе XML.
Документ XML можно представить в виде древовидной структуры элементов, содержащей данные, другие элементы и атрибуты. Схему DTD тоже можно представить в виде дерева, но между этими деревьями существует ряд различий, даже если документ XML полностью соответствует схеме DTD. Дерево DTD само по себе не повторяет элементы или структуру. Но его структуры дублируют элементы в соответствующем правильном экземпляре XML.
Схемы DTD имеют дело с элементами документа XML или как с элементами-контейнерами, или как с пустыми элементами (т.е. подстановочными элементами в структуре документа). Элементы- контейнеры могут содержать данные (например, текст), дочерние элементы или и то и другое. Схема DTD предоставляет синтаксические правила для представления ограничений для этих обеих моделей содержания.* * Объявления содержания элемента или атрибута в схеме DTD называется моделью содержания для этого элемента или атрибута.
Элементы в любом документе XML – это фундаментальные структуры, которые объединены для представления экземпляра XML. Каждый элемент должен быть объявлен в схеме DTD вместе с объявлением его типа. Объявление типов элементов имеет следующий вид:
1. Хорошо оформленный экземпляр XML текст 2.-//- и правильный(со внедр. схемой DTD) текст
Элемент note содержит только текст и ничего больше. Этот документ можно проверить, создав схему DTD с объявлением типа элемента, указывающим на то, что элемент содержит только зарезервированное ключевое слово #PCDATA или текст. PCDATA – это обычные текстовые данные, но они считываются парсером XML и обрабатываются должным образом. Если в разметке документа есть ключевое слово #PCDATA, это повлияет на обработку всего документа, что может быть как желательным, так и нежелательным. CDATA – это тоже текст, но он не обрабатывается парсером (кроме символов, &, ).
Строка 1 - нужно использовать версию 1.0 спецификации XML. Строка 2- объявление определенного типа документа, которое дается в прологе документа XML: Существует объявление элемента note, в [ ] – внутренняя схема DTD. Здесь note – корневой элемент. Строка 3 – объявление типа элемента для note. Здесь указано, что note может содержать только текстовые данные. В () указывается модель содержания, которая сообщает парсеру, что следует ожидать от каждого элемента XML в документе. Строка 4 означает закрытие внутренней схемы DTD и указывает обработчику, что дальше следует документ XML. Строка 5 содержит элемент note вместе с его текстовым содержанием(#PCDATA).
Элементы могут быть контейнерами для других элементов. Таким элементом обычно выступает корневой элемент документа XML. В данном случае для создания схемы DTD нужно указать, что элемент note содержит элемент message, а не текстовые данные. Затем объявить элемент message вместе с его текстовым содержанием (#PCDATA), т.к. д.б. объявлены все элементы экземпляра XML – именно эта часть структуры и подкрепляется с помощью схемы DTD.
1. *Элемент, содержащий только 1 дочерний экземпляр Дочерний экземпляр 2. Определение типа документа для элемента* Дочерний экземпляр
Пустые элементы обычно используются для подстановки или же для предоставления требуемых значений атрибутов, которые должным образом не изменяют другие элементы. Добавим пустой элемент number. Для этого объявим, что корневой элемент note содержит number, и укажем в модели содержания, что элемент пуст (не содержит ни текстовые данные, ни другие элементы), при помощи слова EMPTY.
1. Пустой элемент в документе XML текст 2. Опредение типа документа для пустого элемента текст
Иногда мы знаем, что некий элемент не пустой (что-то содержит), но не уверенны, какая именно модель содержания нужна, тогда используется ключевое слово ANY. Оно снимает целый ряд ограничений с модели содержания, т.е. элемент может содержать данные любого типа, независимо от конкретных имен и порядка. Чтобы документ считался правильным, необходимо добавить строку, без нее документ не будет правильным. Мы не можем включать в экземпляр XML элементы, которые не были объявлены в схеме DTD.
1. Добавление еще одного дочернего элемента к note текст 2. Определение содержания для элемента note текст
Эти модели используются, когда необходимо установить правило, которое разрешало бы элементу содержать некоторую комбинацию текстовых данных и других элементов. Если корневой элемент содержит текст, то нужно заранее объявить его смешанное содержание при помощи знаков |- или и *- элемент может использоваться несколько раз или не использоваться вообще.
1. Смешанное содержание элемента Важная заметка текст 2. Проверка правильности элемента с помощью модели смеш.содерж. Важная заметка текст
Содержание СинтаксисИнтерпретация Элемент(ы) Этот элемент может содержать только дочерние элементы Смешанное Содержит комбинацию текстовых данных и дочерних элементов EMPTY Этот элемент ничего не содержит ANY Может содержать текстовые данные или дочерние элементы
Превратим пустые элементы number и date в атрибуты элемента message, поскольку они дополняют именно его. Объявление атрибутов представляется в следующем виде:
1. Экземпляр XML с атрибутами текст
Существует 3 фундаментальных типа атрибутов, объявляемых в рамках системы DTD: 1. Строки, указываемые с помощью ключевого слова CDATA. 2. Маркированные атрибуты, указываемые с помощью определенных раньше маркеров. 3. Атрибуты с перечислением, предлагающие целый список допустимых значений.
Значение Интерпретация #REQUIREDУказывает на то, что атрибут должен быть указан #FIXEDУказывает на фиксированное значение атрибута. Если значение атрибута отличается от объявленного, документ не считается правильным #IMPLIEDАтрибут необязателен. Это означает, что если для элемента атрибут не указан, приложение при обработке может использовать любое значение (если в этом есть необходимость)
1. Определение типа документа с помощью ATTLIST Определение типа документа
1. Правильный экземпляр XML с #FIXED Фиксированное значение атрибута
1. Правильный экземпляр XML с атрибутом #IMPLIED Фиксированное значение атрибута
Значение Интерпретация IDУникальным образом идентифицирует элемент (начинается с буквы, : или _, в каждой инструкции м.б. только один ID) IDREFУказывает на элементы, содержащие ID ENTITYСсылка на внешний элемент NMTOKENСодержит буквы, цифры, точки, знаки подчеркивания, переносы и двоеточия, но не пробелы
Ситуация: приложение сохраняет короткие сообщения. Каждому сообщению присваивается уникальный идентификатор (атрибут number). Это же приложение сохраняет элементы outcome и связывает их с определенным элементом message (с помощью атрибута msg), для дальнейшей обработки.
]> текст 1 текст 2 текст 3 к первому ко второму
ENTITY – это ссылки, позволяющие реализовать подстановку строк. Объявление и определение ссылок или подстановочных элементов осуществляются в схеме. Когда обработчик XML доходит до подстановочного элемента, он заменяется соответствующими, заранее определенными данными. На наличие подстановочного элемента указывает &, ; ограничивает ссылку: &ссылка; …]> &today; - текст текст
Тип NMTOKEN позволяет наложить ограничение на допуcтимые символы в содержании XML (только буквы, цифры, точки, -, :, _). … phone= … … phone= … - неправильный вариант использования с.
Атрибуты типов с перечислением содержат список допустимых значений, из которых можно выбирать любое. Значения из списка указываются с помощью знака | – логическое или. …alert=low … … … // alert=normal … … // необязательный
Индикаторы последовательностей иногда называют соединителями (connector), так как они служат для соединения или установления взаимосвязи между двумя или большим числом элементов.
Символ ПримерИнтерпретация,( a, b, c)Оператор последовательности разделяет члены списка, когда необходимо последовательное использование членов списка (сначала a, затем b, после этого c) |( a|b|c)Оператор выбора разделяет члены списка, когда необходимо использовать только один из членов списка date Отсутствие какого-либо символа указывает на необходимое вхождение одного и только одного элемента date ?subject?Этот символ указывает на необязательное вхождение (нуль или один раз) элемента subject +paragraph+Указывает на обязательное и повторяющееся вхождение(один или несколько раз) элемента paragraph *brother*Указывает на необязательное и повторяющееся вхождение(нуль или несколько раз) элемента brother
Для проверки документов XML с использованием схемы DTD необходим соответствующий парсер. Он поставляется в виде COM-объекта вместе с Internet Explorer-ом, хотя и не используется браузером. Для получения доступа к нему следует создать объект парсера в браузере с помощью сценария(JavaScript, VBScript). Или загрузить с узла MSDN ( /xml_validator/ ).
Отличие внешней схемы DTD от внутренней в том, что она сохраняется в виде отдельного файла с расширением.DTD. Для упрощения лучше хранить документы XML, схемы DTD и сценарии парсера в одной папке. Чтобы указать внешнюю схему DTD, необходимо в объявлении типа документа включить слово SYSTEM или PUBLIC, после указать адрес URL файла, содержащего DTD. PUBLIC – схема общедоступна и совместно используется многими пользователями, обычно хранится в репозитарии.
Повторим то, что узнали сегодня.
Этот подход унаследован от языка SGML. В котором он использовался на протяжении многих лет.
Схемы DTD (как и любые другие схемы XML) предоставляют шаблон разметки документа, в котором определяется наличие, порядок и расположение элементов и их атрибутов в документе XML.
Дерево DTD само по себе не содержит повторяющихся элементов или структур. Однако его структура обеспечивает повторение элементов в соответствующем правильном экземпляре XML.
Объявление типа документа, которое располагается в прологе документа XML, связывает схему DTD с документом. Как только разработчик сталкивается с подобным объявлением, он загружает схему DTD и проверяет документ XML на соответствие всем ограничениям, изложенным в этой схеме.
Ключевое слово ANY допускает любое содержание элемента – или данные, или другие элементы. Смешанное содержание позволяет элементам содержать комбинацию текстовых данных и элементов. Ключевое слово EMPTY указывает на отсутствие в элементе какого-либо содержания. Содержание можно объявить для элементов- контейнеров прямо в документе XML.
Все парсеры XML делятся на две группы – 1) способные проверять документы на соответствие ограничениям, изложенным в схеме DTD или подобной схеме другого типа; 2) не обладающие подобными возможностями. Парсер второго типа может определить только то, что документ XML хорошо оформлен, т.е. соответствует основным синтаксическим правилам XML. Парсер первого типа способен пойти дальше, определив то, что документ XML хорошо оформлен, но и то, что он соответствует всем ограничениям, заданным в связанной с ним схеме.
Проверьте свои знания, полученные в результате изучения материала настоящего урока. Cоздайте свою схему DTD для проверки файлов.