1. Темы лекции: Работа с XML.
Практическое задание: Работа с XML.
Тренер: Игорь Шкулипа, к.т.н.
Платформа .Net и язык программирования C#.
Занятие 9
2. http://www.slideshare.net/IgorShkulipa 2
XML
XML (eXtensible Markup Language, или расширяемый язык разметки) — это
язык описания документов, во многом похожий на язык разметки
гипертекста HTML, но гораздо более универсальный, чем HTML.
XML — текстовый формат, предназначенный для хранения
структурированных данных (взамен существующих файлов баз
данных), для обмена информацией между программами, а также для
создания на его основе более специализированных языков разметки
(например, XHTML), иногда называемых словарями.
Пример:
<?xml version="1.0"?>
<list_of_items>
<item id="1">
<first/>Первый</item>
<item id="2">Второй
<sub_item>подпункт 1</sub_item>
</item>
<last/>Последний</item>
</list_of_items>
3. http://www.slideshare.net/IgorShkulipa 3
Формат XML-файла
Первая строка XML документа называется объявлением XML (declaration) это
необязательная строка, указывающая версию стандарта XML. Здесь может быть
указана кодировка символов и внешние зависимости.:
<?xml version="1.0" encoding=“windows-1251"?>
Далее идут элементы документа, разделенные открывающими и закрывающими
тэгами. Каждый элемент имеет имя, которым начинается открывающий тэг
элемента и заканчивается закрывающий.
Содержимым элемента (content), называется всё, что расположено между
открывающим и закрывающим тегами. Все значения атрибутов должны быть в
одинарных или двойных кавычках. Каждый XML документ обязательно содержит
один корневой элемент (report) и сколько угодно вложенных элементов (place,
measurement). Любой вложенный элемент также может иметь свои вложенные
элементы.
Комментарии вводятся конструкцией:
<!-- Текст комментария -->
Текстовые данные в XML называются сущностью (entity). Текст может содержать
спецсимволы (некоторые символы запрещены) ссылки на сущность (entity
references). Кодировка спецсимволов в XML аналогична HTML:
& &
< <
> >
' '
" "
пробел.
4. http://www.slideshare.net/IgorShkulipa 4
В 1980-е годы был разработан - SGML (Standard Generalized Markup
Language)
◦ разработан для МО США; задача - снизить расходы на передачу
документации
◦ четкая иерархическая структурированность информации;
◦ расширяемость стандарта
◦ отделение информации от представления (использование DTD -
Document Type Definition)
◦ слишком сложен для реализации в Web (Sounds Good, Maybe Later)
Предыстория XML: SGML
5. http://www.slideshare.net/IgorShkulipa 5
• Документ называется действительным, если он имеет связанное с
ним определение типа документа (схему) и соответствует ему
• В XML 1.0 единственным типом схем является DTD – Document Type
Definition
• DTD основано на упрощенном формате SGML и было создано для
нужд EDI (Electronic Data Interchange)
• Синтаксис DTD существенно отличается от XML
Определение типа документа (DTD)
<!ELEMENT Joke (Setup, Punchline) >
<!ATTLIST Joke author CDATA #REQUIRED
firstTold CDATA #IMPLIED >
<!ELEMENT Setup (#PCDATA) >
<!ELEMENT Punchline (#PCDATA) >
<?xml version="1.0"?>
<!DOCTYPE Joke SYSTEM "Joke.dtd">
<Joke author="Groucho Marx">
<Setup>Outside of a dog, a book is man's
best friend</Setup>
<Punchline>Inside of a dog, it's too dark
to read.</Punchline>
</Joke>
6. http://www.slideshare.net/IgorShkulipa 6
Проблемы DTD
● DTD - строго иерархический формат, плохо подходящий для
меняющихся документов
● У документа может быть только один тип, что не очень удобно для
коммерческих приложений
● Синтаксис DTD не похож на XML и плохо воспринимается человеком
● В DTD допустимо использование только текстового типа данных (нет
числового типа или даты)
7. http://www.slideshare.net/IgorShkulipa 7
XML-схемы
● Схемы должны следовать синтаксису XML
● Стандарт схемы должен поддерживать распространенные типы данных
(число, дата…)
● Схема XML должна быть открытой для подключения внешних источников
● Метод разрешения неоднозначности имен при соединении двух файлов -
пространства имен.
8. http://www.slideshare.net/IgorShkulipa 8
XML Schema
XML Schema – промышленный стандарт описания XML-документов
XML Schema делает следующее:
• Описывает названия элементов и атрибутов (словарь).
• Описывает взаимосвязь между элементами и атрибутами, а также
их структуру (модель содержания).
• Описывает типы данных.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="книга" type="Книга" />
<xs:complexType name="Книга">
<xs:sequence>
<xs:element name="название" type="xs:string" />
<xs:element name="цена" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
</xs:schema>
9. http://www.slideshare.net/IgorShkulipa 9
Document Object Model
• Объектная модель документа открывает доступ к XML-документу как к
древовидной структуре в памяти
• Позволяет работать с XML-документом как с обычным объектом в
любом современном языке программирования
• Перед началом работы DOM требует загрузки всего документа в
память (поэтому разрабатываются и альтернативные стандарты)
• Стандарт оставляет разработчикам большую свободу в интерпретации
• Microsoft предлагает MS XML DOM 3.0, интегрированную в продукты
Microsoft
XPath
XPath (XML Path Language) — язык запросов к элементам XML-документа.
Разработан для организации доступа к частям документа XML в файлах
трансформации XSLT и является стандартом консорциума W3C. XPath
призван реализовать навигацию по DOM в XML
10. http://www.slideshare.net/IgorShkulipa 10
XSLT
XSLT (eXtensible Stylesheet Language Transformations) — язык
преобразования XML-документов. Спецификация XSLT входит в состав
XSL и является рекомендацией W3C.
При применении таблицы стилей XSLT, состоящей из набора шаблонов, к
XML-документу (исходное дерево) образуется конечное дерево, которое
может быть сериализовано в виде XML-документа, XHTML-документа,
HTML-документа или простого текстового файла.
XSLT имеет множество различных применений, в основном в области web-
программирования и генерации отчётов. Одной из задач, решаемых
языком XSLT, является отделение данных от их представления, как часть
общей парадигмы MVC.
XQuery
XQuery — язык запросов, разработанный для обработки данных в
формате XML. XQuery использует XML как свою модель данных.
11. http://www.slideshare.net/IgorShkulipa 11
Достоинства XML
• XML — язык разметки, позволяющий отобразить двоичные данные в текст,
читаемый человеком и анализируемый компьютером;
• XML поддерживает Юникод;
• в формате XML могут быть описаны такие структуры данных как записи, списки и
деревья;
• XML — это самодокументируемый формат, который описывает структуру и имена
полей так же как и значения полей;
• XML имеет строго определённый синтаксис и требования к анализу, что
позволяет ему оставаться простым, эффективным и непротиворечивым.
Одновременно с этим, разные разработчики не ограничены в выборе
экспрессивных методов (например, можно моделировать данные, помещая
значения в параметры тегов или в тело тегов, можно использовать различные
языки и нотации для именования тегов и т. д.);
• XML — формат, основанный на международных стандартах;
• Иерархическая структура XML подходит для описания практически любых типов
документов, кроме аудио и видео мультимедийных потоков, растровых
изображений, сетевых структур данных и двоичных данных;
• XML представляет собой простой текст, свободный от лицензирования и каких-
либо ограничений;
• XML не зависит от платформы;
12. http://www.slideshare.net/IgorShkulipa 12
Достоинства XML
• XML является подмножеством SGML (который используется с 1986 года). Уже
накоплен большой опыт работы с языком и созданы специализированные
приложения;
• XML не накладывает требований на расположение символов в строке;
• В отличие от бинарных форматов, XML содержит метаданные об именах, типах и
классах описываемых объектов, по которым приложение может обработать
документ неизвестной структуры (например, для динамического построения
интерфейсов);
• XML имеет реализации парсеров для всех современных языков
программирования;
• XML поддерживается на низком аппаратном, микропрограммном и программном
уровнях в современных аппаратных решениях.
13. http://www.slideshare.net/IgorShkulipa 13
Недостатки XML
• Синтаксис XML избыточен.
• Размер XML-документа существенно больше бинарного представления тех же
данных. В грубых оценках величину этого фактора принимают за 1 порядок (в
10 раз).
• Размер XML-документа существенно больше, чем документа в альтернативных
текстовых форматах передачи данных (например JSON, YAML) и особенно в
форматах данных, оптимизированных для конкретного случая использования.
• Избыточность XML может повлиять на эффективность приложения. Возрастает
стоимость хранения, обработки и передачи данных.
• XML содержит метаданные (об именах полей, классов, вложенности структур), и
одновременно XML позиционируется как язык взаимодействия открытых систем.
При передаче между системами большого количества объектов одного типа
(одной структуры), передавать метаданные повторно нет смысла, хотя они
содержатся в каждом экземпляре XML описания.
• Для большого количества задач не нужна вся мощь синтаксиса XML и можно
использовать значительно более простые и производительные решения.
• Неоднозначность моделирования.
• Нет общепринятой методологии для моделирования данных в XML, в то время
как для реляционной модели и объектно-ориентированной такие средства
разработаны и базируются на реляционной алгебре, системном подходе и
системном анализе.
14. http://www.slideshare.net/IgorShkulipa 14
Недостатки XML
• В природе есть множество объектов и явлений, для описания которых разные структуры
данных (сетевая, реляционная, иерархическая) являются естественными, и отображение
объекта в неестественную для него модель является болезненным для его сути. В случае с
реляционной и иерархической моделями определены процедуры декомпозиции,
обеспечивающие относительную однозначность, чего нельзя сказать о сетевой модели.
• В результате большой гибкости языка и отсутствия строгих ограничений, одна и та же
структура может быть представлена множеством способов (различными разработчиками),
например, значение может быть записано как атрибут тега или как тело тега и т. д. Например:
<a b="1" c="1"/> или <a b="1" c="1"></a> или <a><b>1</b><c>1</c></a> или <a><c
value="1"/></a> или <a><fields b="1" c="1"/></a> и т. д.
• Поддержка многих языков в именовании тегов дает возможность назвать, например вес
русским словом, в таком случае компьютер никак не сможет установить соответствия этого
поля с полем weight в англоязычной версии программы и с полями в версиях модели объекта
на множестве других языков.
• XML не содержит встроенной в язык поддержки типов данных. В нём нет строгой типизации, то
есть понятий «целых чисел», «строк», «дат», «булевых значений» и т. д.
• Иерархическая модель данных, предлагаемая XML, ограничена по сравнению с реляционной
моделью и объектно-ориентированными графами и сетевой моделью данных.
• Выражение неиерархических данных (например графов) требует дополнительных усилий.
• Кристофер Дейт, специалист в области реляционных баз данных, автор классического
учебника «An Introduction to Database Systems», отмечал, что «…XML является попыткой
заново изобрести иерархические базы данных…» (в 1980-е года иерархические базы данных
были вытеснены реляционными базами данных).
• Пространства имён XML сложно использовать и их сложно реализовывать в XML-парсерах.
• Существуют другие, обладающие сходными с XML возможностями, текстовые форматы данных,
которые обладают более высоким удобством чтения человеком (YAML, JSON, SweetXML, XF).
15. http://www.slideshare.net/IgorShkulipa 15
XML-компоненты в .NET
● XmlReader & XmlWriter
◦ Прездназначены для чтения-записи корректно сформированного
XML
● XmlDocument
◦ На базе модели W3C DOM с поддержкой XPath SelectNodes() и
SelectSingleNode()
● XPathNavigator
◦ Предоставляет модель XPath поверх любых данных
◦ XPathDocument (XML-данные, оптимизированные для X/Path)
● XSLTransform
◦ Предоставляет трансформации над Xpath
● XSD Compliance
◦ XmlSchema - Object Model (SOM)
◦ XmlValidatingReader
22. Пример XmlDocument. Класс формы
using System.Xml;
namespace XMLExample
{
public partial class Form1 : Form
{
private XmlDocument _xmlDoc;
public Form1()
{
InitializeComponent();
_xmlDoc = new XmlDocument();
}
23. Пример XmlDocument. Загрузка XML
private void button1_Click(object sender, EventArgs e)
{
_xmlDoc.Load("books.xml");
XmlNodeList nodes = _xmlDoc.GetElementsByTagName("book");
treeView1.Nodes.Clear();
foreach(XmlNode node in nodes)
{
treeView1.Nodes.Add(node.Attributes["id"].Value);
foreach (XmlNode n in node.ChildNodes)
{
treeView1.Nodes[treeView1.Nodes.Count - 1]
.Nodes.Add(n.InnerText);
}
}
treeView1.ExpandAll();
}
28. http://www.slideshare.net/IgorShkulipa 28
Лабороторная работа №9. Windows Forms + XML
Создать приложение для синхронизации файлов в разных директориях
(например, директория на жестком диске и на флеш-накопителе).
Реализовать функции (с одной и другой стороны):
• Файл изменен
• Файл удален
• Файл создан
Интерфейс приложения создать на основе архитектурного шаблона MVP с
использованием Windows Forms.
Реализовать ведение логов в виде XML. Проводить анализ необходимости
синхронизации, учитывая предыдущие изменения, записанные в XML-
логе.