Темы лекции: Работа с XML.
Практическое задание: Работа с XML.
Тренер: Игорь Шкулипа, к.т.н.
Платформа .Net и язык программирования C#.
Занятие 9
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>
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:
&amp; &
&lt <
&gt; >
&apos; '
&quot; "
&nbsp; пробел.
http://www.slideshare.net/IgorShkulipa 4
В 1980-е годы был разработан - SGML (Standard Generalized Markup
Language)
◦ разработан для МО США; задача - снизить расходы на передачу
документации
◦ четкая иерархическая структурированность информации;
◦ расширяемость стандарта
◦ отделение информации от представления (использование DTD -
Document Type Definition)
◦ слишком сложен для реализации в Web (Sounds Good, Maybe Later)
Предыстория XML: SGML
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>
http://www.slideshare.net/IgorShkulipa 6
Проблемы DTD
● DTD - строго иерархический формат, плохо подходящий для
меняющихся документов
● У документа может быть только один тип, что не очень удобно для
коммерческих приложений
● Синтаксис DTD не похож на XML и плохо воспринимается человеком
● В DTD допустимо использование только текстового типа данных (нет
числового типа или даты)
http://www.slideshare.net/IgorShkulipa 7
XML-схемы
● Схемы должны следовать синтаксису XML
● Стандарт схемы должен поддерживать распространенные типы данных
(число, дата…)
● Схема XML должна быть открытой для подключения внешних источников
● Метод разрешения неоднозначности имен при соединении двух файлов -
пространства имен.
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>
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
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 как свою модель данных.
http://www.slideshare.net/IgorShkulipa 11
Достоинства XML
• XML — язык разметки, позволяющий отобразить двоичные данные в текст,
читаемый человеком и анализируемый компьютером;
• XML поддерживает Юникод;
• в формате XML могут быть описаны такие структуры данных как записи, списки и
деревья;
• XML — это самодокументируемый формат, который описывает структуру и имена
полей так же как и значения полей;
• XML имеет строго определённый синтаксис и требования к анализу, что
позволяет ему оставаться простым, эффективным и непротиворечивым.
Одновременно с этим, разные разработчики не ограничены в выборе
экспрессивных методов (например, можно моделировать данные, помещая
значения в параметры тегов или в тело тегов, можно использовать различные
языки и нотации для именования тегов и т. д.);
• XML — формат, основанный на международных стандартах;
• Иерархическая структура XML подходит для описания практически любых типов
документов, кроме аудио и видео мультимедийных потоков, растровых
изображений, сетевых структур данных и двоичных данных;
• XML представляет собой простой текст, свободный от лицензирования и каких-
либо ограничений;
• XML не зависит от платформы;
http://www.slideshare.net/IgorShkulipa 12
Достоинства XML
• XML является подмножеством SGML (который используется с 1986 года). Уже
накоплен большой опыт работы с языком и созданы специализированные
приложения;
• XML не накладывает требований на расположение символов в строке;
• В отличие от бинарных форматов, XML содержит метаданные об именах, типах и
классах описываемых объектов, по которым приложение может обработать
документ неизвестной структуры (например, для динамического построения
интерфейсов);
• XML имеет реализации парсеров для всех современных языков
программирования;
• XML поддерживается на низком аппаратном, микропрограммном и программном
уровнях в современных аппаратных решениях.
http://www.slideshare.net/IgorShkulipa 13
Недостатки XML
• Синтаксис XML избыточен.
• Размер XML-документа существенно больше бинарного представления тех же
данных. В грубых оценках величину этого фактора принимают за 1 порядок (в
10 раз).
• Размер XML-документа существенно больше, чем документа в альтернативных
текстовых форматах передачи данных (например JSON, YAML) и особенно в
форматах данных, оптимизированных для конкретного случая использования.
• Избыточность XML может повлиять на эффективность приложения. Возрастает
стоимость хранения, обработки и передачи данных.
• XML содержит метаданные (об именах полей, классов, вложенности структур), и
одновременно XML позиционируется как язык взаимодействия открытых систем.
При передаче между системами большого количества объектов одного типа
(одной структуры), передавать метаданные повторно нет смысла, хотя они
содержатся в каждом экземпляре XML описания.
• Для большого количества задач не нужна вся мощь синтаксиса XML и можно
использовать значительно более простые и производительные решения.
• Неоднозначность моделирования.
• Нет общепринятой методологии для моделирования данных в XML, в то время
как для реляционной модели и объектно-ориентированной такие средства
разработаны и базируются на реляционной алгебре, системном подходе и
системном анализе.
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).
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
XmlReader и XmlWriter
XmlTextWriter
XmlReader XmlWriterAbstract Abstract
XmlNodeReaderXmlTextReader
http://www.slideshare.net/IgorShkulipa 17
XmlReader и XmlWriter
● XmlReader
◦ Основная схема применения:
⚫ While (reader.Read())
{ /* обработка полученных узлов */}
◦ Предоставляет последовательный (forward-only) курсор над
любыми XML-данными
◦ Реализован в XmlTextReader, XmlNodeReader
● XmlWriter
◦ Генерирует валидный XML
◦ Помогает обрабатывать пространства имен
◦ Реализован в XmlTextWriter
Пример использования XmlTextReader
XmlTextReader xr = new XmlTextReader("MyFile.Xml");
while (xr.Read()) {
switch (xr.NodeType) {
case XmlNodeType.Document:
Console.Write("<?xml 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("<!--" + xr.Value + "-->");
break;
case XmlNodeType.ProcessingInstruction:
Console.Write("<?" + xr.Name + " " + xr.Value + "?>");
break;
case XmlNodeType.EndElement:
Console.Writeline("</" + xr.Name + ">");
}
}
Пример использования XmlWriter
public void WriteDocument(XmlWriter writer) {
writer.WriteStartDocument();
writer.WriteComment(“sample person document");
writer.WriteProcessingInstruction("hack", "on person");
writer.WriteStartElement("p", "person", "urn:person");
writer.WriteStartElement("name", "");
writer.WriteString("joebob");
writer.WriteEndElement();
writer.WriteElementInt16("age", "", 28);
writer.WriteEndElement();
writer.WriteEndDocument();
} <?xml version="1.0"?>
<!--sample person document-->
<?hack on person?>
<p:person xmlns:p="urn:person">
<name>joebob</name>
<age unit="year">28</age>
</p:person>
http://www.slideshare.net/IgorShkulipa 20
XmlDocument
Представляет XML-документ.
public class XmlDocument : XmlNode
● Предоставляет API для редактирования XML
● Расширения – Load(), Save() и обработка событий
● Свойство InnerXml (аналог innerHTML) предоставляет доступ к
внутреннему документу в древовидной структуре.
Пример XmlDocument
Пример XmlDocument. Класс формы
using System.Xml;
namespace XMLExample
{
public partial class Form1 : Form
{
private XmlDocument _xmlDoc;
public Form1()
{
InitializeComponent();
_xmlDoc = new XmlDocument();
}
Пример 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();
}
Пример XmlDocument. Сохранение XML
private void button3_Click(object sender, EventArgs e)
{
XmlElement newElement = _xmlDoc.CreateElement("book");
newElement.SetAttribute("id", "33333");
XmlElement elemName = _xmlDoc.CreateElement("name");
elemName.InnerText = "Kobzar";
XmlElement elemAuthor = _xmlDoc.CreateElement("author");
elemAuthor.InnerText = "Taras Shevchenko";
XmlElement elemPages = _xmlDoc.CreateElement("pages");
elemPages.InnerText = "500";
XmlElement elemYear = _xmlDoc.CreateElement("year");
elemYear.InnerText = "1840";
XmlElement elemLanguage = _xmlDoc.CreateElement("language");
elemLanguage.InnerText = "Ukrainian";
newElement.AppendChild(elemName);
newElement.AppendChild(elemAuthor);
newElement.AppendChild(elemPages);
newElement.AppendChild(elemYear);
newElement.AppendChild(elemLanguage);
_xmlDoc.DocumentElement.AppendChild(newElement);
_xmlDoc.Save("books.xml");
}
Пример XmlDocument. Файл XML
Пример XmlDocument. Результат
Пример XmlDocument. Результат
http://www.slideshare.net/IgorShkulipa 28
Лабороторная работа №9. Windows Forms + XML
Создать приложение для синхронизации файлов в разных директориях
(например, директория на жестком диске и на флеш-накопителе).
Реализовать функции (с одной и другой стороны):
• Файл изменен
• Файл удален
• Файл создан
Интерфейс приложения создать на основе архитектурного шаблона MVP с
использованием Windows Forms.
Реализовать ведение логов в виде XML. Проводить анализ необходимости
синхронизации, учитывая предыдущие изменения, записанные в XML-
логе.

C# Desktop. Занятие 09.

  • 1.
    Темы лекции: Работас XML. Практическое задание: Работа с XML. Тренер: Игорь Шкулипа, к.т.н. Платформа .Net и язык программирования C#. Занятие 9
  • 2.
    http://www.slideshare.net/IgorShkulipa 2 XML XML (eXtensibleMarkup 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: &amp; & &lt < &gt; > &apos; ' &quot; " &nbsp; пробел.
  • 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 XMLSchema – промышленный стандарт описания 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 ObjectModel • Объектная модель документа открывает доступ к 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 (eXtensibleStylesheet 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
  • 16.
    XmlReader и XmlWriter XmlTextWriter XmlReaderXmlWriterAbstract Abstract XmlNodeReaderXmlTextReader
  • 17.
    http://www.slideshare.net/IgorShkulipa 17 XmlReader иXmlWriter ● XmlReader ◦ Основная схема применения: ⚫ While (reader.Read()) { /* обработка полученных узлов */} ◦ Предоставляет последовательный (forward-only) курсор над любыми XML-данными ◦ Реализован в XmlTextReader, XmlNodeReader ● XmlWriter ◦ Генерирует валидный XML ◦ Помогает обрабатывать пространства имен ◦ Реализован в XmlTextWriter
  • 18.
    Пример использования XmlTextReader XmlTextReaderxr = new XmlTextReader("MyFile.Xml"); while (xr.Read()) { switch (xr.NodeType) { case XmlNodeType.Document: Console.Write("<?xml 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("<!--" + xr.Value + "-->"); break; case XmlNodeType.ProcessingInstruction: Console.Write("<?" + xr.Name + " " + xr.Value + "?>"); break; case XmlNodeType.EndElement: Console.Writeline("</" + xr.Name + ">"); } }
  • 19.
    Пример использования XmlWriter publicvoid WriteDocument(XmlWriter writer) { writer.WriteStartDocument(); writer.WriteComment(“sample person document"); writer.WriteProcessingInstruction("hack", "on person"); writer.WriteStartElement("p", "person", "urn:person"); writer.WriteStartElement("name", ""); writer.WriteString("joebob"); writer.WriteEndElement(); writer.WriteElementInt16("age", "", 28); writer.WriteEndElement(); writer.WriteEndDocument(); } <?xml version="1.0"?> <!--sample person document--> <?hack on person?> <p:person xmlns:p="urn:person"> <name>joebob</name> <age unit="year">28</age> </p:person>
  • 20.
    http://www.slideshare.net/IgorShkulipa 20 XmlDocument Представляет XML-документ. publicclass XmlDocument : XmlNode ● Предоставляет API для редактирования XML ● Расширения – Load(), Save() и обработка событий ● Свойство InnerXml (аналог innerHTML) предоставляет доступ к внутреннему документу в древовидной структуре.
  • 21.
  • 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(); }
  • 24.
    Пример XmlDocument. СохранениеXML private void button3_Click(object sender, EventArgs e) { XmlElement newElement = _xmlDoc.CreateElement("book"); newElement.SetAttribute("id", "33333"); XmlElement elemName = _xmlDoc.CreateElement("name"); elemName.InnerText = "Kobzar"; XmlElement elemAuthor = _xmlDoc.CreateElement("author"); elemAuthor.InnerText = "Taras Shevchenko"; XmlElement elemPages = _xmlDoc.CreateElement("pages"); elemPages.InnerText = "500"; XmlElement elemYear = _xmlDoc.CreateElement("year"); elemYear.InnerText = "1840"; XmlElement elemLanguage = _xmlDoc.CreateElement("language"); elemLanguage.InnerText = "Ukrainian"; newElement.AppendChild(elemName); newElement.AppendChild(elemAuthor); newElement.AppendChild(elemPages); newElement.AppendChild(elemYear); newElement.AppendChild(elemLanguage); _xmlDoc.DocumentElement.AppendChild(newElement); _xmlDoc.Save("books.xml"); }
  • 25.
  • 26.
  • 27.
  • 28.
    http://www.slideshare.net/IgorShkulipa 28 Лабороторная работа№9. Windows Forms + XML Создать приложение для синхронизации файлов в разных директориях (например, директория на жестком диске и на флеш-накопителе). Реализовать функции (с одной и другой стороны): • Файл изменен • Файл удален • Файл создан Интерфейс приложения создать на основе архитектурного шаблона MVP с использованием Windows Forms. Реализовать ведение логов в виде XML. Проводить анализ необходимости синхронизации, учитывая предыдущие изменения, записанные в XML- логе.