Лекция 7 XML и.NET –Краткое описание стандарта XML –Об использовании XML в.NET –Некоторые полезные классы из System.Xml.

Презентация:



Advertisements
Похожие презентации
Программный доступ к XML DOM, SAX,.NET среда, 11 декабря 2013 г.среда, 11 декабря 2013 г.среда, 11 декабря 2013 г.среда, 11 декабря 2013 г.среда, 11 декабря.
Advertisements

Язык запросов XML. XML (Extensible Markup Language) - это новый SGML-производный язык разметки документов, позволяющий структурировать информацию разного.
WEB- ТЕХНОЛОГИИ Лекция 4. Задача преобразования XML- данных 1 Задача преобразования Для передачи данных между разными приложениями необходимо преобразовать.
Автоматическая обработка естественного языка I. Обработка письменного текста.
Инструменты VS 2010 для работы с XML языком XML редактор. XSLT отладчик XSLT Profiler, инструмент позволяющий разработчикам измерять, оценивать и решать.
БАЗЫ ДАННЫХ ЛЕКЦИЯ 14. тема: XML-ТЕХНОЛОГИИ В БАЗАХ ДАННЫХ.
XML - расширенный язык разметки Моисеевой О. Макушиной Д. (eXtensible Markup Language)
XML- технологии Лекция 6 Технология DOM. DOM DOM Document Object Model объектная модель документа, стандартизованная консорциумом W3C DOM программный.
WEB- ТЕХНОЛОГИИ Лекция 2. Задача обмена данными 1 Форматы обмена данными : Текстовый CSV (Comma Separated Values) Локальные XML.
XML Extensible Markup Language вторник, 26 ноября 2013 г.вторник, 26 ноября 2013 г.вторник, 26 ноября 2013 г.вторник, 26 ноября 2013 г.вторник, 26 ноября.
XML eXtensible Markup Language 1.Пространства имён (Namespaces) 2.Язык навигации внутри XML-документа (XPath)
XML- ТЕХНОЛОГИИ Лекция 1 Введение в XML. Курс «XML- технологии » Лекций – 14 часов Лабораторные работы – 16 часов Зачет.
Структура XML-документов По материалам курса University of Washington
Современные языки и технологии программирования Использование XML.
WPF (Windows Presentation Foundation) WPF – новая технология.NET Framework 3.x для создания пользовательских интерфейсов в клиентских приложениях. Одна.
XML - ПРАВИЛА ПОСТРОЕНИЯ ДОКУМЕНТОВ. Элементы электронного УМК Учебный план Программа дисциплины Структура курса Электронный конспект Обучающие и аттестующие.
XML и XSLT (2) Матросов Александр Васильевич Санкт-Петербургский государственный университет.
XSLT-ТРАНСФОРМАЦИЯ XML- ТЕХНОЛОГИИ Лекция 4. Трансформация XML- данных Категории трансформации Структурные трансформации – трансформация одного словаря.
SAX Simple API for XML Презентацию подготовила Иванова Анна, гр. 950б.
ЯЗЫКИ РАЗМЕТКИ введение. Категории информационных ресурсов Данные – сведения о сущностях предметной области, их свойствах и связях с другими сущностями.
Транксрипт:

Лекция 7 XML и.NET –Краткое описание стандарта XML –Об использовании XML в.NET –Некоторые полезные классы из System.Xml

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Совместная обработка XML-файлов A duck walks into a bar and says 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."

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

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

Пример DTD Outside of a dog, a book is man's best friend Inside of a dog, it's too dark to read.

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

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

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

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

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

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

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 XmlWriter XML 1.0 Namespaces Abstract XmlNodeReaderXmlTextReader

Описание XmlReader и XmlWriter XmlReader –Основан на модели Pull; основная схема применения: 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(" "); break; case XmlNodeType.Element: Console.Write(" "); 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(" "); }

Пример использования 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(); } joebob 28

Архитектура XmlDocument XmlDocument XmlNode XmlElement XmlAttribute W3C XML DOM Level 2 Core XmlReader XmlWriter XML 1.0 Namespaces Schemas

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

Пример использования XmlDocument using System; using System.Xml; public class GenerateDocument { public static void 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); } }

Архитектура XPath XML Stores XmlDocumentXmlDataDocumentXPathDocument DOM DOM DataSet Fast XPath XPathNavigator IXPathNavigable.CreateNavigator()

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

Пример использования XPath // Создаем XPathDocument XPathDocument myXPathDoc = new XPathDocument("books.xml"); // Получаем XPathNavigator XPathNavigator myNav = ((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)"));

Архитектура XslTransform XslTransform XML Stores XmlReader XmlWriter System.IO.StreamSystem.IO.TextWriter XPathNavgator XmlDocumentXmlDataDocumentXPathDocument DOM DOM DataSet Fast XPath

Использование 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

Литература к лекции Б. Трэвис "XML и SOAP. Программирование для серверов BizTalk", М.: "Русская редакция", с. М. Янг "XML. Шаг за шагом", М. ЭКОМ, с. Ф. Бумфрей, О. Диренцо, Й. Даккет и др. "XML. Новые перспективы WWW", M.: ДМК, с. A. Skonnard ".NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation", MSDN Magazine, January P