4) XML, JSON, XPath / Ключевые элементы и концепции WPF

XML, JSON, XPath
Расширяемый язык разметки (eXtensible Markup Language, XML) – это способ описания структурированных данных. Структурированными данными называются такие данные, которые обладают заданным набором семантических атрибутов и допускают иерархическое описание. XML-данные содержатся в документе, в роли которого может выступать файл, поток или другое хранилище информации, способное поддерживать текстовый формат. Любой XML-документ строится по определённым правилам.
1. Единица информации – XML-элемент. XML-документ состоит из XML-элементов. Каждый элемент определяется при помощи имени, открывающего тега и закрывающего тега. Открывающий тег элемента записывается в форме <имя-элемента>, закрывающий тег – в форме </имя-элемента>. Между открывающим и закрывающим тегами размещается содержимое элемента.
2. Иерархия элементов. Содержимым XML-элемента может быть текст, пробельные символы (пробелы, табуляции, переводы строки), а также другие XML-элементы. Допускается комбинация указанного содержимого. Элементы должны быть правильно вложены друг в друга
3. Корневой элемент. В XML-документе всегда должен быть единственный элемент, называемый корневым, никакая часть которого не входит в содержимое любого другого элемента.
4. Синтаксис имён элемента. Имена элементов регистр зависимы. Имена могут содержать буквы, цифры, дефисы, символы подчёркивания, точки, однако должны начинаться только с буквы или символа подчёркивания. Имена, начинающиеся с xml, зарезервированы для нужд XML.
5. Атрибуты элемента. Любой XML-элемент может содержать один или несколько атрибутов, записываемых в открывающем теге. Имена атрибутов отделяются от их значений символом =. Значение атрибута заключается в апострофы или в двойные кавычки. Если апостроф или двойные кавычки присутствуют в значении атрибута, то для обрамления используются те из них, которые не встречаются в значении.
<?xml version="1.0" encoding="utf-8" ?>
<planets>
<planet>
<name>Earth</name>
<moon>
<name>Moon</name>
<period units="days">27.321582</period>
</moon>
</planet>
<planet>
<name>Mars</name>
</planet> </planets>

Отметим, что при описании дерева XML-элементов используются следующие термины:
1. Текущий элемент (self);
2. Предок (ancestor) – любой элемент, содержащий текущий;
3. Корень (root) – предок всех элементов;
4. Родитель (parent) – непосредственный предок текущего элемента;
5. Потомок (descendant) – любой элемент, вложенный в текущий;
6. Ребёнок (child) – непосредственный потомок текущего элемента;
7. Сиблинги (siblings) – элементы, имеющие общего родителя.

JSON (JavaScript Object Notation) – простой текстовый формат обмена данными, удобный для чтения и записи как человеком, так и компьютером. Оноснован на подмножестве языка программирования JavaScript. JSON строится на двух структурах:
1. Объект – неупорядоченный набор пар ключ/значение. Объект начинается с открывающей фигурной скобки и заканчивается закрывающей фигурной скобкой. Каждое имя ключа сопровождается двоеточием, пары ключ/значение разделяются запятой.
2. Массив – упорядоченная коллекция значений. Массив начинается с открывающей квадратной скобки и заканчивается закрывающей квадратной скобкой. Значения разделены запятой. Значение может быть строкой, числом, true, false, null, объектом или массивом. Эти структуры могут быть вложенными.
{
"id": 12,
"name": "Petrov",
"marks": [10, 8, 7, 9]
}
XPath (XML Path Language) — язык запросов к элементам XML-документа. Разработан для организации доступа к частям документа XML в файлах. XPath призван реализовать навигацию по DOM в XML. В XPath используется компактный синтаксис, отличный от принятого в XML. XML имеет древовидную структуру. В документе всегда имеется корневой элемент (инструкция <?xml version="1.0"?> к дереву отношения не имеет). У элемента дерева всегда существуют потомки и предки, кроме корневого элемента, у которого предков нет, а также тупиковых элементов (листьев дерева), у которых нет потомков. Каждый элемент дерева находится на определенном уровне вложенности (далее — «уровень»). У элементов на одном уровне бывают предыдущие и следующие элементы.
Это очень похоже на организацию каталогов в файловой системе, и строки
XPath, фактически, — пути к «файлам» — элементам.
Пример
XPath-путь /html/body/*/span[@class] (полный синтаксис имеет
вид /child::html/child::body/child::*/child::span[attribute::class])

Ключевые элементы и концепции WPF
Windows Presentation Foundation (WPF) – это технология для построения клиентских приложений Windows, являющаяся частью платформы .NET. WPF разработана как альтернатива технологии Windows Forms. Ниже перечислены основные особенности технологии WPF.
1. Собственные методы построения и рендеринга элементов. В Windows Forms классы для элементов управления делегируют функции отображения системным библиотекам, таким как user32.dll. В WPF любой элемент
управления полностью строится (рисуется) самой WPF. Для аппаратного ускорения рендеринга применяется технология DirectX.
2. Независимость от разрешения устройства вывода. Для указания размеров в WPF используется собственная единица измерения, равная 1/96 дюйма. Кроме этого, технология WPF ориентирована на использование не пиксельных, а векторных примитивов.
3. Декларативный пользовательский интерфейс. В WPF визуальное содержимое окна можно полностью описать на языке XAML. Это язык разметки, основанный на XML. Применение XAML является предпочтительным, но не обязательным – приложения WPF можно создавать, используя только код.
4. Веб-подобная модель компоновки. WPF поддерживает гибкий визуальный поток, размещающий элементы управления на основе их содержимого.
5. Стили и шаблоны. Стили стандартизируют форматирование и позволяют повторно использовать его по всему приложению. Шаблоны дают возможность изменить способ отображения любых элементов управления, даже таких основополагающих, как кнопки или поля ввода.
6. Анимация. В WPF анимация – неотъемлемая часть программного каркаса. Анимация определяется декларативными дескрипторами, и WPF запускает её в действие автоматически.
7. Приложения на основе страниц. В WPF можно строить приложения с кнопками навигации, которые позволяют перемещаться по коллекции страниц.
Visual Studio выполняет компиляцию проекта, созданного по шаблону WPF, в два этапа. Вначале для каждого файла XAML генерируется два файла, сохраняемых в подкаталогах obj\Debug или obj\Release (в зависимости от
цели компиляции):
1. файл с расширением *.baml (BAML-файл) – двоичное представление XAML-файла, внедряемое в сборку в виде ресурса;
2. файл с расширением *.g.cs – разделяемый класс, который соответствует XAML-описанию. Этот класс содержит поля для всех именованных элементов XAML и реализацию метода InitializeComponent(), загружающего BAML-данные из ресурсов сборки. Кроме этого, класс содержит метод, подключающий все обработчики событий. На втором этапе сгенерированные файлы компилируются вместе с исходными файлами C# в единую сборку.