Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Upcoming SlideShare
Loading in...5
×
 

Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework

on

  • 269 views

Занятие №4 на курса по информационни технологии (2013) провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - ...

Занятие №4 на курса по информационни технологии (2013) провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите:
- XML
- XSD
- XML в .NET Framework

Statistics

Views

Total Views
269
Views on SlideShare
269
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework Presentation Transcript

  • Курс по информационни технологии Занятие №4 XML. XSD. XML в .NET Framework 2013
  • Съдържание 1/1 • • • • • • XML XML Schema Definition (XSD) Приложения на XML XmlDocument LINQ to XML Сериализиране на обекти към XML
  • XML • Какво е „XML“? – eXtensible Markup Language – Формален език за съхранение на структурирани данни – Сходен с HTML – Препоръчан от W3C през 1998 г.
  • XML • Възли (nodes) – – – – – – – – – Основна структурна единица на XML документ Организирани в дървовидна структура Елементи Атрибути Текст CDATA Коментари Entity references Други...
  • XML • Елементи – Име • • • • • Поредица от символи Не съдържа интервали Не започва с цифра или препинателен знак Не започва с поредицата xml Прави се разлика между малки и главни букви – Отварящ и затварящ таг – заградени в ъглови скоби – Кратък запис с един таг – може да съдържа единствено атрибути – Коренов елемент – единствен
  • 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>
  • XML • Атрибути – Име – важат правилата за именоване на елементи; уникално измежду всички атрибути на елемента – Включват се в отварящия таг на елемента – Съдържание – текст или референция към обект – Съдържанието се поставя в кавички
  • 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>
  • 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>
  • XML • Представяне на неразрешени символи – Използват се entity references: поредици от символи, започващи с & и завършващи с ; – &lt; замества символа < – &gt; замества символа > – &amp; замества символа & – &quot; замества символа " – Екзотични Unicode символи могат да се запишат чрез &#nnnn; или &#xhhhh;, където nnnn е десетичен запис на кода на символа, а hhhh е шестнадесетичен запис на кода му
  • XML • CDATA възли – Служат за описване на текст, който съдържа много неразрешени символи, така че да не се налага те да се заместват с entity references навсякъде – Текстът се загражда между поредиците от символи <![CDATA[ и ]]> <codeSamples> <codeSample> <![CDATA[ public void FilterNumbers(int[] numbers) { return numbers.Where(n => n > 0 && n < 1000); } ]]> </codeSample> </codeSamples>
  • XML • XML декларация – Поставя се в началото на XML документа, преди кореновия елемент – Указва версията на XML спецификацията, описваща формата на документа; кодирането на символите в документа (UTF-8, ANSI code page 1251 и т.н.) както и това дали документът е независим от външни източници <?xml version="1.0" encoding="utf-8" ?>
  • XML • Пространства от имена – Произволни низове – Служат за различаване на елементи или атрибути със съвпадащи имена (подобно на пространствата от имена в .NET) – Указват се в рамките на елемент с помощта на служебни атрибути xmlns или xmlns:prefix, където prefix е произволна поредица от символи, отговаряща на изискванията за валидно име на елемент – Указаните пространства от имена са валидни в цялото поддърво от елементи на текущия елемент
  • 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>
  • XML Schema Definition • Какво е „XML Schema Definition“? – Вид XML документ – Служи за формално описване на структурата на други XML документи – Налага ограничения върху допустимите възли в документа – Използва се за валидиране на XML документи – XSD файлове
  • XML Schema Definition • Основни характеристики и компоненти на XML схема – – – – Целево пространство от имена Декларации на типове данни (прости и сложни) Декларации на елементи Декларации на атрибути
  • XML Schema Definition • Целево пространство от имена – Указва пространството от имена по подразбиране, чиито елементи/атрибути се описват от схемата – Обикновено всички елементи и атрибути, описвани в схемата, принадлежат на едно и също пространство от имена <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://david.bg/xml/library"> </xs:schema>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • XML Schema Definition • Валидиране на XML документ – Документът се валидира спрямо схемата (или схемите), с която е обвързан – Visual Studio – Външни инструменти – При прочитане на документа в .NET Framework
  • Приложения на XML • Какви са приложенията на XML? – – – – Съхранение на данни Интеграция на софтуерни системи Уеб услуги Езици, специфични за предметната област (domainspecific languages, DSL)
  • Приложения на XML • Съхранение на данни – – – – Данните се сериализират в XML документ Структурираност и еднозначност Възможност за валидация Заема повече място от двоично сериализирани данни
  • Приложения на XML • Интеграция на софтуерни системи – Различните системи боравят с различно форматирани данни – Универсален формат за данните, базиран на XML – Трансформация от вътрешното представяне на данните в системата към универсалния формат и обратно
  • Приложения на XML • Уеб услуги – Универсален, строго дефиниран стандарт – Възможност за предаване през HTTP – Библиотеки за работа с XML документи във всякакви операционни системи/платформи – Разширяемост на структурата на данните
  • Приложения на XML • Езици, специфични за предметната област – – – – – XSD XSLT XAML DBML XHTML
  • XmlDocument • Класът System.Xml.XmlDocument – Дефиниран в асемблито System.Xml – Служи за зареждане на XML документ в паметта и манипулации с възлите му – Може да се използва за създаване на XML документи и записването им във файлове – Методът Load(…) – Методът Save(…) XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(@"C:test.xml"); xmlDocument.Save(@"C:test2.xml");
  • 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");
  • 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();
  • LINQ to XML • Какво е „LINQ to XML“? – Част от .NET Framework – Имплементация на LINQ – Допълнителни разширителни методи за работа с колекции от XML възли – Улеснява боравенето с XML документи – Асемблито System.Xml.Linq – Пространството от имена System.Xml.Linq
  • 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");
  • 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");
  • 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); }
  • Сериализиране на обекти към XML • Сериализиране към XML – Вградена поддръжка в .NET Framework – Пространството от имена System.Xml.Serialization в асемблито System.Xml – Сериализират се единствено публичните свойства на обекта – Атрибути за управление сериализирането на класове и свойства – Класът XmlSerializer
  • Сериализиране на обекти към XML • Сериализиране по подразбиране – По подразбиране всички свойства се сериализират като елементи – Името на елементите по подразбиране съвпада с името на свойството – Ако се сериализира колекция от елементи, по подразбиране се създава един елемент с името на колекцията и в него се поставят по един елемент за всеки от обектите в колекцията; имената на вътрепните елементи се определят от името на типа на обектите
  • Сериализиране на обекти към XML • Управление на сериализирането – – – – – Атрибутът XmlRoot Атрибутът XmlElement Атрибутът XmlAttribute Атрибутът XmlArray Атрибутът XmlArrayItem
  • Сериализиране на обекти към 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; } }
  • Сериализиране на обекти към XML • Класът XmlSerializer – В конструктора му се подава тип, който ще бъде сериализиран или десериализиран – Методът Serialize(…) – Методът Deserialize(…)
  • Сериализиране на обекти към 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); }
  • Сериализиране на обекти към 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); }
  • Въпроси?
  • Благодаря! • Александър Далемски – – – – sasho@david.bg musashi.bg@gmail.com Skype: musasho https://www.facebook.com/adalemski • ДАВИД академия – – – – acad@david.bg http://acad.david.bg/ @david_academy https://www.facebook.com/groups/david.academy/