44
2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №4 XML. XSD. XML в .NET Framework

Курс по информационни технологии

  • Upload
    breck

  • View
    79

  • Download
    0

Embed Size (px)

DESCRIPTION

Курс по информационни технологии. Занятие №4 XML. XSD. XML в .NET Framework. Съдържание 1/ 1. XML XML Schema Definition (XSD) Приложения на XML XmlDocument LINQ to XML Сериализиране на обекти към XML. XML. Какво е „ XML “? eXtensible Markup Language - PowerPoint PPT Presentation

Citation preview

Page 1: Курс по информационни технологии

2013Copyright © 2013 DAVID Holding Company

Курс по информационни

технологииЗанятие №4XML. XSD. XML в .NET

Framework

Page 2: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Съдържание 1/1

• XML• XML Schema Definition (XSD)• Приложения на XML• XmlDocument• LINQ to XML• Сериализиране на обекти към XML

Page 3: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• Какво е „XML“?– eXtensible Markup Language– Формален език за съхранение на

структурирани данни– Сходен с HTML– Препоръчан от W3C през 1998 г.

Page 4: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• Възли (nodes)– Основна структурна единица на XML документ– Организирани в дървовидна структура– Елементи– Атрибути– Текст– CDATA– Коментари– Entity references– Други...

Page 5: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• Елементи– Име

• Поредица от символи• Не съдържа интервали• Не започва с цифра или препинателен знак• Не започва с поредицата xml• Прави се разлика между малки и главни букви

– Отварящ и затварящ таг – заградени в ъглови скоби

– Кратък запис с един таг – може да съдържа единствено атрибути

– Коренов елемент – единствен

Page 6: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• Елементи

<library> <books> <book> <title>The Fellowship of the Ring</title> </book> <book> <title>The Two Towers</title> </book> <book> <title>The Return of the King</title> </book> </books> <newspapers /></library>

Page 7: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• Атрибути– Име – важат правилата за именоване на

елементи; уникално измежду всички атрибути на елемента

– Включват се в отварящия таг на елемента– Съдържание – текст или референция към

обект– Съдържанието се поставя в кавички

Page 8: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• Атрибути

<library> <books> <book author="J. R. R. Tolkien" year="1954"> <title>The Fellowship of the Ring</title> </book> <book author="J. K. Rowling" year="1997"> <title>Harry Potter and the Philosopher's Stone</title> </book> </books> <newspapers blackAndWhite="true" /></library>

Page 9: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• Коментари– Заграждат се между поредиците от символи <!-- и -->

– Не се обработват от приложенията, които четат XML документа

<library> <books> <!-- Good book! --> <book author="J. R. R. Tolkien" year="1954"> <title>The Fellowship of the Ring</title> </book> <!-- <book author="J. K. Rowling" year="1997"> <title>Harry Potter and the Philosopher's Stone</title> </book> --> </books></library>

Page 10: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• Представяне на неразрешени символи– Използват се entity references: поредици от

символи, започващи с & и завършващи с ;– &lt; замества символа <– &gt; замества символа >– &amp; замества символа &– &quot; замества символа "– Екзотични Unicode символи могат да се

запишат чрез &#nnnn; или &#xhhhh;, където nnnn е десетичен запис на кода на символа, а hhhh е шестнадесетичен запис на кода му

Page 11: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• CDATA възли– Служат за описване на текст, който съдържа

много неразрешени символи, така че да не се налага те да се заместват с entity references навсякъде

– Текстът се загражда между поредиците от символи <![CDATA[ и ]]>

<codeSamples> <codeSample> <![CDATA[ public void FilterNumbers(int[] numbers) { return numbers.Where(n => n > 0 && n < 1000); } ]]> </codeSample></codeSamples>

Page 12: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• XML декларация– Поставя се в началото на XML документа,

преди кореновия елемент– Указва версията на XML спецификацията,

описваща формата на документа; кодирането на символите в документа (UTF-8, ANSI code page 1251 и т.н.) както и това дали документът е независим от външни източници

