Содержание

Слайд 2

Некоторые факты о XML

XML = eXtensible Markup Language
Разработан соответствующей рабочей группой концерна

Некоторые факты о XML XML = eXtensible Markup Language Разработан соответствующей рабочей
W3C в 1996 г., стандартизован в 1998 г.
Очень простое описание - около 30 стр.
Современная версия XML - 1.0

Слайд 3

Предыстория XML: SGML

1980-е - SGML (Standard Generalized Markup Language)
разработан для МО США;

Предыстория XML: SGML 1980-е - SGML (Standard Generalized Markup Language) разработан для
задача - снизить расходы на передачу документации
четкая иерархическая структурированность информации;
расширяемость стандарта
отделение информации от представления (использование DTD - Document Type Definition)
слишком сложен для реализации в Web (Sounds Good, Maybe Later)

Слайд 4

Предыстория XML: HTML

1991 - HTML (HyperText Markup Language)
фиксированное подмножество SGML, ориентированное на

Предыстория XML: HTML 1991 - HTML (HyperText Markup Language) фиксированное подмножество SGML,
Web-страницы
чрезвычайно распространен - существует около 100 млрд. HTML-страниц!
трудности форматирования текста и невозможность отделить представление от данных (CSS решает эту проблему только частично)
недостаточная строгость стандарта и, как следствие, проблема структурирования текста

Слайд 5

Зачем нам еще один стандарт?

Затем, что необходимо компактное, дешевое, простое и быстрое

Зачем нам еще один стандарт? Затем, что необходимо компактное, дешевое, простое и
средство, аналогичное HTML, которое могло бы еще и расширяться, как SGML.
Еще было бы здорово иметь единый формат для передачи данных между приложениями
Еще хотелось бы создавать структурированные тексты с возможностью создания оглавлений, перекрестных ссылок и т.д.
Еще нам нужно уметь отображать нестандартную информацию (математические формулы, ноты и т.п.)

Слайд 6

Десять целей XML

XML должен быть ориентирован на использование в Интернет
XML должен быть

Десять целей XML XML должен быть ориентирован на использование в Интернет XML
пригоден для использования в большом количестве приложений
XML должен быть совместим с SGML
Создание программ, обрабатывающих XML, должно быть простым
Число необязательных возможностей языка должно быть сведено к минимуму (в идеале - к нулю)

Слайд 7

Десять целей XML (окончание)

Документы XML должны быть достаточно просты и понятны человеку
XML

Десять целей XML (окончание) Документы XML должны быть достаточно просты и понятны
следует разработать в короткие сроки
Спецификация XML должна быть четкой и краткой
Создание XML-документов должно быть максимально простым
Краткость команд разметки XML не имеет принципиального значения

Слайд 8

Мифы об XML

