Uploaded by grann72

Описание XML документа. Язык описания структуры документа DTD

advertisement
XML технологии
Раздел 2
Описание XML документа
Тема: DTD
DTD - Document Type
Definition
Документ XML может:
 быть не предназначен для вашей системы;
 содержать неправильные данные;
 содержать ошибки в структуре.
XML документ с корректной синтаксической структурой является "синтаксически
верным“ (Well Formed). XML документ, прошедший проверку по DTD, является
"синтаксически верным" (Well Formed) и "валидным“ (Valid).
"Валидный" XML документ — это "синтаксически верный" XML документ, который
также соответствует правилам DTD (определениям типов документов).
DTD является способом точного описания языка XML.
DTD проверяют словарный запас и правильность структуры документов XML на
соответствие грамматическим правилам соответствующего языка XML.
XML DTD может быть либо задан внутри документа, либо он может храниться в
отдельном документе, а затем использоваться отдельно.
Цель DTD состоит в том, чтобы определить структуру XML документа. Это делается
путем определения списка допустимых элементов.
2
DTD - Document Type
Definition
Зачем нужно использовать DTD?
 С DTD ваш XML файл может нести собственный формат.
 С DTD различные, не связанные друг с другом группы людей, могут
приходить к соглашению о стандартах пересекающихся данных.
 С DTD вы можете быть уверены, что получаемые из внешних источников
данные будут корректными.
Когда не стоит использовать DTD?
 Вообще-то для работы XML не требуется DTD.
 Когда вы экспериментируете с XML или работаете с небольшими XML
файлами, то создание DTD может оказаться излишней тратой времени.
 Если вы разрабатываете приложения, то стоит подождать, пока
спецификации не станут стабильными, и только тогда добавлять
определения. В обратном случае ваше приложение может перестать
работать из-за ошибок валидации.
3
DTD - Document Type
Definition
Язык описания структуры документа. DTD описывает:
1. Какие элементы могут присутствовать в документе.
2. Количество элементов.
3. Какие атрибуты могут быть у элементов.
4. Обязательность атрибутов.
5. Описание сущностей.
Пример использования DTD:
XML документ
<address>
<name>Tanmay Patil</name>
<company>TutPoint</company>
<phone>(011) 123-4567</phone>
</address>
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)> ]>
4
Синтаксис DTD
Определение (декларация) DTD
Для того чтобы использовать схему DTD в нашем документе, мы можем:
1) описать ее во внешнем файле (c расширением .dtd ) и при описании схемы DTD просто
указать ссылку на этот файл (внешняя схема DTD).
Синтаксис:
<!DOCTYPE имя_элемента SYSTEM “имя_файла.dtd”>
Пример_1
<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE example SYSTEM “example.dtd”>
<example>Это внешняя схема</example>
(или <!DOCTYPE example PUBLIC "http://site.ru/ example.dtd">)
В нашем примере во второй строке указано:
 DOCTYPE example определяет, что корневым элементом документа
является example.
 Схема DTD находится во внешнем файле example.dtd.
