c# desktop. Занятие 09

28
Темы лекции: Работа с XML. Практическое задание: Работа с XML. Тренер: Игорь Шкулипа, к.т.н. Платформа .Net и язык программирования C#. Занятие 9

Upload: igor-shkulipa

Post on 12-Apr-2017

56 views

Category:

Education


1 download

TRANSCRIPT

Темы лекции: Работа с 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). Текст может содержатьспецсимволы (некоторые символы запрещены) ссылки на сущность (entityreferences). Кодировка спецсимволов в 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><cvalue="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-логе.