XML - это язык разметки (на самом деле - это

Мифы об XML XML - это язык разметки (на самом деле -
метаязык для создания языков разметки)
XML - это только для Web (на самом деле, многие компании переходят на него с SGML)
XML - это подмножество SGML (раньше был, но теперь ввели схемы, пространства имен и т.д.)
HTML - это подмножество XML (такое описание в принципе возможно, но бессмысленно; кроме того, есть вопрос следования стандарту HTML)
XML - это еще один рекламный трюк (увы, нет)

Слайд 9

Основы синтаксиса XML

У каждого элемента должен быть открывающий и закрывающий тэг
В документе

Основы синтаксиса XML У каждого элемента должен быть открывающий и закрывающий тэг
должен быть ровно один корневой элемент
Элементы могут быть вложены друг в друга, но не могут пересекаться (т.е. деревянная структура)
Все названия элементов чувствительны к регистру
Некоторые символы запрещены (надо использовать специальные последовательности)
Значения атрибутов должны быть взяты в кавычки

Слайд 10

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



Outside of a dog, a book is

Пример XML-документа Outside of a dog, a book is man's best friend.
man's best friend.
Inside of a dog, it's too
dark to read.


Слайд 11

Заголовок XML

Необязательный, предназначен для синтаксического анализатора; должен идти с самого начала файла

Заголовок XML Необязательный, предназначен для синтаксического анализатора; должен идти с самого начала
version="1.0"?>
Может указывать кодировку файла (по умолчанию UTF-8 или UTF-16 (в отличие от HTML):

Может указывать атрибут "самодостаточности":

Заголовок чувствителен к регистру символов!

Слайд 12

Структура тэгов XML

Должен быть открывающий и закрывающий тэг:
1.5
Здесь duration - это

Структура тэгов XML Должен быть открывающий и закрывающий тэг: 1.5 Здесь duration
название тэга, course – это
атрибут, а 1.5 – значение (содержимое элемента)
Должны соблюдаться правила вложенности:

Права одного человека важнее
прав коллектива - неправильно!!!
Вместо этого правильно так:

Права одного человека
важнее прав коллектива

Слайд 13

Корневой тэг

Следующий пример некорректен:

...
...
Вместо этого должно

Корневой тэг Следующий пример некорректен: ... ... Вместо этого должно быть: ... ...
быть:

...
...

Слайд 14

Особые символы XML

Некоторые символы необходимо заменять на подстановочные строки:

Было предложено соотношение A

Особые символы XML Некоторые символы необходимо заменять на подстановочные строки: Было предложено
но оно не
подошло.


Должно быть:

Было предложено соотношение A<B, но оно
не подошло.


Пять подстановочных строк:
< > & ' "
< > & ' "

Слайд 15

Атрибуты

Содержат уточняющую информацию об элементе

Все значения атрибутов должны быть в одинарных

Атрибуты Содержат уточняющую информацию об элементе Все значения атрибутов должны быть в
или двойных кавычках! (в отличие от HTML)
Где хранить данные - в атрибутах или в значениях?
Атрибуты - это свойства объекта (подобен прилагательному по отношению к существительному)
Атрибуты эффективнее (5 байт против 7 байт)
Атрибуты не могут иметь вложенные структуры, а элемент может
Если не можете решить, включайте данные в элемент

Слайд 16

Пустые элементы и комментарии

Иногда хочется создать элемент без содержания (например, горизонтальная линия

Пустые элементы и комментарии Иногда хочется создать элемент без содержания (например, горизонтальная
в HTML,
)
Нужен закрывающий символ
Упрощение синтаксиса:


Комментарии:

Слайд 17

Корректно сформированные документы

Документы, удовлетворяющие описанным выше правилам, называются корректно сформированными (well-formed) документами

Корректно сформированные документы Документы, удовлетворяющие описанным выше правилам, называются корректно сформированными (well-formed)
type="printer">
/usr/lpr
/usr/drivers/HP5SIPS
sheet feeder



Слайд 18

Совместная обработка XML-файлов



A duck walks into a bar and says

Совместная обработка XML-файлов A duck walks into a bar and says to
to the bartender, "Gimme a shot of whisky and put it on my bill."



A duck walks into a bar and asks for the whisky and a cucumber. Then it drinks whisky, eats his cucumber and leaves.
Then a cowboy sitting in the bar says to another cowboy: "For the first time in my life I saw someone finishing whiskey with a cucumber."

Слайд 19

Проблема обработки XML-документов

И первый, и второй примеры являются корректно сформированными XML-документами.
Но

Проблема обработки XML-документов И первый, и второй примеры являются корректно сформированными XML-документами.
можно ли создать программу, которая записывала бы эти и другие анекдоты в базу данных? По крайней мере, это будет сложно...
Однако можно было бы разослать всем авторам некоторую заранее предопределенную структуру ожидаемого документа
Такая структура для XML называется схемой документа. Стандартом на сегодня является DTD

Слайд 20

Определение типа документа (DTD)

"Документ называется действительным, если он имеет связанное с ним

Определение типа документа (DTD) "Документ называется действительным, если он имеет связанное с
определение типа документа (схему) и соответствует ему"
В XML 1.0 единственным типом схем является DTD – Document Type Definition
DTD основано на упрощенном формате SGML и было создано для нужд EDI (Electronic Data Interchange)
Синтаксис DTD существенно отличается от XML

Слайд 21

Пример DTD


firstTold CDATA

Пример DTD firstTold CDATA #IMPLIED > Outside of a dog, a book
#IMPLIED >





Outside of a dog, a book is man's
best friend

Inside of a dog, it's too dark
to read.


Слайд 22

Проблемы DTD

DTD - строго иерархический формат, плохо подходящий для меняющихся документов
У документа

Проблемы DTD DTD - строго иерархический формат, плохо подходящий для меняющихся документов
может быть только один тип, что не очень удобно для коммерческих приложений (пример с разными форматами адреса)
Синтаксис DTD не похож на XML и плохо воспринимается человеком
В DTD допустимо использование только текстового типа данных (нет числового типа или даты)

Слайд 23

Предлагаемое решение: XML-схемы

Схемы должны следовать синтаксису XML
Стандарт схемы должен поддерживать распространенные типы

Предлагаемое решение: XML-схемы Схемы должны следовать синтаксису XML Стандарт схемы должен поддерживать
данных (число, дата…)
Схема XML должна быть открытой для подключения внешних источников
Метод разрешения неоднозначности имен при соединении двух файлов - пространства имен:


Mr.Pupkin

Слайд 24

Document Object Model

Объектная модель документа открывает доступ к XML-документу как к древовидной

Document Object Model Объектная модель документа открывает доступ к XML-документу как к
структуре в памяти
Позволяет работать с XML-документом как с обычным объектом в любом современном языке программирования
Перед началом работы DOM требует загрузки всего документа в память (поэтому разрабатываются и альтернативные стандарты, например, SAX)
Стандарт оставляет разработчикам большую свободу в интерпретации
Microsoft предлагает MS XML DOM 3.0, интегрированную в IE 5, MS Office 2000 и MS Windows 2000

Слайд 25

XLink & XPointer

Иногда возникает ситуация, когда объект связан с другим объектом, но

XLink & XPointer Иногда возникает ситуация, когда объект связан с другим объектом,
эта связь не является иерархической
XLink позволяет создавать в XML-документе ссылки и задавать семантику его обработки (кроме того, поддерживает встроенные ссылки)
XPointer позволяет ссылаться на фрагменты документов с гораздо большей степенью детализации, чем была доступна в HTML

Слайд 26

XSL и XSLT

XSL позволяет описывать внешний вид (форматирование) XML-документа
Реально XSL состоит из

XSL и XSLT XSL позволяет описывать внешний вид (форматирование) XML-документа Реально XSL
двух документов: первый относится к преобразованию документов XML, а второй – к интерпретации форматирования
Язык преобразования описан в стандарте XSLT (XSL Transformations)

Слайд 27

Разработка отраслевых схем

Разрабатываются промышленными группами (автомобилестроение, химические и математические формулы и т.д.)
Самая

Разработка отраслевых схем Разрабатываются промышленными группами (автомобилестроение, химические и математические формулы и
первая попытка создания такой отраслевой схемы – в 80-х гг. Air Transport Association (еще на SGML)
Самый популярный пример сегодня – стандарт записи математических формул (MathML)

Слайд 28

XML-компоненты в .NET

XmlReader & XmlWriter
Могут читать/писать корректно сформированный XML
XmlDocument
На базе модели W3C

XML-компоненты в .NET XmlReader & XmlWriter Могут читать/писать корректно сформированный XML XmlDocument
DOM с поддержкой XPath SelectNodes() и SelectSingleNode()
XPathNavigator
Предоставляет модель XPath поверх любых данных
XPathDocument (XML-данные, оптимизированные для X/Path)
XSLTransform
Предоставляет трансформации над XPath
XSD Compliance
XmlSchema - Object Model (SOM)
XmlValidatingReader

Слайд 29

XmlReader и XmlWriter

XmlReader и XmlWriter

Слайд 30

Описание XmlReader и XmlWriter

XmlReader
Основан на модели Pull; основная схема применения:
While (reader.Read())
{

Описание XmlReader и XmlWriter XmlReader Основан на модели Pull; основная схема применения:
/* обработка полученных узлов */}
Предоставляет последовательный (forward-only) курсор над любыми XML-данными
Реализован в XmlTextReader, XmlNodeReader
XmlWriter
Генерирует валидный XML
Помогает обрабатывать пространства имен
Реализован в XmlTextWriter

Слайд 31

Пример использования XmlTextReader

XmlTextReader xr = new XmlTextReader("MyFile.Xml");
while (xr.Read()) {
switch (xr.NodeType) {
case XmlNodeType.Document:
Console.Write("

Пример использования XmlTextReader XmlTextReader xr = new XmlTextReader("MyFile.Xml"); while (xr.Read()) { switch
version='1.0'?>");
break;
case XmlNodeType.Element:
Console.Write("<" + xr.Name+">");
break;
case XmlNodeType.SignificantWhitespace:
case XmlNodeType.Text:
Console.Write(xr.Value);
break;
case XmlNodeType.Comment:
Console.Write("");
break;
case XmlNodeType.ProcessingInstruction:
Console.Write("");
break;
case XmlNodeType.EndElement:
Console.Writeline("");
}
}

Слайд 32

Пример использования XmlWriter

public void WriteDocument(XmlWriter writer) {
writer.WriteStartDocument();
writer.WriteComment(“sample person document");
writer.WriteProcessingInstruction("hack",

Пример использования XmlWriter public void WriteDocument(XmlWriter writer) { writer.WriteStartDocument(); writer.WriteComment(“sample person document");
"on person");
writer.WriteStartElement("p", "person", "urn:person");
writer.WriteStartElement("name", "");
writer.WriteString("joebob");
writer.WriteEndElement();
writer.WriteElementInt16("age", "", 28);
writer.WriteEndElement();
writer.WriteEndDocument();
}





joebob
28

Слайд 33

Архитектура XmlDocument

Архитектура XmlDocument

Слайд 34

XmlDocument

Поддерживает рекомендации W3C DOM Core Level 1 и Core Level 2 (пространства

XmlDocument Поддерживает рекомендации W3C DOM Core Level 1 и Core Level 2
имен)
Предоставляет API для редактирования XML
MS-расширения – Load(), Save() и обработка событий
Свойство InnerXml (аналог innerHTML)
node.InnerXml = "John
john@microsoft.com
"

Слайд 35

Пример использования XmlDocument
using System; using System.Xml;
public class GenerateDocument {
public static void

Пример использования XmlDocument using System; using System.Xml; public class GenerateDocument { public
Main(String[] args) {
// instantiate the document
XmlDocument doc = new XmlDocument(); XmlNode node;
// create a comment/pi and append
node = doc.CreateComment("sample person document");
doc.AppendChild(node);
node = doc.CreateProcessingInstruction("hack", "on person");
doc.AppendChild(node);
// create the person element within the 'urn:person' namespace
node = doc.CreateElement("p", "person", "urn:person");
doc.AppendChild(node); node = doc.CreateElement("name");
node.InnerText = "joebob"; doc.DocumentElement.AppendChild(node);
node = doc.CreateElement("age"); node.InnerText = "28";
doc.DocumentElement.AppendChild(node);
// serialize the document to the console
XmlTextWriter tw = new XmlTextWriter(Console.Out);
tw.Formatting = Formatting.Indented; doc.Save(tw); } }

Слайд 36

Архитектура XPath

XML Stores

XmlDocument

XmlDataDocument

XPathDocument

DOM

DOM <-> DataSet

Fast XPath

Архитектура XPath XML Stores XmlDocument XmlDataDocument XPathDocument DOM DOM DataSet Fast XPath

Слайд 37

XPathNavigator

Предоставляет возможность использования модели XPath над любым типом данных
Доступ к данным XML

XPathNavigator Предоставляет возможность использования модели XPath над любым типом данных Доступ к
в стиле обычного курсора
Предоставляет функциональность XPath:
void Select (String xpath);
Object Evaluate (String xpath);
XPathNodeIterator – итератор для прохождения всех выбранных узлов

Слайд 38

Пример использования XPath

// Создаем XPathDocument
XPathDocument myXPathDoc = new XPathDocument("books.xml");
// Получаем XPathNavigator
XPathNavigator myNav

Пример использования XPath // Создаем XPathDocument XPathDocument myXPathDoc = new XPathDocument("books.xml"); //
=
((IXPathNavigable)myXPathDoc).CreateNavigator();
// Печатаем цену каждой книги (полный обход дерева)
XPathNodeIterator iter = myNav.Select("descendant::book/price");
while(iter.MoveNext())
Console.WriteLine(iter.Current.Value);
// Печатаем общую сумму цен всех книг (без обхода дерева)
Console.WriteLine ("Total Price: {0} ",
myNav.Evaluate ("sum(descendant::book/price)"));

Слайд 39

Архитектура XslTransform

XML Stores

XPathNavgator

XmlDocument

XmlDataDocument

XPathDocument

DOM

DOM <-> DataSet

Fast XPath

Архитектура XslTransform XML Stores XPathNavgator XmlDocument XmlDataDocument XPathDocument DOM DOM DataSet Fast XPath

Слайд 40

Использование XslTransform

XPathDocument дает нам оптимизированный формат для чтения данных с использованием

Использование XslTransform XPathDocument дает нам оптимизированный формат для чтения данных с использованием
XPath and XSL/T:
XPathDocument doc = new XPathDocument(“XmlDoc.xml”);
XslTransform t = new XslTransform();
t.Load( Stylesheet );
XmlTextWriter writer = new XmlTextWriter (Console.Out);
writer.Formatting = Formatting.Indented;
writer.Indentation=2;
t.Transform (doc, null, writer );
XSLT может быть выполнено над Dataset'ами, хранящими XmlDataDocument