SlideShare una empresa de Scribd logo
1 de 44
Курс по информационни
технологии
Занятие №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/

Más contenido relacionado

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

Nakov - .NET Framework Overview + Security
Nakov - .NET Framework Overview +  SecurityNakov - .NET Framework Overview +  Security
Nakov - .NET Framework Overview + SecuritySvetlin Nakov
 
Xml language
Xml languageXml language
Xml languageTU-Sofia
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#DAVID Academy
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkciiIvan Peev
 
Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1DAVID Academy
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSDAVID Academy
 
XML - What is XML?
XML - What is XML?XML - What is XML?
XML - What is XML?sandur
 
Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7DAVID Academy
 
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...DAVID Academy
 
WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152Miroslav Lessev
 
Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLDAVID Academy
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLDAVID Academy
 

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

XML and Web Programming
XML and Web ProgrammingXML and Web Programming
XML and Web Programming
 
Nakov - .NET Framework Overview + Security
Nakov - .NET Framework Overview +  SecurityNakov - .NET Framework Overview +  Security
Nakov - .NET Framework Overview + Security
 
Xml language
Xml languageXml language
Xml language
 
Tema13
Tema13Tema13
Tema13
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkcii
 
Failov format xml
Failov format xmlFailov format xml
Failov format xml
 
Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSS
 
XML - What is XML?
XML - What is XML?XML - What is XML?
XML - What is XML?
 
DHTML
DHTMLDHTML
DHTML
 
DHTML
DHTMLDHTML
DHTML
 
Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7
 
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
 
WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152
 
Html
HtmlHtml
Html
 
Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTML
 
.NET/C#_20
.NET/C#_20.NET/C#_20
.NET/C#_20
 
.NET/C#_18
.NET/C#_18.NET/C#_18
.NET/C#_18
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
 

Más de DAVID Academy

Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)DAVID Academy
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14DAVID Academy
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)DAVID Academy
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13DAVID Academy
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3DAVID Academy
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesDAVID Academy
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...DAVID Academy
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеDAVID Academy
 

Más de DAVID Academy (20)

Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSS
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11
 
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9
 
Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - Помагало
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - Упражнения
 
Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web Services
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. Представяне
 

Курс по информационни технологии (2013) - 4. XML, 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> <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>
  • 9. 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>
  • 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 и т.н.) както и това дали документът е независим от външни източници <?xml version="1.0" encoding="utf-8" ?>
  • 13. XML • Пространства от имена – Произволни низове – Служат за различаване на елементи или атрибути със съвпадащи имена (подобно на пространствата от имена в .NET) – Указват се в рамките на елемент с помощта на служебни атрибути xmlns или xmlns:prefix, където prefix е произволна поредица от символи, отговаряща на изискванията за валидно име на елемент – Указаните пространства от имена са валидни в цялото поддърво от елементи на текущия елемент
  • 14. 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>
  • 15. XML Schema Definition • Какво е „XML Schema Definition“? – Вид XML документ – Служи за формално описване на структурата на други XML документи – Налага ограничения върху допустимите възли в документа – Използва се за валидиране на XML документи – XSD файлове
  • 16. XML Schema Definition • Основни характеристики и компоненти на XML схема – – – – Целево пространство от имена Декларации на типове данни (прости и сложни) Декларации на елементи Декларации на атрибути
  • 17. XML Schema Definition • Целево пространство от имена – Указва пространството от имена по подразбиране, чиито елементи/атрибути се описват от схемата – Обикновено всички елементи и атрибути, описвани в схемата, принадлежат на едно и също пространство от имена <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://david.bg/xml/library"> </xs:schema>
  • 18. 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>
  • 19. 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>
  • 20. 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>
  • 21. 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>
  • 22. 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>
  • 23. XML Schema Definition • Валидиране на XML документ – Документът се валидира спрямо схемата (или схемите), с която е обвързан – Visual Studio – Външни инструменти – При прочитане на документа в .NET Framework
  • 24. Приложения на XML • Какви са приложенията на XML? – – – – Съхранение на данни Интеграция на софтуерни системи Уеб услуги Езици, специфични за предметната област (domainspecific 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(…) XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(@"C:test.xml"); xmlDocument.Save(@"C:test2.xml");
  • 30. 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");
  • 31. 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();
  • 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 = 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");
  • 34. 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");
  • 35. 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); }
  • 36. Сериализиране на обекти към XML • Сериализиране към XML – Вградена поддръжка в .NET Framework – Пространството от имена System.Xml.Serialization в асемблито System.Xml – Сериализират се единствено публичните свойства на обекта – Атрибути за управление сериализирането на класове и свойства – Класът XmlSerializer
  • 37. Сериализиране на обекти към XML • Сериализиране по подразбиране – По подразбиране всички свойства се сериализират като елементи – Името на елементите по подразбиране съвпада с името на свойството – Ако се сериализира колекция от елементи, по подразбиране се създава един елемент с името на колекцията и в него се поставят по един елемент за всеки от обектите в колекцията; имената на вътрепните елементи се определят от името на типа на обектите
  • 38. Сериализиране на обекти към XML • Управление на сериализирането – – – – – Атрибутът XmlRoot Атрибутът XmlElement Атрибутът XmlAttribute Атрибутът XmlArray Атрибутът XmlArrayItem
  • 39. Сериализиране на обекти към 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; } }
  • 40. Сериализиране на обекти към XML • Класът XmlSerializer – В конструктора му се подава тип, който ще бъде сериализиран или десериализиран – Методът Serialize(…) – Методът Deserialize(…)
  • 41. Сериализиране на обекти към 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); }
  • 42. Сериализиране на обекти към 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); }
  • 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/