Основы XML-технологий

Содержание

Слайд 2

Введение XML: W3C-стандарт Две грани XML: ориентация на документ и ориентация

Введение

XML: W3C-стандарт
Две грани XML: ориентация на документ и ориентация на данные
Причины

появления
HTML описывает представление
XML описывает содержимое
Пользователь описывает теги для разметки “содержимого”
Основан на текстовом формате
Идеален для формата “Обмен данными”
Ключевая технология для “распределенных” программ
XML близок к объектно-ориентированным и так называемым полу-структурированным данным.
Слайд 3

Структурированность данных в реляционной модели Name: Id : Address(Number): Address (Street):

Структурированность данных в реляционной модели
Name: Id : Address(Number): Address (Street):
John Doe

s11111 123 Main
Joe Public s22222 34 Mosat
Слайд 4

Полуструктурированные данные в HTML HTML описывает представление. Пример HTML-документа «список студентов»

Полуструктурированные данные в HTML

HTML описывает представление.
Пример HTML-документа «список студентов»
для вывода

на экран в Web-навигаторе
Name: John Doe
Id: s111111111
Address:

  • Number: 123

  • Street: Main



Name: Joe Public
Id: s222222222
… … … …

HTML не разделяет атрибуты и их значения

Слайд 5

Модель полуструктурированных данных Множество пар. {name: "Alan", tel: 2157786, email: “a@abc.com”

Модель полуструктурированных данных

Множество пар.
{name: "Alan",
tel: 2157786,
email:

“a@abc.com”
}
Значения сами могут быть структурами
{name: {first: “Alan”, last: “Black”},
tel: 2157786,
email: “a@abc.com”
}

name

tel

email

2157786

“a@abc.com”

last

first

“Alan”

“Black”

Графовая модель: узлы представляют объекты, которые соединяются со значениями через дуги

Слайд 6

Модель полуструктурированных данных Дубликаты допускаются {name: "Alan", tel: 2157786, tel: 2498762"}

Модель полуструктурированных данных

Дубликаты допускаются
{name: "Alan", tel: 2157786, tel: 2498762"}
Синтаксис просто

генерирует описания множества объектов
{person: {name: “Alan”,tel: 2157786,email: “a@abc.com”}
person: {name: “Sara”,tel: 2136877,email: “sara@abc.com”}
person: {name: “Fred”,tel: 7786312,email: “fred@abc.com”}
}
Все объекты внутри множества могут быть разной структуры
{person:{name: “Alan”,tel: 2157786,email: “a@abc.com”},
person:{name: {first: “Sara”,last: “Black”},email: “s@abc.com”},
person:{name: “Fred”, tel: 7786312, height: 168}
}
Слайд 7

Модель полуструктурированных данных Простое представление реляционных данных {r1: {row: {a: a1,

Модель полуструктурированных данных

Простое представление реляционных данных
{r1: {row: {a: a1, b:

b1, c: c1},
{row: {a: a2, b: b2, c: c2}},
r2: {row: {c: c2, d: d2},
row: {c: c3, d: d3},
row: {c: c4, d: d4}}
}
Объектно-ориентированные данные представляются естественно (каждый узел имеет уникальный идентификатор объекта)
{person: &o1{name: “Mary”, age: 45,
child: &o2, child: &o3},
person: &o2{name: “John”, age: 17,
relatives: {mother: &o1, sister: &o3}},
person: &o3{name: “Jane”, country: “Canada”, mother: &o1}
}
Слайд 8

XML – Стандарт для полуструктурированных данных XML: eXtensible Markup Language Удобен

XML – Стандарт для полуструктурированных данных

XML: eXtensible Markup Language
Удобен для полуструктурированных

данных
Используется для описания содержимого, а не представления
Отличается от HTML т.к.
Автором документа могут быть определены новые теги
Нет семантики тегов. Например, HTML …
означает таблицу,; in XML: не означает ничего определенного.
Структуры могут быть вложенными
Слайд 9

Синтаксис XML. XML Элемент Элемент – часть текста, ограниченная согласованными тегами,

Синтаксис XML. XML Элемент

Элемент – часть текста, ограниченная согласованными тегами, определенными

пользователем:

Alan
42
agb@abc.com

Комментарии:
Элемент включает открывающий и закрывающий теги
Отсутствие кавычек в строках, т.к. все данные рассматриваются в виде текста. Определяются как PCDATA (Parsed Character Data – символьные данные, обрабатываемые синтаксическим анализатором).
Возможность пустого элемента:
может быть заменен на
Слайд 10

Синтаксис XML Коллекции определяются через повторяющиеся структуры. Например, коллекция всех личностей,

Синтаксис XML

Коллекции определяются через повторяющиеся структуры.
Например, коллекция всех личностей, работающих

на четвертом этаже:

People on the 4th floor


Alan42
agb@abc.com


Ryan58
rgz@abc.com



Слайд 11

Синтаксис XML. XML Атрибуты Атрибут определяет некоторые свойства элемента Представляется как

Синтаксис XML. XML Атрибуты

Атрибут определяет некоторые свойства элемента
Представляется как пара “название-значение”

trompette six trous
420.12

31 rue Croix-Bosset
92310
Sevres
France


Внутри тега можно определить любое кол-во атрибутов
Значения атрибутов должны быть расположены внутри двойных кавычек.
Слайд 12

Синтаксис XML. Атрибуты или Элементы ? Атрибут внутри тега может появляться

Синтаксис XML. Атрибуты или Элементы ?
Атрибут внутри тега может появляться только

один раз, его значение – всегда строка.
Теги элемент/подэлемент могут повторяться любое кол-во раз, а их значениями могут быть строки или подэлементы
Некоторые данные могут быть представлены с использованием атрибутов или элементов, или их комбинацией

agb@abc.com

или

42
agb@abc.com

Слайд 13

Синтаксис XML. XML Ссылки Использование id атрибута для определения ссылки Использование

Синтаксис XML. XML Ссылки
Использование id атрибута для определения ссылки
Использование idref атрибута

(в пустом элементе) для установления ссылки на ранее описанную ссылку (id).
-- определяет id или ссылку
NE
Nevada


CCN
Carson City
-- ссылается на объект s2;

Слайд 14

Синтаксис XML. Другие XML конструкции Комментарий: Процессные инструкции (Processing Instruction -

Синтаксис XML. Другие XML конструкции
Комментарий:

Процессные инструкции (Processing Instruction - PI):


Такие инструкции могут обрабатываться программой, обрабатываемой XML-файл.
CDATA (Character Data): используется для записи особых блоков, содержащих текст с разметками, не являющимися тегами:
this is not an element]]>
Записи: < эквивалентно символу <

Слайд 15

Правильно созданный (Well-Formed) XML-документ XML-документwell-formed если Теги синтаксически корректны Каждый тег

Правильно созданный (Well-Formed) XML-документ

XML-документwell-formed если
Теги синтаксически корректны
Каждый тег имеет закрывающий тег
Теги

правильно вложены
Существует корневой (root) тег
В теге не может быть двух повторяющихся атрибутов
XML-документ должен быть well-formed перед обработкой.
well-formed XML-документ в процессе синтаксического анализа превращается в дерево узлов
Слайд 16

… … … … … … Элементы могут быть вложенными Корневой



<br> <Person><br></div></h2><div class="slides-content">… … …<br> </Person><br> <Person><br> … … …<br> </Person><br></PersonList><br>Элементы могут быть вложенными<br>Корневой элемент включает все остальные теги<br><p> <br><p>Имя элемента ( или тега)<br><p>Терминология<br><p>элементы<br><p>Root элемент<br><p>Пустой элемент<br><p> <br><p>атрибуты<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide17" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 17</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-16.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Терминология John is a nice fellow 21 Main St. … …" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-16.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-16.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-16.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-16.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Терминология<br><Person Name = “John” Id = “s111111111”><br> John is a nice</div></h2><div class="slides-content">fellow<br> <Address><br> <Number>21</Number><br> <Street>Main St.</Street><br> </Address><br> … … …<br></Person><br><p>Открывающий тег<br><p>Закрывающий тег: <br>Что окрыто - должно быть закрыто<br><p>Вложенный <br>элемент,<br>ребенок <br>Личности<br><p>Parent of Address,<br>Ancestor of number<br><p>“одинокий” текст, не очень полезен как данные<br><p>Child of Address,<br>Descendant of Person<br><p>Содержимое Личности<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide18" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 18</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-17.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="XML модель данных Bart Simpson 02–4447777 051–011022 bart@tau.ac.il Document Object Model" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-17.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-17.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-17.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-17.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>XML модель данных<br><p>Bart Simpson<br><p>02–4447777<br><p>051–011022<br><p>bart@tau.ac.il<br><p> Document Object Model (DOM) – DOM Дерево<br></div></h2><div class="slides-content">Листья могут быть пустыми или содержать PCDATA<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide19" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 19</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-18.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Пример реляционной базы данных сотрудников" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-18.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-18.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-18.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-18.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Пример реляционной базы данных сотрудников<br></div></h2><!----><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide20" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 20</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-19.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Пример XML базы данных сотрудников. Фрагмент" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-19.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-19.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-19.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-19.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Пример XML базы данных сотрудников. Фрагмент<br></div></h2><!----><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide21" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 21</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-20.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Document Type Definitions (DTD) – определение типа документа DTD: Document Type" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-20.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-20.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-20.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-20.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Document Type Definitions (DTD) – определение типа документа<br><p>DTD: Document Type Definition</div></h2><div class="slides-content">– один из способов спецификации структуры XML документа.<br>DTD добавляет синтаксические требования в дополнение к требованиям well-formed документа.<br>DTDs помогает<br>Обнаруживать ошибки при создании или редактирования XML документов.<br>Упрощает процесс обработки XML документов.<br>Использует “регулярные выражения” как синтаксис для спецификации граматики XML документа.<br>Имеет ограничения: нет типов данных, нет возможности описания ограничений, нет поддержки схем.<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide22" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 22</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-21.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Пример: Адресная книга Homer Simpson Dr. H. Simpson 1234 Springwater Road" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-21.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-21.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-21.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-21.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Пример: Адресная книга<br><p><person> <br> <name> Homer Simpson </name><br> <greet> Dr. H. Simpson </greet><br> <addr>1234</div></h2><div class="slides-content">Springwater Road </addr><br> <addr> Springfield USA, 98765 </addr><br> <tel> (321) 786 2543 </tel><br> <fax> (321) 786 2544 </fax><br> <tel> (321) 786 2544 </tel><br> <email> homer@math.springfield.edu </email> <br></person> <br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide23" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 23</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-22.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Спецификация структуры name имя элемента greet? опционально (0 или 1) приветственных" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-22.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-22.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-22.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-22.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Спецификация структуры<br><p>name имя элемента<br>greet? опционально (0 или 1) приветственных элементов<br>name, greet?</div></h2><div class="slides-content">имя перед опциональным приветствием<br>addr* для определения 0 или более адресов<br>tel | fax элемент с телефоном или факс <br>(tel | fax)* 0 или более повторений телефона или факса<br>email* 0 или более элементов почтовых адресов<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide24" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 24</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-23.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Определение типа элемента Для каждого элемента типа E, описание формы: где" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-23.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-23.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-23.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-23.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Определение типа элемента<br><p>Для каждого элемента типа E, описание формы:<br><!ELEMENT E content-model><br>где</div></h2><div class="slides-content">content-model выражение:<br>Content-model ::= <br> EMPTY | ANY | #PCDATA | E’ | <br> P1, P2 | P1 | P2 | P1? | P1+ | P1* | (P)<br>E’ тип элемента<br>P1 , P2 конкатенация<br>P1 | P2 альтернатива <br>P? 0 или 1 раз появлений<br>P+ 1 или более появлений<br>P* любое количество появлений ( может отсутствовать)<br>(P) группировка<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide25" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 25</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-24.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="XML-документ адресной книги с описанием DTD внутри самого файла (fax | tel)*, email*)> ]>" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-24.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-24.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-24.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-24.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>XML-документ адресной книги с описанием DTD внутри самого файла <br><p><?xml version="1.0"</div></h2><div class="slides-content">encoding="UTF-8"?><br><!DOCTYPE addressbook [<br> <!ELEMENT addressbook (person*)><br> <!ELEMENT person (name, greet?, address*, <br> (fax | tel)*, email*)><br> <!ELEMENT name (#PCDATA)><br> <!ELEMENT greet (#PCDATA)><br> <!ELEMENT address (#PCDATA)><br> <!ELEMENT tel (#PCDATA)><br> <!ELEMENT fax (#PCDATA)><br> <!ELEMENT email (#PCDATA)><br>]><br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide26" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 26</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-25.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Спецификация атрибута DTD dimension CDATA #REQUIRED accuracy CDATA #IMPLIED > Атрибут" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-25.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-25.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-25.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-25.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Спецификация атрибута DTD<br><p><!ELEMENT height (#PCDATA)><br><!ATTLIST height <br> dimension CDATA #REQUIRED<br> accuracy</div></h2><div class="slides-content">CDATA #IMPLIED ><br> Атрибут dimension обязан присутстовать<br> Атрибут accuracy может отсутствовать<br> CDATA – это тип атрибута – символьные данные<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide27" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 27</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-26.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Формат определения атрибутов определение_атрибута> Значение представляется внутри кавычек Типы атрибутов: CDATA" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-26.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-26.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-26.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-26.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Формат определения атрибутов<br><p><!ATTLIST имя_атрибута тип_атрибута <br> определение_атрибута><br>Значение представляется внутри кавычек<br>Типы атрибутов:</div></h2><div class="slides-content"><br>CDATA <br>ID, IDREF, IDREFS<br>ID, IDREF, IDREFS используются для ссылок <br>Определение атрибута<br>#REQUIRED: атрибут должен присутствовать <br>#IMPLIED: атрибут может отсутствовать <br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide28" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 28</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-27.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Включение DTD в документ A DTD может быть внутренним DTD –" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-27.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-27.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-27.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-27.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Включение DTD в документ<br><p>A DTD может быть<br>внутренним<br>DTD – часть файла с</div></h2><div class="slides-content">документом<br>внешним<br>DTD и документ располагаются в разных файлах<br>внешний DTD может располагаться<br>в локальной файловой системе <br>в удаленной файловой системе<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide29" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 29</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-28.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Связь документа с DTD Внутренний DTD … ]> ... DTD из" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-28.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-28.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-28.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-28.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Связь документа с DTD<br><p>Внутренний DTD<br><?xml version="1.0"?><br> <!DOCTYPE db [<!ELEMENT ...> … ]><br> <db></div></h2><div class="slides-content">... </db><br>DTD из локальной файловой системы: <br><!DOCTYPE db SYSTEM "schema.dtd"><br>DTD из удаленной файловой системы: <br> <!DOCTYPE db SYSTEM "http://www.schemaauthority.com/schema.dtd"><br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide30" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 30</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-29.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Правильный (Valid) XML-документ well-formed XML-документ является правильным (valid ) если он" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-29.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-29.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-29.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-29.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Правильный (Valid) XML-документ<br><p>well-formed XML-документ является правильным (valid ) если он удовлетворяет</div></h2><div class="slides-content">своему DTD, т.е,<br>Документ удовлетворяет граматике регулярных выражений<br>Типы атрибутов корректны<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide31" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 31</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-30.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="XML Схема" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-30.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-30.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-30.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-30.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>XML Схема<br></div></h2><!----><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide32" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 32</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-31.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="XML Схема XML схема определяет: элементы из документа Атрибуты, появляющиеся в" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-31.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-31.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-31.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-31.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>XML Схема<br><p>XML схема определяет: <br>элементы из документа<br>Атрибуты, появляющиеся в элементах<br>Какие элементы</div></h2><div class="slides-content">являются вложенными<br>Порядок следования вложенных элементов <br>Кол-во вложенных элементов <br>Пустой элемент или его содержимое в виде текста <br>Значения по-умолчанию для атрибутов <br>Цели Схемы – определить легальные строительные блоки XML-документа как в DTD. <br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide33" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 33</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-32.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="XML Схема – лучше DTD XML Схема Проще для изучения, чем" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-32.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-32.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-32.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-32.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>XML Схема – лучше DTD<br><p>XML Схема<br>Проще для изучения, чем DTD <br>Расширяемая</div></h2><div class="slides-content">для будущих расширений <br>Богаче и полезнее, чем DTD<br>Написана в XML <br>Поддержка типов данных<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide34" class="slides-item"><!--[--><div class="text-center"><span class="slides-headingUnit">Слайд 34</span></div><h2 class="mb-0"><img src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-33.jpg" onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Пример: Заказ товаров Svendson Oslo St 400 Main Norway Wheel 1 10.90 Cam 1 9.90" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/1371357/slide-33.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/1371357/slide-33.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/1371357/slide-33.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1371357/slide-33.jpg 1440w" class="slides-image"></h2><h2 class="slides-content text-center font-bold"><div><p>Пример: Заказ товаров<br><p><?xml version="1.0"?><br><shipOrder> <br><shipTo> <br><name>Svendson</name> <br><street>Oslo St</street> <br><address>400 Main</address><br><country>Norway</country> <br></shipTo><br><items></div></h2><div class="slides-content"><br><item> <br><title>Wheel
1
10.90


Cam
1
9.90



Слайд 35

XML Схема для заказа товаров

XML Схема для заказа товаров













Слайд 36

XML Схема – Заказ товаров (продолжение) maxOccurs="unbounded" type="cdItem"/> type="xsd:positiveInteger"/>

XML Схема – Заказ товаров (продолжение)


maxOccurs="unbounded" type="cdItem"/>



type="xsd:positiveInteger"/>



Слайд 37

Новые простые типы данных Доступно множество встроенных типов xsd:string, xsd:integer, xsd:positiveInteger,

Новые простые типы данных

Доступно множество встроенных типов
xsd:string, xsd:integer, xsd:positiveInteger,
xsd:decimal, xsd:boolean,

xsd:date, xsd:NMTOKENS, etc.
Определение новых простых типов. Пример определяет myInteger (значение между 10000 и 99999):






Слайд 38

Новые простые типы данных Перечислимый тип:

Новые простые типы данных

Перечислимый тип:


value="AK"/>





Слайд 39

Новые простые типы данных XML Схема имеет 3 встроенных списочных типа:

Новые простые типы данных

XML Схема имеет 3 встроенных списочных типа: NMTOKENS,

IDREFS, ENTITIES
Создание нового списочного типа из простого:



Следующий XML-фрагмент удовлетворяет вышеописанному типу SimpleType:
20003 15037 95977 95945
Слайд 40

Новые простые типы данных Использование функций: length,minLength, maxLength, enumeration Например, для

Новые простые типы данных

Использование функций: length,minLength, maxLength, enumeration
Например, для определения ровно

6-ти штатов (SixUSStates)
Вначале определяется новый списочный тип данных USStateList из типа USState
Затем SixUSStates ограничивается через USStateList с использованием только 6 значений
 


 

 


PA NY CA NY LA AK
Слайд 41

Лексические анализаторы – Parsers

Лексические анализаторы – Parsers

Слайд 42

Parsers (анализаторы) Что такое parser? Программа, которая анализирует грамматические структуры в

Parsers (анализаторы)

Что такое parser?
Программа, которая анализирует грамматические структуры в соответствии с

заданной формальной грамматикой
Parser определяет как предложение может быть сконструировано из грамматики языка через описание атмарных элементов и отношений между ними
Слайд 43

XML-стандарты анализаторов В основном рассматриваются два метода, реализованный организацией W3C для

XML-стандарты анализаторов

В основном рассматриваются два метода, реализованный организацией W3C для доступа

к XML
SAX (Simple API for XML) – простое API для XML
Событийно управляемый анализатор
Протокол “последовательного доступа”
API “только для чтения”
DOM (Document Object Model) – модель объекта документа
Преобразовывает XML в дерево объектов
Протокол “случайного доступа”
Может обновлять XML-документ (insert/delete узлы)
Слайд 44

SAX-анализатор SAX = Simple API for XML XML читается последовательно Когда

SAX-анализатор

SAX = Simple API for XML
XML читается последовательно
Когда поисходит событие анализа,

анализатор вызывает соответствующий метод
Похож на I/O-потоки, работает в одном направлении
Слайд 45

Простой пример данных 1020 1000 1111 10-DEC 94 10506 1 10507

Простой пример данных



1020
1000
1111
10-DEC 94


10506

1


10507
1


10508
2


10509
3



...

Данные заказа XML: несколько заказов, в каждом несколько пунктов, каждый пункт включает номер и кол-во

Слайд 46

Простой пример данных 1020 1000 1111 10-DEC 94 10506 1 10507

Простой пример данных



1020
1000
1111
10-DEC 94


10506

1


10507
1


10508
2


10509
3


...

Данные заказа XML:
несколько заказов с несколькими пунктами, каждый пункт включает номер и кол-во

startDocument

endDocument

События анализатора

Слайд 47

Простой пример данных 1020 1000 1111 10-DEC-94 10506 1 10507 1

Простой пример данных



1020
1000
1111
10-DEC-94


10506
1



10507
1


10508
2


10509
3


...

Данные заказа XML: несколько заказов, в каждом несколько пунктов, каждый пункт включает номер и кол-во

startElement

endElement

Слайд 48

Простой пример данных 1020 1000 1111 10-DEC-94 10506 1 10507 1

Простой пример данных



1020
1000
1111
10-DEC-94


10506
1



10507
1


10508
2


10509
3


...

Данные заказа XML: несколько заказов, в каждом несколько пунктов, каждый пункт включает номер и кол-во

characters

Слайд 49

SAX-анализатор SAX анализатор Когда вижу начало документа выполняю... Когда вижу начало

SAX-анализатор

SAX
анализатор

Когда вижу начало документа выполняю...

Когда вижу начало элемента выполняю...

Когда вижу конец

документа выполняю...
Слайд 50

Используется для создания SAX-анализатора Элементы управления событиями документа: открывающий/закрывающий тег ...

Используется для создания SAX-анализатора

Элементы управления событиями документа: открывающий/закрывающий тег ...
Элементы управления

ошибок анализа

Элементы управления DTD
Элементы управления

Слайд 51

SAX API Два важных класса в SAX API: SAXParser и HandlerBase.

SAX API

Два важных класса в SAX API: SAXParser и HandlerBase.
Создание нового

SAXParser-объекта:
public SAXParser()
Регистрация SAX-элемента управления для объекта анализа для получения извещений о событиях анализа:
public void setDocumentHandler(DocumentHandler h)
Регистрация элемента управления для обнаружения ошибок:
public void setErrorHandler(ErrorHandler h)
Слайд 52

SAX API Класс HandlerBase определяет базовый класс для всех элементов управления.

SAX API

Класс HandlerBase определяет базовый класс для всех элементов управления.
Он

определяет поведение по-умолчанию для различных элементов управления.
Программы расширяют этот класс за счет переопределения следующих методов управления событиями:
public void startDocument() throws SAXException
public void endDocument() throws SAXException
public void startElement() throws SAXException
public void endElement() throws SAXException
public void characters() throws SAXException
public void warning() throws SAXException
public void error() throws SAXException
Слайд 53

Создание SAX-анализатора import org.xml.sax.*; import oracle.xml.parser.v2.SAXParser; public class SampleApp extends HandlerBase

Создание SAX-анализатора

import org.xml.sax.*;
import oracle.xml.parser.v2.SAXParser;
public class SampleApp extends HandlerBase {
// Global

variables declared here
static public void main(String [] args){
Parser parser = new SAXParser();
SampleApp app = new SampleApp();
parser.setDocumentHandler(app);
parser.setErrorHandler(app);
try {
parser.parse(createURL(args[0]).toString());
} catch (SAXParseException e) {
System.out.println(e.getMessage());
}
}
}
Слайд 54

SAX API – простой пример программного кода Создать SAX-анализатор, который читает

SAX API – простой пример программного кода

Создать SAX-анализатор, который читает файл

orders.xml и извлекает различные данные, а в завершение создает запрос на внесение полученных данных в таблицу БД.

//Global Variables
Vector itemNum = new Vector();
int numberOfRows, numberOfItems;
String elementEncountered, orderNumber, takenBy,
customer, receivedDate, partNumber, quantity;
//elementEncountered holds most recent element name
public void startDocument() throws SAXException {
//Print SQL comment, initialize variable
System.out.println("--Start of SQL insert Statements");
itemNum.setSize(1);
numberOfRows = 0;
}//end startDocument

Слайд 55

SAX API – простой пример программного кода public void startElement(String name,

SAX API – простой пример программного кода

public void startElement(String name,

AttributeList atts) throws SAXException {
elementEncountered = name;
if (name.equalsIgnoreCase("items")) {
numberOfItems = 0;
}//end if statement
}//end startElement
public void characters(char[] cbuf, int start, int len) {
if (elementEncountered.equals("orderNumber")
orderNumber = new String(cbuf,start,len);
else if(elementEncountered.equals("takenBy")) {
takenBy = new String(cbuf,start,len);
...
}//end characters
Слайд 56

SAX API – простой пример программного кода public void endElement(String name)

SAX API – простой пример программного кода

public void endElement(String name) throws

SAXException{
if (name.equalsIgnoreCase("item")) {
numberOfItems++;
if (numberOfItems == 1) { // first item; create orders row
System.out.println(
"insert into orders values('"+
orderNumber +"','"+ customer +"','"+
takenBy +"','"+ receivedDate +"','null');");
}
System.out.println("insert into odetails values('"+
orderNumber +"','"+ partNumber +"','"+
quantity +"');");
}//end if statement
if (name.equalsIgnoreCase("items")) {
System.out.println("--------");
}
}//end endElement
Слайд 57

SAX API – простой пример программного кода public void endDocument(){ System.out.println("End

SAX API – простой пример программного кода

public void endDocument(){
System.out.println("End of

SQL insert statements.");
}//end endDocument
public void warning(SAXParseException e)
throws SAXException {
System.out.println("Warning:"+ e.getMessage());
}
public void error(SAXParseException e)
throws SAXException{
throw new SAXException(e.getMessage());
}
Слайд 58

DOM-анализатор DOM = Document Object Model ( Объектная Модель Документа) Анализатор

DOM-анализатор

DOM = Document Object Model ( Объектная Модель Документа)
Анализатор создает дерево

объектов документа
Пользователь получает доступ к данным путем обхода дерева
Дерево и его обход определо W3C-стандартами
API позволяет конструировать, получать доступ и манипулировать структурами и содержимым XML-документов
Слайд 59

Israel 6,199,008 Jerusalem Ashdod France 60,424,213





Israel
6,199,008

capital="yes">Jerusalem
Ashdod


France
60,424,213


Слайд 60

DOM-дерево

DOM-дерево

Слайд 61

Использование DOM-дерева

Использование DOM-дерева

Слайд 62

Интерфейс доступа к узлам Узлы DOM-дерева включают Специальный корневой узел (root)

Интерфейс доступа к узлам

Узлы DOM-дерева включают
Специальный корневой узел (root)
Узлы элементы

(element)
Текстовые узлы и CDATA-секции
Атрибуты (attributes)
Комментарии (comments)
Каждый узел в DOM-дереве реализует интерфейс узла
Слайд 63

Навигация по узлам Каждый узел имеет специальное расположение (location) в узле

Навигация по узлам

Каждый узел имеет специальное расположение (location) в узле
Узловой (Node)

интерфейс определяет методы для навигации по дереву
Node getFirstChild(); – получение первого по порядку наследника
Node getLastChild(); –- получение последнего по порядку наследника
Node getNextSibling(); –- получение следующего родственника текущего уровня (брата)
Node getPreviousSibling(); –- получение предыдущего родственника текущего уровня (брата)
Node getParentNode(); –- получение родительского узла
NodeList getChildNodes(); –- получение узлов-наследников
NamedNodeMap getAttributes() –- получение атрибутов
Слайд 64

Навигация по узлам getFirstChild() getPreviousSibling() getChildNodes() getNextSibling() getLastChild() getParentNode()

Навигация по узлам

getFirstChild()

getPreviousSibling()

getChildNodes()

getNextSibling()

getLastChild()

getParentNode()

Слайд 65

GA Georgia Peach State 6478216 ... ATL Atlanta ... Пример DOM-анализатора





GA
Georgia






Peach State
6478216

...

ATL
Atlanta


...

Пример DOM-анализатора

Рассмотрим XML-данные описания
географической информации по штатам США

Слайд 66

citiesin*, nickname, population)> DTD для географических XML-данных


citiesin*, nickname, population)>
















DTD для географических XML-данных

Слайд 67

create type city_type as object ( ccode varchar2(15), cname varchar2(50) );

create type city_type as object (
ccode varchar2(15),
cname varchar2(50)
);
create type

cities_in_table as table of city_type;
create table state (
scode varchar2(15),
sname varchar2(50),
nickname varchar2(100),
population number(30),
capital city_type,
cities_in cities_in_table,
primary key (scode))
nested table cities_in store as cities_tab;

Географические данные:
Структура БД (Oracle)

Слайд 68

import org.w3c.dom.*; import org.w3c.dom.Node; import oracle.xml.parser.v2.*; public class CreateGeoData { static

import org.w3c.dom.*;
import org.w3c.dom.Node;
import oracle.xml.parser.v2.*;
public class CreateGeoData {
static public void main(String[]

argv)
throws SQLException {
// Get an instance of the parser
DOMParser parser = new DOMParser();
// Set various parser options: validation on,
// warnings shown, error stream set to stderr.
parser.setErrorStream(System.err);
parser.setValidationMode(true);
parser.showWarnings(true);
// Parse the document.
parser.parse(url);
// Obtain the document.
XMLDocument doc = parser.getDocument();

Создание DOM-анализатора объектов

Слайд 69

NodeList sl = doc.getElementsByTagName("state"); NodeList cl = doc.getElementsByTagName("city"); XMLNode e =

NodeList sl = doc.getElementsByTagName("state");
NodeList cl = doc.getElementsByTagName("city");
XMLNode e = (XMLNode) sl.item(j);
scode

= e.valueOf("scode");
sname = e.valueOf("sname");
nickname = e.valueOf("nickname");
population = Long.parseLong(e.valueOf("population"));
XMLNode child = (XMLNode) e.getFirstChild();
while (child != null) {
if (child.getNodeName().equals("capital"))
break;
child = (XMLNode) child.getNextSibling();
}
NamedNodeMap nnm = child.getAttributes();
XMLNode n = (XMLNode) nnm.item(0);

Навигация по DOM-дереву

Слайд 70

Манипулирование узлами Наследник узла в DOM-дереве может быть добавлен, изменен, удален,

Манипулирование узлами

Наследник узла в DOM-дереве может быть добавлен, изменен, удален, перемещен,

скопирован и ...
Для создания новых узлов используется методы класса Document
createElement, createAttribute, createTextNode, createCDATASection , ...
Для манипулирования узлами используются методы класса Node
appendChild, insertBefore, removeChild, replaceChild, setNodeValue, cloneNode(boolean deep) ...
Слайд 71

Сравнение SAX и DOM анализаторов: Эффективность DOM-объект, создаваемые DOM-анализатором являются сложными

Сравнение SAX и DOM анализаторов: Эффективность

DOM-объект, создаваемые DOM-анализатором являются сложными и

требуют больше памяти для хранения, чем сам XML-файл
Затрачивается много времени для предварительного создания
Для больших документов это не практично
SAX-анализаторы сохраняют только локальную информацию, которая учитывается в течение нескольких переходов по дереву
программирование SAX-анализаторов, в общем, является эффективным способом ( но не быстрым)
Слайд 72

Трудности программирования в SAX-анализаторе Программирование в SAX-анализаторе сложно, например: Как найти

Трудности программирования в SAX-анализаторе

Программирование в SAX-анализаторе сложно, например:
Как найти элемент e1,

у которого предком является e2?
Как найти элемент e1 , который имеет элемент-наследник (descendant) e2?
Как найти элемент e1 ссылающийся на атрибут IDREF attribute элемента e2?
Слайд 73

Навигация по дереву SAX-анализаторы предоставялют доступ к элементам только через последовательное

Навигация по дереву

SAX-анализаторы предоставялют доступ к элементам только через последовательное посещение

узлов
SAX-анализатор не читает в обратную сторону
DOM-анализатор может использовать множество методов навигации
Поэтому использование DOM-анализатора удобнее