1 / 44

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

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

breck
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Курс по информационни технологии Занятие №4XML. XSD. XML в .NET Framework

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

  3. XML • Какво е „XML“? • eXtensible Markup Language • Формален език за съхранение на структурирани данни • Сходен с HTML • Препоръчан от W3C през 1998 г.

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

  5. XML • Елементи • Име • Поредица от символи • Не съдържа интервали • Не започва с цифра или препинателен знак • Не започва с поредицата xml • Прави се разлика между малки и главни букви • Отварящ и затварящ таг – заградени в ъглови скоби • Кратък запис с един таг – може да съдържа единствено атрибути • Коренов елемент – единствен

  6. 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>

  7. XML • Атрибути • Име – важат правилата за именоване на елементи; уникално измежду всички атрибути на елемента • Включват се в отварящия таг на елемента • Съдържание – текст или референция към обект • Съдържанието се поставя в кавички

  8. XML • Атрибути <library> <books> <bookauthor="J. R. R. Tolkien"year="1954"> <title>The Fellowship of the Ring</title> </book> <bookauthor="J. K. Rowling"year="1997"> <title>Harry Potter and the Philosopher's Stone</title> </book> </books><newspapersblackAndWhite="true"/></library>

  9. XML • Коментари • Заграждат се между поредиците от символи<!--и--> • Не се обработват от приложенията, които четат XML документа <library><books><!-- Good book! --><bookauthor="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>

  10. XML • Представяне на неразрешени символи • Използват се entity references: поредици от символи, започващи с &и завършващи с ; • &lt;замества символа < • &gt;замества символа > • &amp; замества символа & • &quot;замества символа " • Екзотични Unicode символи могат да се запишат чрез &#nnnn;или &#xhhhh;, където nnnn е десетичен запис на кода на символа, а hhhh е шестнадесетичен запис на кода му

  11. XML • CDATA възли • Служат за описване на текст, който съдържа много неразрешени символи, така че да не се налага те да се заместват с entity references навсякъде • Текстът се загражда между поредиците от символи <![CDATA[и ]]> <codeSamples><codeSample><![CDATA[public void FilterNumbers(int[] numbers) {return numbers.Where(n => n > 0 && n < 1000); }]]></codeSample></codeSamples>

  12. XML • XML декларация • Поставя се в началото на XML документа, преди кореновия елемент • Указва версията на XML спецификацията, описваща формата на документа; кодирането на символите в документа (UTF-8, ANSI code page 1251 и т.н.) както и това дали документът е независим от външни източници <?xmlversion="1.0"encoding="utf-8"?>

  13. XML • Пространства от имена • Произволни низове • Служат за различаване на елементи или атрибути със съвпадащи имена (подобно на пространствата от имена в .NET) • Указват се в рамките на елемент с помощта на служебни атрибути xmlns или xmlns:prefix, където prefixе произволна поредица от символи, отговаряща на изискванията за валидно име на елемент • Указаните пространства от имена са валидни в цялото поддърво от елементи на текущия елемент

  14. XML • Пространства от имена • Пространството от имена по подразбиране се определя от xmlns атрибута • Префиксите се поставят преди името на елемента/атрибута, следвани от двоеточие <libraryxmlns="http://david.bg/xml/library"xmlns:p="http://david.bg/xml/persons"><books><bookauthor="J. R. R. Tolkien"year="1954"><title>The Fellowship of the Ring</title><checkedOutBy><p:personfirstName="Alexander"lastName="Dalemski"/></checkedOutBy></book></books></library>

  15. XMLSchema Definition • Какво е „XML Schema Definition“? • Вид XML документ • Служи за формално описване на структурата на други XML документи • Налага ограничения върху допустимите възли в документа • Използва се за валидиране на XML документи • XSD файлове

  16. XMLSchema Definition • Основни характеристики и компоненти на XML схема • Целево пространство от имена • Декларации на типове данни (прости и сложни) • Декларации на елементи • Декларации на атрибути

  17. XMLSchema Definition • Целево пространство от имена • Указва пространството от имена по подразбиране, чиито елементи/атрибути се описват от схемата • Обикновено всички елементи и атрибути, описвани в схемата, принадлежат на едно и също пространство от имена <xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace="http://david.bg/xml/library"></xs:schema>

  18. XMLSchema Definition • Прости типове данни • Вградени типове данни • Потребителски дефинирани прости типове данни • Изброени типове • Типове, получени чрез ограничаване на дефиниционното множество на друг тип данни • Типове, получени чрез обединение на дефиниционните множества на други типове данни <xs:simpleTypename="bgdate"><xs:restrictionbase="xs:string"><xs:patternvalue="\d{2}\.\d{2}\.\d{4}"/></xs:restriction></xs:simpleType>

  19. XMLSchema Definition • Сложни типове данни • Описват групи от елементи • Може да се посочи поредност • Може да се укажат минимален и максимален брой повторения <xs:complexTypename="book"><xs:sequence><xs:elementname="title"type="xs:string"/><xs:elementname="genre"type="xs:string"minOccurs="0"/></xs:sequence></xs:complexType>

  20. XMLSchema Definition • Декларации на елементи • Описват съдържанието на елементите на съответното място в дървото на XML документа, които имат съответното име <xs:elementname="book"><xs:complexType><xs:sequence><xs:elementname="title"type="xs:string"/><xs:elementname="genre"type="xs:string"minOccurs="0"/></xs:sequence></xs:complexType></xs:element>

  21. XMLSchema Definition • Декларации на атрибути • Описват типа на данните, които се съхраняват в съответните атрибути, както и дали са задължителни <xs:elementname="book"><xs:complexType><xs:sequence><xs:elementname="title"type="xs:string"/><xs:elementname="genre"type="xs:string"minOccurs="0"/></xs:sequence><xs:attributename="author"type="xs:string"/><xs:attributename="year"type="xs:int"use="optional"/></xs:complexType></xs:element>

  22. XMLSchema Definition • Обвързване на XML документ със схема • Осъществява се чрезатрибута schemaLocationот пространството от имена http://www.w3.org/2001/XMLSchema-instance <libraryxmlns="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><bookauthor="J. R. R. Tolkien"year="1954"><title>The Fellowship of the Ring</title></book></books></library>

  23. XMLSchema Definition • Валидиране на XML документ • Документът се валидира спрямо схемата (или схемите), с която е обвързан • Visual Studio • Външни инструменти • При прочитане на документа в .NET Framework

  24. Приложения на XML • Какви са приложенията на XML? • Съхранение на данни • Интеграция на софтуерни системи • Уеб услуги • Езици, специфични за предметната област (domain-specific languages, DSL)

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

  26. Приложения на XML • Интеграция на софтуерни системи • Различните системи боравят с различно форматирани данни • Универсален формат за данните, базиран на XML • Трансформация от вътрешното представяне на данните в системата към универсалния формат и обратно

  27. Приложения на XML • Уеб услуги • Универсален, строго дефиниран стандарт • Възможност за предаване през HTTP • Библиотеки за работа с XML документи във всякакви операционни системи/платформи • Разширяемост на структурата на данните

  28. Приложения на XML • Езици, специфични за предметната област • XSD • XSLT • XAML • DBML • XHTML

  29. XmlDocument • КласътSystem.Xml.XmlDocument • Дефиниран в асемблито System.Xml • Служи за зареждане на XML документ в паметта и манипулации с възлите му • Може да се използва за създаване на XML документи и записването им във файлове • Методът Load(…) • Методът Save(…) XmlDocumentxmlDocument = newXmlDocument();xmlDocument.Load(@"C:\test.xml");xmlDocument.Save(@"C:\test2.xml");

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

  31. XmlDocument • Прочитане на XML документи XmlDocumentxmlDocument = newXmlDocument();xmlDocument.Load(@"C:\library.xml");XmlElementlibraryElement = xmlDocument["library"];XmlElementbooksElement = libraryElement["books"];XmlNodeListbookElements = booksElement.GetElementsByTagName("book");foreach(XmlElementbookElementinbookElements){XmlAttributeauthorAttribute = bookElement.Attributes["author"];XmlElementtitleElement = bookElement["title"];Console.WriteLine("Title: {0}; Author: {1}",titleElement.InnerText, authorAttribute.Value);}Console.ReadLine();

  32. LINQ to XML • Какво е „LINQ to XML“? • Част от .NET Framework • Имплементация на LINQ • Допълнителни разширителни методи за работа с колекции от XML възли • Улеснява боравенето с XML документи • Асемблито System.Xml.Linq • Пространството от имена System.Xml.Linq

  33. LINQ to XML • Създаване на XML документи XDocument xmlDocument = newXDocument();xmlDocument.Declaration= newXDeclaration("1.0", "utf-8", "yes");XElementlibraryElement = newXElement("library");xmlDocument.Add(libraryElement);XElementbooksElement = newXElement("books");libraryElement.Add(booksElement);XElementbookElement = newXElement("book");booksElement.Add(bookElement);XAttributeauthorAttribute = newXAttribute("author", "J. R. R. Tolkien");XElementtitleElement = newXElement("title", "The Two Towers");bookElement.Add(authorAttribute, titleElement);xmlDocument.Save(@"C:\library.xml");

  34. LINQ to XML • Създаване на XML документи XAttributeauthorAttribute = newXAttribute("author", "J. R. R. Tolkien");XElementtitleElement = newXElement("title", "The Two Towers");XElementbookElement = newXElement("book", authorAttribute, titleElement);XElementbooksElement = newXElement("books", bookElement);XElementlibraryElement = newXElement("library", booksElement);XDeclarationxmlDeclaration = newXDeclaration("1.0", "utf-8", "yes");XDocumentxmlDocument = newXDocument(xmlDeclaration, libraryElement);xmlDocument.Save(@"C:\library.xml");

  35. LINQ to XML • Прочитане на XML документи XDocument xmlDocument = XDocument.Load(@"C:\library2.xml");varbooks =frome inxmlDocument.Element("library").Element("books").Elements("book")wheree.Attribute("author") != nullselectnew {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);}

  36. Сериализиране на обекти към XML • Сериализиране към XML • Вградена поддръжка в .NET Framework • Пространството от имена System.Xml.Serializationв асемблито System.Xml • Сериализират се единствено публичните свойства на обекта • Атрибути за управление сериализирането на класове и свойства • Класът XmlSerializer

  37. Сериализиране на обекти към XML • Сериализиране по подразбиране • По подразбиране всички свойства се сериализират като елементи • Името на елементите по подразбиране съвпада с името на свойството • Ако се сериализира колекция от елементи, по подразбиране се създава един елемент с името на колекцията и в него се поставят по един елемент за всеки от обектите в колекцията; имената на вътрепните елементи се определят от името на типа на обектите

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

  39. Сериализиране на обекти към XML • Управление на сериализирането [XmlRoot("library")]publicclassLibrary{ [XmlArray("books")] [XmlArrayItem("book")]publicList<Book> Books { get; set; }}publicclassBook{ [XmlAttribute("author")]publicstring Author { get; set; } [XmlElement("title")]publicstring Title { get; set; }}

  40. Сериализиране на обекти към XML • Класът XmlSerializer • В конструктора му се подава тип, който ще бъде сериализиран или десериализиран • Методът Serialize(…) • Методът Deserialize(…)

  41. Сериализиране на обекти към XML • Сериализиране на обект към XML var book = newBook{ Author = "J. R. R. Tolkien", Title = "The Two Towers",};varlibrary = newLibrary{ Books = newList<Book> { book },};varxmlSerializer = newXmlSerializer(typeof(Library));using(FileStream stream = File.Create(@"C:\library.xml")){xmlSerializer.Serialize(stream, library);}

  42. Сериализиране на обекти към XML • Десериализиране на обект от XML Librarylibrary;varxmlSerializer = newXmlSerializer(typeof(Library));using(FileStream stream = File.OpenRead(@"C:\library.xml")){library = (Library)xmlSerializer.Deserialize(stream);}foreach(Bookbookinlibrary.Books){Console.WriteLine("Title: {0}; Author: {1}", book.Title, book.Author);}

  43. Въпроси?

  44. Благодаря! • Александър Далемски • 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/

More Related