<?xml version="1.0" encoding="utf-8" ?>

Page 13: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• Пространства от имена– Произволни низове– Служат за различаване на елементи или

атрибути със съвпадащи имена (подобно на пространствата от имена в .NET)

– Указват се в рамките на елемент с помощта на служебни атрибути xmlns или xmlns:prefix, където prefix е произволна поредица от символи, отговаряща на изискванията за валидно име на елемент

– Указаните пространства от имена са валидни в цялото поддърво от елементи на текущия елемент

Page 14: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML

• Пространства от имена– Пространството от имена по подразбиране се

определя от xmlns атрибута– Префиксите се поставят преди името на

елемента/атрибута, следвани от двоеточие<library xmlns="http://david.bg/xml/library" xmlns:p="http://david.bg/xml/persons"> <books> <book author="J. R. R. Tolkien" year="1954"> <title>The Fellowship of the Ring</title> <checkedOutBy> <p:person firstName="Alexander" lastName="Dalemski" /> </checkedOutBy> </book> </books></library>

Page 15: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML Schema Definition

• Какво е „XML Schema Definition“?– Вид XML документ– Служи за формално описване на структурата

на други XML документи– Налага ограничения върху допустимите възли

в документа– Използва се за валидиране на XML документи– XSD файлове

Page 16: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML Schema Definition

• Основни характеристики и компоненти на XML схема– Целево пространство от имена– Декларации на типове данни (прости и

сложни)– Декларации на елементи– Декларации на атрибути

Page 17: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML Schema Definition

• Целево пространство от имена– Указва пространството от имена по

подразбиране, чиито елементи/атрибути се описват от схемата

– Обикновено всички елементи и атрибути, описвани в схемата, принадлежат на едно и също пространство от имена

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://david.bg/xml/library"> </xs:schema>

Page 18: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML Schema Definition

• Прости типове данни– Вградени типове данни– Потребителски дефинирани прости типове

данни• Изброени типове• Типове, получени чрез ограничаване на

дефиниционното множество на друг тип данни• Типове, получени чрез обединение на

дефиниционните множества на други типове данни

<xs:simpleType name="bgdate"> <xs:restriction base="xs:string"> <xs:pattern value="\d{2}\.\d{2}\.\d{4}" /> </xs:restriction></xs:simpleType>

Page 19: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML Schema Definition

• Сложни типове данни– Описват групи от елементи– Може да се посочи поредност– Може да се укажат минимален и максимален

брой повторения

<xs:complexType name="book"> <xs:sequence> <xs:element name="title" type="xs:string" /> <xs:element name="genre" type="xs:string" minOccurs="0" /> </xs:sequence></xs:complexType>

Page 20: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML Schema Definition

• Декларации на елементи– Описват съдържанието на елементите на

съответното място в дървото на XML документа, които имат съответното име

<xs:element name="book"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string" /> <xs:element name="genre" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType></xs:element>

Page 21: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML Schema Definition

• Декларации на атрибути– Описват типа на данните, които се съхраняват

в съответните атрибути, както и дали са задължителни

<xs:element name="book"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string" /> <xs:element name="genre" type="xs:string" minOccurs="0" /> </xs:sequence> <xs:attribute name="author" type="xs:string" /> <xs:attribute name="year" type="xs:int" use="optional" /> </xs:complexType></xs:element>

Page 22: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML Schema Definition

• Обвързване на XML документ със схема– Осъществява се чрез атрибута schemaLocation

от пространството от имена http://www.w3.org/2001/XMLSchema-instance

<library xmlns="http://david.bg/xml/library" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://david.bg/xml/library http://david.bg/schemas/library.xsd"> <books> <book author="J. R. R. Tolkien" year="1954"> <title>The Fellowship of the Ring</title> </book> </books></library>

Page 23: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XML Schema Definition

