440 likes | 659 Views
Курс по информационни технологии. Занятие №4 XML. XSD. XML в .NET Framework. Съдържание 1/ 1. XML XML Schema Definition (XSD) Приложения на XML XmlDocument LINQ to XML Сериализиране на обекти към XML. XML. Какво е „ XML “? eXtensible Markup Language
E N D
Курс по информационни технологии Занятие №4XML. XSD. XML в .NET Framework
Съдържание 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> <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>
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>
XML • Представяне на неразрешени символи • Използват се entity references: поредици от символи, започващи с &и завършващи с ; • <замества символа < • >замества символа > • & замества символа & • "замества символа " • Екзотични 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 и т.н.) както и това дали документът е независим от външни източници <?xmlversion="1.0"encoding="utf-8"?>
XML • Пространства от имена • Произволни низове • Служат за различаване на елементи или атрибути със съвпадащи имена (подобно на пространствата от имена в .NET) • Указват се в рамките на елемент с помощта на служебни атрибути xmlns или xmlns:prefix, където prefixе произволна поредица от символи, отговаряща на изискванията за валидно име на елемент • Указаните пространства от имена са валидни в цялото поддърво от елементи на текущия елемент
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>
XMLSchema Definition • Какво е „XML Schema Definition“? • Вид XML документ • Служи за формално описване на структурата на други XML документи • Налага ограничения върху допустимите възли в документа • Използва се за валидиране на XML документи • XSD файлове
XMLSchema Definition • Основни характеристики и компоненти на XML схема • Целево пространство от имена • Декларации на типове данни (прости и сложни) • Декларации на елементи • Декларации на атрибути
XMLSchema Definition • Целево пространство от имена • Указва пространството от имена по подразбиране, чиито елементи/атрибути се описват от схемата • Обикновено всички елементи и атрибути, описвани в схемата, принадлежат на едно и също пространство от имена <xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace="http://david.bg/xml/library"></xs:schema>
XMLSchema Definition • Прости типове данни • Вградени типове данни • Потребителски дефинирани прости типове данни • Изброени типове • Типове, получени чрез ограничаване на дефиниционното множество на друг тип данни • Типове, получени чрез обединение на дефиниционните множества на други типове данни <xs:simpleTypename="bgdate"><xs:restrictionbase="xs:string"><xs:patternvalue="\d{2}\.\d{2}\.\d{4}"/></xs:restriction></xs:simpleType>
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>
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>
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>
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>
XMLSchema Definition • Валидиране на XML документ • Документът се валидира спрямо схемата (или схемите), с която е обвързан • Visual Studio • Външни инструменти • При прочитане на документа в .NET Framework
Приложения на XML • Какви са приложенията на XML? • Съхранение на данни • Интеграция на софтуерни системи • Уеб услуги • Езици, специфични за предметната област (domain-specific 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(…) XmlDocumentxmlDocument = newXmlDocument();xmlDocument.Load(@"C:\test.xml");xmlDocument.Save(@"C:\test2.xml");
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");
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();
LINQ to XML • Какво е „LINQ to XML“? • Част от .NET Framework • Имплементация на LINQ • Допълнителни разширителни методи за работа с колекции от XML възли • Улеснява боравенето с XML документи • Асемблито System.Xml.Linq • Пространството от имена System.Xml.Linq
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");
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");
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);}
Сериализиране на обекти към XML • Сериализиране към XML • Вградена поддръжка в .NET Framework • Пространството от имена System.Xml.Serializationв асемблито System.Xml • Сериализират се единствено публичните свойства на обекта • Атрибути за управление сериализирането на класове и свойства • Класът XmlSerializer
Сериализиране на обекти към XML • Сериализиране по подразбиране • По подразбиране всички свойства се сериализират като елементи • Името на елементите по подразбиране съвпада с името на свойството • Ако се сериализира колекция от елементи, по подразбиране се създава един елемент с името на колекцията и в него се поставят по един елемент за всеки от обектите в колекцията; имената на вътрепните елементи се определят от името на типа на обектите
Сериализиране на обекти към XML • Управление на сериализирането • Атрибутът XmlRoot • Атрибутът XmlElement • Атрибутът XmlAttribute • Атрибутът XmlArray • Атрибутът XmlArrayItem
Сериализиране на обекти към 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; }}
Сериализиране на обекти към XML • Класът XmlSerializer • В конструктора му се подава тип, който ще бъде сериализиран или десериализиран • Методът Serialize(…) • Методът Deserialize(…)
Сериализиране на обекти към 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);}
Сериализиране на обекти към 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);}
Благодаря! • Александър Далемски • 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/