5
Синтаксис DTD
Определение (декларация) DTD
Для того чтобы использовать схему DTD в нашем документе, мы можем:
2) непосредственно внутри самого документа выделить область, в которой определить нужные
правила (внутренняя схема DTD).
Синтаксис:
<!DOCTYPE имя-корневого-элемента []>
Квадратные скобки [] - это место, где необходимо объявить элементы.
Пример_2
<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE example [
<!ELEMENT example (#PCDATA)>
]
<example>Это внутренняя схема</example>
В нашем примере во второй строке указано:


DOCTYPE example определяет, что корневым элементом документа является example.
Схема DTD находится внутри, в ней описан элемент example, в котором содержатся только
символьные данные.
6
Синтаксис DTD
Определение (декларация) DTD
Пример_3
Простой пример внутреннего 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>Иванов Роман</name>
<company>Глобус-инк</company>
<phone>8(863)2202202</phone>
</address>
Объясните, какие элементы описаны во внутренней схеме DTD?
7
Синтаксис DTD
Объявление элементов
Все элементы можно разделить на:
1) элементы-контейнеры, которые могут содержать:
а) данные (например, текст);
б) дочерние элементы;
в) и то, и другое (смешанное содержимое);
2) пустые элементы.
Синтаксис:
<!ELEMENT имя-элемента (тип - что внутри?)>
Содержимое элементов:
EMPTY – пустой (например <br />)
ANY – любое содержимое (встречается редко)
(#PCDATA) – только символьные данные
(список имен вложенных элементов ч.з. запятую) – вложенные элементы должны следовать в
документе в том порядке, в котором они перечислены в объявлении.
Объявляется только один уровень вложенности. Элементы можно группировать скобками.
Использование разделителя “|” между элементами указывает, что встречается один из разделенных
элементов.
После элементов или скобок идут квантификаторы:
+ - от одного и больше
* - от нуля и больше
? - ноль или один
Квантификаторы применяются для указания какое количество раз может повторяться элемент или его
дочерние элементы.




8
Синтаксис DTD
Объявление элементов
Пример_4
<!--Элемент book, содержащий дочерний элемент title-->
<!ELEMENT book (title)>
<!--Элемент book, содержащий дочерние элементы title-->
<!ELEMENT book (title, author, price)>
<!--Элемент wheather, содержащий один из дочерних элементов
celsius или fahrenheit -->
<!ELEMENT wheather (celsius | fahrenheit)>
<!--Элемент title, содержащий только символьные данные-->
<!ELEMENT title (#PCDATA)>
<!--Пустой элемент br-->
<!ELEMENT br EMPTY>
9
Синтаксис DTD
Объявление атрибутов
Атрибуты объявляются после объявления самого элемента. Все атрибуты
одного элемента объявляются сразу, одним списком.
Синтаксис:
<!ATTLIST
имя-элемента
имя-атрибута
тип-значения
обязательность>
Стандартные значения атрибутов:
#REQUIRED
атрибут должен быть указан
#FIXED
значение атрибута фиксировано. Если значение
атрибута отличается от объявленного, документ не
считается правильным
#IMPLIED
атрибут необязателен
“значение_по_умолчанию”
если в документе опустить атрибут, ему будет
назначено значение по умолчанию, указанное в
кавычках
10
Синтаксис DTD
Объявление атрибутов
1)
2)
3)
Существуют 3 типа атрибутов:
атрибуты, содержащие текстовые данные, указываемые с помощью ключевого
слова CDATA;
маркированные атрибуты, указываемые с помощью определенных ранее маркеров;
ID
Уникальным образом идентифицирует элемент (значение атрибута
должно начинаться с буквы или символа «_»)
IDREF
Указывает на элементы, содержащие атрибут ID
ENTITY
Ссылка на внешний элемент
NMTOKEN
Содержит буквы, цифры, точки, знаки подчеркивания, переносы и
двоеточия, но не пробелы
атрибуты с перечислением, предлагающие целый список допустимых значений (при
перечислении используется знак |, который воспринимается как логический оператор
«или»).
11
Синтаксис DTD
Объявление атрибутов
Пример_5
<!--Объявление необязательного атрибута currency элемента price.
Тип атрибута currency – символьные данные-->
<!ATTLIST price currency CDATA #IMPLIED>
<!--Объявление обязательного атрибута id элемента department. Тип атрибута
id – идентификатор элемента ID-->
<!ATTLIST department id ID #REQUIRED>
<!--Объявление необязательного атрибута department элемента person. Тип
атрибута department – указатель на элемент, содержащий атрибут ID-->
<!ATTLIST person department IDREF #IMPLIED>
12
Синтаксис DTD
Объявление сущностей
В языке XML есть возможность продекларировать фрагменты содержания, а затем
ссылаться на них при необходимости, что позволяет сэкономить время и силы
разработчикам. Объявляя сущность в DTD мы определяем ее имя и содержание, на
которое она ссылается. Ссылаясь на сущность, мы заставляем анализатор заменить
ссылку на содержимое сущности.
Сущности бывают
 анализируемыми (parsed entity) - содержимое сущности анализируется, т.е, например,
при встрече в нем ссылок на другие сущности, они так же замещаются их
содержимым; разметка внутри таких сущностей так же интерпретируется.
 неанализируемыми (unparsed entity) - это не обязательно текст в XML формате, или
совсем не текст (графика или другое мультимедиа содержание).
13
Синтаксис DTD
Объявление сущностей
Ниже
приведен
пример
объявления
и
использования
анализируемых
сущностей author и copyright (обратите внимание: сущность copyright ссылается
на author):
Строка <!ENTITY author "Иванов Иван Иванович"> объявляет сущность author
со значением "Иванов Иван Иванович". Ссылка на сущность выглядит как
символьная подстановка в HTML: &author;. При разборе документа анализатор
встретит ссылку на сущность и заменит ее на значение сущности.
14
Синтаксис DTD
Объявление сущностей
В итоге документ примет следующий вид:
Из приведенного рисунка видно, что ссылка на сущность &author; была заменена ее
содержимым "Иванов Иван Иванович", причем и в "теле" другой сущности - &copyright;.
Анализируемые сущности могут также содержать и разметку.
15
Синтаксис DTD
Определение (декларация) DTD
Пример_6
XML документ
DTD схема
16
Синтаксис DTD
Определение (декларация) DTD
Пример_7
XML документ
DTD схема
ДОБАВИТЬ ПРИМЕР с
ССЫЛКОЙ НА АТРИБУТ, КАК
В КТ-1!!!
17
Валидация
Notepad++
Plugins --> XML Tools --> Validate now
XML Copy Editor
XML --> Проверить --> DTD/XML Schema
Онлайн валидатор (их много)
https://www.xmlvalidation.com
18
С чего начать DTD?
Начинайте написание DTD с дерева XML!
XML документы формируют древовидную структуру, которая начинается с "корневого"
элемента и разветвляется на "дочерние" элементы.
Рассмотрим пример XML и дерево элементов:
Изобразите на листе бумаги дерево элементов Вашего файла XML. Так будет
проще ориентироваться при создании схемы DTD!
19
20
практика
Задача 1
Дан следующий xml документ:
2. Создайте DTD схему и проверьте XML
документ на валидность. Не забудьте
о квантификаторах!
1.
21
практика
Задача 2
1.
2.
3.
4.
В созданном на прошлом занятии XML документе удалите пространства имён и
откорректируйте имена соответствующих элементов.
Создайте DTD схему для документа XML. Проверьте созданный файл на синтаксис.
Проверьте валидность XML документа схеме DTD с помощью онлйн валидатора
https://www.xmlvalidation.com.
Предоставьте XML документ и схему DTD на проверку преподавателю.
22
Download