• Валидиране на XML документ– Документът се валидира спрямо схемата (или

схемите), с която е обвързан– Visual Studio– Външни инструменти– При прочитане на документа в .NET Framework

Page 24: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Приложения на XML

• Какви са приложенията на XML?– Съхранение на данни– Интеграция на софтуерни системи– Уеб услуги– Езици, специфични за предметната област

(domain-specific languages, DSL)

Page 25: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Приложения на XML

• Съхранение на данни– Данните се сериализират в XML документ– Структурираност и еднозначност– Възможност за валидация– Заема повече място от двоично сериализирани

данни

Page 26: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Приложения на XML

• Интеграция на софтуерни системи– Различните системи боравят с различно

форматирани данни– Универсален формат за данните, базиран на

XML– Трансформация от вътрешното представяне

на данните в системата към универсалния формат и обратно

Page 27: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Приложения на XML

• Уеб услуги– Универсален, строго дефиниран стандарт– Възможност за предаване през HTTP– Библиотеки за работа с XML документи във

всякакви операционни системи/платформи– Разширяемост на структурата на данните

Page 28: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Приложения на XML

• Езици, специфични за предметната област– XSD– XSLT– XAML– DBML– XHTML

Page 29: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XmlDocument

• Класът System.Xml.XmlDocument– Дефиниран в асемблито System.Xml– Служи за зареждане на XML документ в

паметта и манипулации с възлите му– Може да се използва за създаване на XML

документи и записването им във файлове– Методът Load(…)– Методът Save(…)

XmlDocument xmlDocument = new XmlDocument();xmlDocument.Load(@"C:\test.xml");xmlDocument.Save(@"C:\test2.xml");

Page 30: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XmlDocument

• Създаване на XML документиXmlDocument xmlDocument = new XmlDocument();XmlDeclaration xmlDeclaration = xmlDocument.CreateXmlDeclaration("1.0", "utf-8", "yes");xmlDocument.AppendChild(xmlDeclaration);XmlElement libraryElement = xmlDocument.CreateElement("library");xmlDocument.AppendChild(libraryElement);XmlElement booksElement = xmlDocument.CreateElement("books");libraryElement.AppendChild(booksElement);XmlElement bookElement = xmlDocument.CreateElement("book");booksElement.AppendChild(bookElement);XmlAttribute authorAttribute = xmlDocument.CreateAttribute("author");authorAttribute.Value = "J. R. R. Tolkien";bookElement.Attributes.Append(authorAttribute);XmlElement titleElement = xmlDocument.CreateElement("title");XmlText titleText = xmlDocument.CreateTextNode("The Two Towers");titleElement.AppendChild(titleText);bookElement.AppendChild(titleElement);xmlDocument.Save(@"C:\library.xml");

Page 31: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

XmlDocument

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

XmlDocument xmlDocument = new XmlDocument();xmlDocument.Load(@"C:\library.xml");XmlElement libraryElement = xmlDocument["library"];XmlElement booksElement = libraryElement["books"];XmlNodeList bookElements = booksElement.GetElementsByTagName("book");

foreach (XmlElement bookElement in bookElements){ XmlAttribute authorAttribute = bookElement.Attributes["author"]; XmlElement titleElement = bookElement["title"]; Console.WriteLine("Title: {0}; Author: {1}", titleElement.InnerText, authorAttribute.Value);}Console.ReadLine();

Page 32: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to XML

• Какво е „LINQ to XML“?– Част от .NET Framework– Имплементация на LINQ– Допълнителни разширителни методи за

работа с колекции от XML възли– Улеснява боравенето с XML документи– Асемблито System.Xml.Linq– Пространството от имена System.Xml.Linq

Page 33: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to XML

• Създаване на XML документи

XDocument xmlDocument = new XDocument();xmlDocument.Declaration = new XDeclaration("1.0", "utf-8", "yes");XElement libraryElement = new XElement("library");xmlDocument.Add(libraryElement);XElement booksElement = new XElement("books");libraryElement.Add(booksElement);XElement bookElement = new XElement("book");booksElement.Add(bookElement);XAttribute authorAttribute = new XAttribute("author", "J. R. R. Tolkien");XElement titleElement = new XElement("title", "The Two Towers");bookElement.Add(authorAttribute, titleElement);xmlDocument.Save(@"C:\library.xml");

Page 34: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to XML

• Създаване на XML документи

XAttribute authorAttribute = new XAttribute("author", "J. R. R. Tolkien");XElement titleElement = new XElement("title", "The Two Towers");XElement bookElement = new XElement("book", authorAttribute, titleElement);XElement booksElement = new XElement("books", bookElement);XElement libraryElement = new XElement("library", booksElement);XDeclaration xmlDeclaration = new XDeclaration("1.0", "utf-8", "yes");XDocument xmlDocument = new XDocument(xmlDeclaration, libraryElement);xmlDocument.Save(@"C:\library.xml");

Page 35: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to XML

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

XDocument xmlDocument = XDocument.Load(@"C:\library2.xml");var books = from e in xmlDocument.Element("library").Element("books") .Elements("book") where e.Attribute("author") != null select new { Title = e.Element("title").Value, Author = e.Attribute("author").Value, };

foreach (var book in books){ Console.WriteLine("Title: {0}; Author: {1}", book.Title, book.Author);}

Page 36: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Сериализиране на обекти към XML• Сериализиране към XML– Вградена поддръжка в .NET Framework– Пространството от имена System.Xml.Serialization в асемблито System.Xml

– Сериализират се единствено публичните свойства на обекта

– Атрибути за управление сериализирането на класове и свойства

– Класът XmlSerializer

Page 37: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Сериализиране на обекти към XML• Сериализиране по подразбиране– По подразбиране всички свойства се

сериализират като елементи– Името на елементите по подразбиране

съвпада с името на свойството– Ако се сериализира колекция от елементи, по

подразбиране се създава един елемент с името на колекцията и в него се поставят по един елемент за всеки от обектите в колекцията; имената на вътрепните елементи се определят от името на типа на обектите

Page 38: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Сериализиране на обекти към XML• Управление на сериализирането– Атрибутът XmlRoot– Атрибутът XmlElement– Атрибутът XmlAttribute– Атрибутът XmlArray– Атрибутът XmlArrayItem

Page 39: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Сериализиране на обекти към XML• Управление на сериализирането

[XmlRoot("library")]public class Library{ [XmlArray("books")] [XmlArrayItem("book")] public List<Book> Books { get; set; }}

public class Book{ [XmlAttribute("author")] public string Author { get; set; }

[XmlElement("title")] public string Title { get; set; }}

Page 40: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Сериализиране на обекти към XML• Класът XmlSerializer– В конструктора му се подава тип, който ще

бъде сериализиран или десериализиран– Методът Serialize(…)– Методът Deserialize(…)

Page 41: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Сериализиране на обекти към XML• Сериализиране на обект към XML

var book = new Book{ Author = "J. R. R. Tolkien", Title = "The Two Towers",};var library = new Library{ Books = new List<Book> { book },};

var xmlSerializer = new XmlSerializer(typeof(Library));using (FileStream stream = File.Create(@"C:\library.xml")){ xmlSerializer.Serialize(stream, library);}

Page 42: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Сериализиране на обекти към XML• Десериализиране на обект от XML

Library library;var xmlSerializer = new XmlSerializer(typeof(Library));using (FileStream stream = File.OpenRead(@"C:\library.xml")){ library = (Library)xmlSerializer.Deserialize(stream);}

foreach (Book book in library.Books){ Console.WriteLine("Title: {0}; Author: {1}", book.Title, book.Author);}

Page 43: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Въпроси?

Page 44: Курс по информационни технологии

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Благодаря!

• Александър Далемски– [email protected][email protected]– Skype: musasho– https://www.facebook.com/adalemski

• ДАВИД академия– [email protected]– http://acad.david.bg/– @david_academy– https://www.facebook.com/groups/david.academy/