SlideShare a Scribd company logo
1 of 30
Download to read offline
Сериализация и язык YAML
Тодуа Антон Романович
Научный руководитель:
к.ф.-м.н. Большакова Е.И.
Москва, 2015
Сериализация (Serialization)
• Процесс преобразования состояния
структур данных (объектов) в форму
удовлетворяющую условиям:
– Можно записать в файл или передать по сети
– Впоследствии возможно однозначно
восстановить исходные структуры данных
(объекты)
• Обратный процесс – десериализация
• Синоним – маршалинг (marshaling)
2 / 30
Подходы к сериализации
• Сериализация в текстовый формат
• Сериализация в бинарный формат
• Комбинированный подход
48:this is a simple exampe
of netstring data format,
Пример комбинированного подхода – формат netstrings
3 / 30
Бинарная cериализация
• Достоинства:
– Относительная простота реализации
– Высокая скорость работы
• Особенности (недостатки?):
– Зависимость от архитектуры (размеры типов,
порядок байт и т.п.)
– Формат не понятен человеку (not human-
readable)
4 / 30
Текстовая сериализация
• Достоинства:
– Не зависит от архитектуры
– Формат понятен человеку (human-readable)
• Особенности (недостатки?):
– Требует более сложной спецификации формата
сериализованных данных в сравнении с
бинарной сериализацией
– Скорость работы ниже, чем при использовании
бинарной сериализации
5 / 30
Пример: сериализация в XML формат
настроек проекта Visual Studio
<!-- часть содержимого файла ParallerSort.vcxproj -->
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>
C:Program FilesMicrosoft SDKsMPILibx86;
%(AdditionalLibraryDirectories)
</AdditionalLibraryDirectories>
<AdditionalDependencies>
msmpi.lib;%(AdditionalDependencies)
</AdditionalDependencies>
</Link>
6 / 30
Пример: сериализация в JSON-формат
при обмене сообщениями vk.com
[
{"ts":"1326233553","events":[]},
{"ts":"1862829303","events":
["23<!>new<!>13476570<!>200217<!>17<!>hello<!>0<!>18622"]
},
{"ts":"1384274065","events":[]}
]
{
"ts":1679655678,
"updates": [
[4,200217,17,13476570,1445805418," ... ","hello",{}],
[80,1,0],[7,13476570,200216]
]
}
Сообщения посылаемые с помощью технологии AJAX:
7 / 30
Пример: бинарная сериализация
неоконченной игры в пасьянс паук
Сеанс игры сохраняется в файл в
двоичном формате, структура
которого была определена
автором программы
8 / 30
Пример: сериализация в двоичный формат
массива строк
typedef std::vector<std::string> CData;
CData test;
test.push_back( "anton" );
test.push_back( "todua" );
test.push_back( "524" );
void Serialize( std::ostream& stream, const CData& data )
{
std::size_t size;
size = data.size();
stream.write( (char*)&size, sizeof( std::size_t ) );
for( std::size_t i = 0; i < data.size(); i++ ) {
size = data[i].length();
stream.write( (char*)&size, sizeof( std::size_t ) );
stream.write( data[i].data(), data[i].length() );
}
} 9 / 30
Пример: сериализация в YAML-формат
настроек сервиса travis-ci.org
# Файл .travis.yml
language: cpp
compiler:
- gcc
- clang
script:
"sh make.sh"
branches:
only:
- master
10 / 30
Проблемы сериализации
• Поддержка версий данных
– Необходимо учитывать
возможность изменения
обрабатываемых структур данных
• Сериализация графа
– При обходе графа в глубину,
необходимо уметь ссылаться на
уже сериализованные узлы
A
B
C
D
11 / 30
Некоторые форматы сериализации
https://en.wikipedia.org/wiki/Comparison_of_data_serialization_formats
12 / 30
Язык YAML
• YAML (первоначально Yet Another Markup
Language, сейчас – Ain't Markup Language)
• Использует кодировку Unicode
• Минималистский синтаксис
• Поддерживается современными языками
программирования
• Поддерживается современными текстовыми
редакторами
• JSON является строгим подмножеством YAML 1.2
13 / 30
YAML 1.2
The design goals for YAML are, in decreasing priority:
1. YAML is easily readable by humans.
2. YAML data is portable between programming
languages.
3. YAML matches the native data structures of agile
languages.
4. YAML has a consistent model to support generic tools.
5. YAML supports one-pass processing.
6. YAML is expressive and extensible.
7. YAML is easy to implement and use
http://www.yaml.org/spec/1.2/spec.html
14 / 30
Представление списков
- item 1
- item 2
- item 3
- item 4
YAML
YAML, JSON ["item 1", "item 2", "item 3", "item 4"]
XML
<nodes>
<node>item 1</node>
<node>item 2</node>
<node>item 3</node>
<node>item 4</node>
</nodes>
- [5, 3, 0, 0, 7, 0, 0, 0, 0]
- [6, 0, 0, 1, 9, 5, 0, 0, 0]
- [0, 9, 8, 0, 0, 0, 0, 6, 0]
- [8, 0, 0, 0, 6, 0, 0, 0, 3]
- [4, 0, 0, 8, 0, 3, 0, 0, 1]
- [7, 0, 0, 0, 2, 0, 0, 0, 6]
- [0, 6, 0, 0, 0, 0, 2, 8, 0]
- [0, 0, 0, 4, 1, 9, 0, 0, 5]
- [0, 0, 0, 0, 8, 0, 0, 7, 9]
Пример – представление судоку:
15 / 30
Представление пар ключ-значение
name : Anton
age : 21
sex : male
YAML
YAML, JSON {"name" : "Anton", age : 21, "sex" : "male"}
XML
<name>Anton</name>
<age>21</age>
<sex>male</sex>
524: # студенты 524 группы
- {"name" : "Anton", age : 21, "sex" : "male"}
- {"name" : "Alexandra", age : 21, "sex" : "female"}
- {"name" : "Nikita", age : 21, "sex" : "male"}
515: # студенты 515 группы
- {"name" : "Anton", age : 22, "sex" : "male"}
- {"name" : "Yury", age : 22, "sex" : "male"}
Пример – представление списка студентов:
16 / 30
Представление строк
YAML, JSON
"У лукоморья дуб
зелёный;nЗлатая цепь на
дубе том:nИ днём и ночью
кот учёныйnВсё ходит по
цепи кругом;n"
two hussar : >
В 1800-х годах, в те времена, когда не было еще ни железных,
ни шоссейных дорог, ни газового, ни стеаринового света, ни
пружинных низких диванов, ни мебели без лаку, ни
разочарованных юношей со стеклышками, …
Lurkmore : |
У лукоморья дуб зелёный;
Златая цепь на дубе том:
И днём и ночью кот учёный
Всё ходит по цепи кругом;
YAML
Сохранение переносов строк:
Замена переносов строк на пробелы:
17 / 30
Отступы
• Используются только пробелы
• Задают вложенность примитивов
• Элементы из общей коллекции
имеют одинаковый отступ
error-example:
··- 1
·- 2 # ошибка
··- 3
# Запись JSON-строки "··onentwon·three"
# 2 задаёт размер отступа
# - означает, что в конце текста нет символа перевода строки
space-example: |2-
····one
··two
···three
18 / 30
Структура YAML файла
• Файл может состоять из нескольких потоков
• Поток может содержать 0 и более документов
• Маркер начала документа ‘---’
• Маркер конца потока ‘...’
# лог файл (один поток)
---
# запись 1
data : 2015-10-25 21:47:53
event : open diploma
---
# запись 2
data : 2015-10-25 21:47:58
event : close diploma
# несколько потоков
# поток 1
message: "hello"
---
message: "world"
...
# поток 2
message: "hello, world!"
...
19 / 30
Директивы
• Начинаются с ‘%’
• Располагаются до начала документа (‘---’)
• На данный момент определено две директивы:
# задаёт версию
%YAML 1.2
---
# документ 1
---
# документ 2
...
%YAML 1.2
---
# документ 3
Директива YAML: Директива TAG:
# определяет синоним тэга
%TAG !py! tag:yaml.org,2002:python/object:
---
# объект класса Class
- !py!__main__.Class
# аналогичное определение
- !!python/object:__main__.Class
# аналогичное определение
- !<tag:yaml.org,2002:python/object:__main__.Class>
20 / 30
Стандартные тэги для коллекций
• Неупорядоченная последовательность пар ключ-значение без
повторений !!map :
example: !!map { key1: val1, key2: val2, key3: val3 }
• Упорядоченная последовательность пар ключ-значение без
повторений !!omap :
example: !!omap [ one: 1, two: 2, three : 3 ]
• Упорядоченная последовательность пар ключ-значение c
возможными повторами !!pairs :
ex: !!pairs [ meeting: with team, meeting: with boss ]
• Неупорядоченное множество значений !!set :
ex: !!set { Boston Red Sox, Detroit Tigers }
• Массив значений (индексация с 0) !!seq :
ex: !!seq [ elem0, elem1, elem2, elem3, elem4 ]
21 / 30
Anchor и Reference
• Позволяют ссылаться на уже описанные объекты
• Anchor – задание имени описываемого объекта
• Reference – использование описываемого объекта
universities:
- &msu Lomonosov Moscow State University
- &bmstu Bauman Moscow State Technical University
students:
- name: Anton Todua
university: *msu # reference
- name: Ekaterina Scherbakova
university: *bmstu # reference
22 / 30
Стандартные тэги для скалярных типов
• Последовательность байт !!binary
• Логическое значение !!bool
• Число с плавающей точкой !!float
• Целое число !!int
• Пустое значение !!null
• Unicode строка !!str
• Дата !!timestamp :
- &CENTER { x: 1, y: 2 }
- &LEFT { x: 0, y: 2 }
- &BIG { r: 10 }
- &SMALL { r: 1 }
# Эквивалентные объекты:
- x: 1
y: 2
r: 10
label: center/big
- << : *CENTER
r: 10
label: center/big
- << : [*CENTER, *BIG]
label: center/big
- << : [*BIG, *LEFT, *SMALL]
x: 1
label: center/big
# canonical
- 2001-12-15T02:59:43.1Z
# valid iso8601
- 2001-12-14t21:59:43.10-05:00
# space separated:
- 2001-12-14 21:59:43.10 -5
# no time zone (Z)
- 2001-12-15 2:59:43.10
#date (00:00:00Z)
- 2002-12-14
• Слияние !!merge (‘<<’):
23 / 30
Пример использования anchor и reference
(let* ((x '(3 4 5))
(y (cons 2 x))
(z (cons 1 y))))
1
2
3
4
5
x
y
z
x: &x
car: 3
cdr:
car: 4
cdr:
car: 5
cdr: nil
y: &y
car: 2
cdr: *x
z:
car: 1
cdr: *y
Lisp-список:
Представление в памяти:
Представление в YAML:
24 / 30
Обработка YAML файла
• Логически чтение и запись файла в YAML формате
можно разделить на 3 этапа:
25 / 30
Поддержка YAML текстовыми редакторами
26 / 30
Поддержка YAML языками программирования
• C++ (https://github.com/jbeder/yaml-cpp)
• C (http://pyyaml.org/wiki/LibYAML)
• C#/.NET (http://yaml-net-parser.sourceforge.net)
• Haskell (http://hackage.haskell.org/package/YamlReference)
• JavaScript (http://nodeca.github.io/js-yaml)
• Python (http://pyyaml.org)
• PHP (https://code.google.com/p/php-yaml)
• Ruby (https://github.com/tenderlove/psych)
27 / 30
Библиотека yaml-cpp
#include <yaml-cpp/yaml.h> // Подключение библиотеки.
YAML::Node db = YAML::LoadFile( "students.yml" );
YAML::Node students = db["students"];
for( auto i = students.begin(); i != students.end(); ++i ) {
std::cout << (*i)["name"] << " from "
<< (*i)["university"] << std::endl;
}
universities:
- &msu Lomonosov Moscow State University
- &bmstu Bauman Moscow State Technical University
students:
- { name: Anton Todua, university: *msu }
- { name: Ekaterina Scherbakova, university: *bmstu }
28 / 30
Полезные ссылки
• https://en.wikipedia.org/wiki/Serialization
• https://en.wikipedia.org/wiki/JSON
• https://en.wikipedia.org/wiki/Comparison_of_data_
serialization_formats
• https://en.wikipedia.org/wiki/YAML
• http://www.yaml.org/
• http://www.yaml.org/spec/1.2/spec.html
• http://pyyaml.org/wiki/LibYAML
• https://github.com/jbeder/yaml-cpp
29 / 30
Спасибо за внимание!

More Related Content

Viewers also liked

Классификация корпусов
Классификация корпусовКлассификация корпусов
Классификация корпусовArtem Lukanin
 
Проектирование корпусов
Проектирование корпусовПроектирование корпусов
Проектирование корпусовArtem Lukanin
 
Sketch engine presentation
Sketch engine presentationSketch engine presentation
Sketch engine presentationiwan_rg
 

Viewers also liked (20)

Багдатов Методы автоматического выявления плагиата в текстах компьютерных про...
Багдатов Методы автоматического выявления плагиата в текстах компьютерных про...Багдатов Методы автоматического выявления плагиата в текстах компьютерных про...
Багдатов Методы автоматического выявления плагиата в текстах компьютерных про...
 
Можарова Тематические модели: учет сходства между униграммами и биграммами.
Можарова Тематические модели: учет сходства между униграммами и биграммами.Можарова Тематические модели: учет сходства между униграммами и биграммами.
Можарова Тематические модели: учет сходства между униграммами и биграммами.
 
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстовСмолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
 
Лукьяненко. Извлечение коллокаций из текста
Лукьяненко. Извлечение коллокаций из текстаЛукьяненко. Извлечение коллокаций из текста
Лукьяненко. Извлечение коллокаций из текста
 
Савостин. Системы и методы научного поиска и мониторинга
Савостин. Системы и методы научного поиска и мониторингаСавостин. Системы и методы научного поиска и мониторинга
Савостин. Системы и методы научного поиска и мониторинга
 
Савкуев. Построение формального описания фотографий на основе контекстно-собы...
Савкуев. Построение формального описания фотографий на основе контекстно-собы...Савкуев. Построение формального описания фотографий на основе контекстно-собы...
Савкуев. Построение формального описания фотографий на основе контекстно-собы...
 
Сапин. Интеллектуальные агенты и обучение с подкреплением
Сапин. Интеллектуальные агенты и обучение с подкреплениемСапин. Интеллектуальные агенты и обучение с подкреплением
Сапин. Интеллектуальные агенты и обучение с подкреплением
 
Можарова. Автоматическое извлечение именованных сущностей методами машинного ...
Можарова. Автоматическое извлечение именованных сущностей методами машинного ...Можарова. Автоматическое извлечение именованных сущностей методами машинного ...
Можарова. Автоматическое извлечение именованных сущностей методами машинного ...
 
Рой. Аспектный анализ тональности отзывов
Рой. Аспектный анализ тональности отзывов Рой. Аспектный анализ тональности отзывов
Рой. Аспектный анализ тональности отзывов
 
Мадорский. Извлечение тематически сгруппированных ключевых терминов из тексто...
Мадорский. Извлечение тематически сгруппированных ключевых терминов из тексто...Мадорский. Извлечение тематически сгруппированных ключевых терминов из тексто...
Мадорский. Извлечение тематически сгруппированных ключевых терминов из тексто...
 
Баев. Поиск шаблонов и машинное обучение для демографических событий (Pattern...
Баев. Поиск шаблонов и машинное обучение для демографических событий (Pattern...Баев. Поиск шаблонов и машинное обучение для демографических событий (Pattern...
Баев. Поиск шаблонов и машинное обучение для демографических событий (Pattern...
 
Муромцев. Методы анализа социальных графов и поиска сообществ
Муромцев. Методы анализа социальных графов и поиска сообществМуромцев. Методы анализа социальных графов и поиска сообществ
Муромцев. Методы анализа социальных графов и поиска сообществ
 
Классификация корпусов
Классификация корпусовКлассификация корпусов
Классификация корпусов
 
Котиков Простые методы выделения ключевых слов и построения рефератов
Котиков Простые методы выделения ключевых слов и построения рефератовКотиков Простые методы выделения ключевых слов и построения рефератов
Котиков Простые методы выделения ключевых слов и построения рефератов
 
Панфилов. Корпусы текстов и принципы их создания
Панфилов. Корпусы текстов и принципы их созданияПанфилов. Корпусы текстов и принципы их создания
Панфилов. Корпусы текстов и принципы их создания
 
Муромцев. Обзор библиографических менеджеров
Муромцев. Обзор библиографических менеджеровМуромцев. Обзор библиографических менеджеров
Муромцев. Обзор библиографических менеджеров
 
куликов Sketch engine ord
куликов Sketch engine ordкуликов Sketch engine ord
куликов Sketch engine ord
 
Проектирование корпусов
Проектирование корпусовПроектирование корпусов
Проектирование корпусов
 
Языковые корпуса
Языковые корпусаЯзыковые корпуса
Языковые корпуса
 
Sketch engine presentation
Sketch engine presentationSketch engine presentation
Sketch engine presentation
 

Similar to Тодуа. Сериализация и язык YAML

CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машинRoman Dvornov
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыPositive Development User Group
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
!Predictive analytics part_3
!Predictive analytics part_3!Predictive analytics part_3
!Predictive analytics part_3Vladimir Krylov
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianMikhail Davydov
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Ontico
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.Igor Shkulipa
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHighLoad2009
 
Верстка_Лекция_3
Верстка_Лекция_3Верстка_Лекция_3
Верстка_Лекция_3itc73
 
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Ontico
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Yandex
 
Data Destribution service OMG standart
Data Destribution service OMG standart Data Destribution service OMG standart
Data Destribution service OMG standart Sergei Seleznev
 
Web осень 2012 лекция 8
Web осень 2012 лекция 8Web осень 2012 лекция 8
Web осень 2012 лекция 8Technopark
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БДAndrew Sovtsov
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 
Present forms&css
Present forms&cssPresent forms&css
Present forms&cssitc73
 

Similar to Тодуа. Сериализация и язык YAML (20)

CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
!Predictive analytics part_3
!Predictive analytics part_3!Predictive analytics part_3
!Predictive analytics part_3
 
Шаблонизация
ШаблонизацияШаблонизация
Шаблонизация
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
 
Верстка_Лекция_3
Верстка_Лекция_3Верстка_Лекция_3
Верстка_Лекция_3
 
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
 
Data Destribution service OMG standart
Data Destribution service OMG standart Data Destribution service OMG standart
Data Destribution service OMG standart
 
Web осень 2012 лекция 8
Web осень 2012 лекция 8Web осень 2012 лекция 8
Web осень 2012 лекция 8
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БД
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Present forms&css
Present forms&cssPresent forms&css
Present forms&css
 

More from Спецсеминар "Искусственный Интеллект" кафедры АЯ ВМК МГУ

More from Спецсеминар "Искусственный Интеллект" кафедры АЯ ВМК МГУ (10)

Иванов. Модель Belief-Desire-Intention (BDI)
Иванов. Модель Belief-Desire-Intention (BDI)Иванов. Модель Belief-Desire-Intention (BDI)
Иванов. Модель Belief-Desire-Intention (BDI)
 
Тодуа. Методы разработки интерпретатора языка Рефал-2
Тодуа. Методы разработки интерпретатора языка Рефал-2Тодуа. Методы разработки интерпретатора языка Рефал-2
Тодуа. Методы разработки интерпретатора языка Рефал-2
 
смирнов Data mining
смирнов Data miningсмирнов Data mining
смирнов Data mining
 
рогова обзор средств поддержки обучения программированию
рогова обзор средств поддержки обучения программированиюрогова обзор средств поддержки обучения программированию
рогова обзор средств поддержки обучения программированию
 
курышев рекомендательные системы
курышев рекомендательные системыкурышев рекомендательные системы
курышев рекомендательные системы
 
кулагин поиск близких по смыслу языковых выражений
кулагин поиск близких по смыслу языковых выраженийкулагин поиск близких по смыслу языковых выражений
кулагин поиск близких по смыслу языковых выражений
 
иванов анализ речевых команд
иванов анализ речевых командиванов анализ речевых команд
иванов анализ речевых команд
 
борисенкова методы визуализации для анализа зависящих от времени данных
борисенкова методы визуализации для анализа зависящих от времени данныхборисенкова методы визуализации для анализа зависящих от времени данных
борисенкова методы визуализации для анализа зависящих от времени данных
 
бицоев сравнение систем анализа тональности на русском языке
бицоев сравнение систем анализа тональности на русском языкебицоев сравнение систем анализа тональности на русском языке
бицоев сравнение систем анализа тональности на русском языке
 
презентация (Quasi synonyms, вмк 25.10.2011)
презентация (Quasi synonyms, вмк 25.10.2011)презентация (Quasi synonyms, вмк 25.10.2011)
презентация (Quasi synonyms, вмк 25.10.2011)
 

Тодуа. Сериализация и язык YAML

  • 1. Сериализация и язык YAML Тодуа Антон Романович Научный руководитель: к.ф.-м.н. Большакова Е.И. Москва, 2015
  • 2. Сериализация (Serialization) • Процесс преобразования состояния структур данных (объектов) в форму удовлетворяющую условиям: – Можно записать в файл или передать по сети – Впоследствии возможно однозначно восстановить исходные структуры данных (объекты) • Обратный процесс – десериализация • Синоним – маршалинг (marshaling) 2 / 30
  • 3. Подходы к сериализации • Сериализация в текстовый формат • Сериализация в бинарный формат • Комбинированный подход 48:this is a simple exampe of netstring data format, Пример комбинированного подхода – формат netstrings 3 / 30
  • 4. Бинарная cериализация • Достоинства: – Относительная простота реализации – Высокая скорость работы • Особенности (недостатки?): – Зависимость от архитектуры (размеры типов, порядок байт и т.п.) – Формат не понятен человеку (not human- readable) 4 / 30
  • 5. Текстовая сериализация • Достоинства: – Не зависит от архитектуры – Формат понятен человеку (human-readable) • Особенности (недостатки?): – Требует более сложной спецификации формата сериализованных данных в сравнении с бинарной сериализацией – Скорость работы ниже, чем при использовании бинарной сериализации 5 / 30
  • 6. Пример: сериализация в XML формат настроек проекта Visual Studio <!-- часть содержимого файла ParallerSort.vcxproj --> <Link> <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories> C:Program FilesMicrosoft SDKsMPILibx86; %(AdditionalLibraryDirectories) </AdditionalLibraryDirectories> <AdditionalDependencies> msmpi.lib;%(AdditionalDependencies) </AdditionalDependencies> </Link> 6 / 30
  • 7. Пример: сериализация в JSON-формат при обмене сообщениями vk.com [ {"ts":"1326233553","events":[]}, {"ts":"1862829303","events": ["23<!>new<!>13476570<!>200217<!>17<!>hello<!>0<!>18622"] }, {"ts":"1384274065","events":[]} ] { "ts":1679655678, "updates": [ [4,200217,17,13476570,1445805418," ... ","hello",{}], [80,1,0],[7,13476570,200216] ] } Сообщения посылаемые с помощью технологии AJAX: 7 / 30
  • 8. Пример: бинарная сериализация неоконченной игры в пасьянс паук Сеанс игры сохраняется в файл в двоичном формате, структура которого была определена автором программы 8 / 30
  • 9. Пример: сериализация в двоичный формат массива строк typedef std::vector<std::string> CData; CData test; test.push_back( "anton" ); test.push_back( "todua" ); test.push_back( "524" ); void Serialize( std::ostream& stream, const CData& data ) { std::size_t size; size = data.size(); stream.write( (char*)&size, sizeof( std::size_t ) ); for( std::size_t i = 0; i < data.size(); i++ ) { size = data[i].length(); stream.write( (char*)&size, sizeof( std::size_t ) ); stream.write( data[i].data(), data[i].length() ); } } 9 / 30
  • 10. Пример: сериализация в YAML-формат настроек сервиса travis-ci.org # Файл .travis.yml language: cpp compiler: - gcc - clang script: "sh make.sh" branches: only: - master 10 / 30
  • 11. Проблемы сериализации • Поддержка версий данных – Необходимо учитывать возможность изменения обрабатываемых структур данных • Сериализация графа – При обходе графа в глубину, необходимо уметь ссылаться на уже сериализованные узлы A B C D 11 / 30
  • 13. Язык YAML • YAML (первоначально Yet Another Markup Language, сейчас – Ain't Markup Language) • Использует кодировку Unicode • Минималистский синтаксис • Поддерживается современными языками программирования • Поддерживается современными текстовыми редакторами • JSON является строгим подмножеством YAML 1.2 13 / 30
  • 14. YAML 1.2 The design goals for YAML are, in decreasing priority: 1. YAML is easily readable by humans. 2. YAML data is portable between programming languages. 3. YAML matches the native data structures of agile languages. 4. YAML has a consistent model to support generic tools. 5. YAML supports one-pass processing. 6. YAML is expressive and extensible. 7. YAML is easy to implement and use http://www.yaml.org/spec/1.2/spec.html 14 / 30
  • 15. Представление списков - item 1 - item 2 - item 3 - item 4 YAML YAML, JSON ["item 1", "item 2", "item 3", "item 4"] XML <nodes> <node>item 1</node> <node>item 2</node> <node>item 3</node> <node>item 4</node> </nodes> - [5, 3, 0, 0, 7, 0, 0, 0, 0] - [6, 0, 0, 1, 9, 5, 0, 0, 0] - [0, 9, 8, 0, 0, 0, 0, 6, 0] - [8, 0, 0, 0, 6, 0, 0, 0, 3] - [4, 0, 0, 8, 0, 3, 0, 0, 1] - [7, 0, 0, 0, 2, 0, 0, 0, 6] - [0, 6, 0, 0, 0, 0, 2, 8, 0] - [0, 0, 0, 4, 1, 9, 0, 0, 5] - [0, 0, 0, 0, 8, 0, 0, 7, 9] Пример – представление судоку: 15 / 30
  • 16. Представление пар ключ-значение name : Anton age : 21 sex : male YAML YAML, JSON {"name" : "Anton", age : 21, "sex" : "male"} XML <name>Anton</name> <age>21</age> <sex>male</sex> 524: # студенты 524 группы - {"name" : "Anton", age : 21, "sex" : "male"} - {"name" : "Alexandra", age : 21, "sex" : "female"} - {"name" : "Nikita", age : 21, "sex" : "male"} 515: # студенты 515 группы - {"name" : "Anton", age : 22, "sex" : "male"} - {"name" : "Yury", age : 22, "sex" : "male"} Пример – представление списка студентов: 16 / 30
  • 17. Представление строк YAML, JSON "У лукоморья дуб зелёный;nЗлатая цепь на дубе том:nИ днём и ночью кот учёныйnВсё ходит по цепи кругом;n" two hussar : > В 1800-х годах, в те времена, когда не было еще ни железных, ни шоссейных дорог, ни газового, ни стеаринового света, ни пружинных низких диванов, ни мебели без лаку, ни разочарованных юношей со стеклышками, … Lurkmore : | У лукоморья дуб зелёный; Златая цепь на дубе том: И днём и ночью кот учёный Всё ходит по цепи кругом; YAML Сохранение переносов строк: Замена переносов строк на пробелы: 17 / 30
  • 18. Отступы • Используются только пробелы • Задают вложенность примитивов • Элементы из общей коллекции имеют одинаковый отступ error-example: ··- 1 ·- 2 # ошибка ··- 3 # Запись JSON-строки "··onentwon·three" # 2 задаёт размер отступа # - означает, что в конце текста нет символа перевода строки space-example: |2- ····one ··two ···three 18 / 30
  • 19. Структура YAML файла • Файл может состоять из нескольких потоков • Поток может содержать 0 и более документов • Маркер начала документа ‘---’ • Маркер конца потока ‘...’ # лог файл (один поток) --- # запись 1 data : 2015-10-25 21:47:53 event : open diploma --- # запись 2 data : 2015-10-25 21:47:58 event : close diploma # несколько потоков # поток 1 message: "hello" --- message: "world" ... # поток 2 message: "hello, world!" ... 19 / 30
  • 20. Директивы • Начинаются с ‘%’ • Располагаются до начала документа (‘---’) • На данный момент определено две директивы: # задаёт версию %YAML 1.2 --- # документ 1 --- # документ 2 ... %YAML 1.2 --- # документ 3 Директива YAML: Директива TAG: # определяет синоним тэга %TAG !py! tag:yaml.org,2002:python/object: --- # объект класса Class - !py!__main__.Class # аналогичное определение - !!python/object:__main__.Class # аналогичное определение - !<tag:yaml.org,2002:python/object:__main__.Class> 20 / 30
  • 21. Стандартные тэги для коллекций • Неупорядоченная последовательность пар ключ-значение без повторений !!map : example: !!map { key1: val1, key2: val2, key3: val3 } • Упорядоченная последовательность пар ключ-значение без повторений !!omap : example: !!omap [ one: 1, two: 2, three : 3 ] • Упорядоченная последовательность пар ключ-значение c возможными повторами !!pairs : ex: !!pairs [ meeting: with team, meeting: with boss ] • Неупорядоченное множество значений !!set : ex: !!set { Boston Red Sox, Detroit Tigers } • Массив значений (индексация с 0) !!seq : ex: !!seq [ elem0, elem1, elem2, elem3, elem4 ] 21 / 30
  • 22. Anchor и Reference • Позволяют ссылаться на уже описанные объекты • Anchor – задание имени описываемого объекта • Reference – использование описываемого объекта universities: - &msu Lomonosov Moscow State University - &bmstu Bauman Moscow State Technical University students: - name: Anton Todua university: *msu # reference - name: Ekaterina Scherbakova university: *bmstu # reference 22 / 30
  • 23. Стандартные тэги для скалярных типов • Последовательность байт !!binary • Логическое значение !!bool • Число с плавающей точкой !!float • Целое число !!int • Пустое значение !!null • Unicode строка !!str • Дата !!timestamp : - &CENTER { x: 1, y: 2 } - &LEFT { x: 0, y: 2 } - &BIG { r: 10 } - &SMALL { r: 1 } # Эквивалентные объекты: - x: 1 y: 2 r: 10 label: center/big - << : *CENTER r: 10 label: center/big - << : [*CENTER, *BIG] label: center/big - << : [*BIG, *LEFT, *SMALL] x: 1 label: center/big # canonical - 2001-12-15T02:59:43.1Z # valid iso8601 - 2001-12-14t21:59:43.10-05:00 # space separated: - 2001-12-14 21:59:43.10 -5 # no time zone (Z) - 2001-12-15 2:59:43.10 #date (00:00:00Z) - 2002-12-14 • Слияние !!merge (‘<<’): 23 / 30
  • 24. Пример использования anchor и reference (let* ((x '(3 4 5)) (y (cons 2 x)) (z (cons 1 y)))) 1 2 3 4 5 x y z x: &x car: 3 cdr: car: 4 cdr: car: 5 cdr: nil y: &y car: 2 cdr: *x z: car: 1 cdr: *y Lisp-список: Представление в памяти: Представление в YAML: 24 / 30
  • 25. Обработка YAML файла • Логически чтение и запись файла в YAML формате можно разделить на 3 этапа: 25 / 30
  • 26. Поддержка YAML текстовыми редакторами 26 / 30
  • 27. Поддержка YAML языками программирования • C++ (https://github.com/jbeder/yaml-cpp) • C (http://pyyaml.org/wiki/LibYAML) • C#/.NET (http://yaml-net-parser.sourceforge.net) • Haskell (http://hackage.haskell.org/package/YamlReference) • JavaScript (http://nodeca.github.io/js-yaml) • Python (http://pyyaml.org) • PHP (https://code.google.com/p/php-yaml) • Ruby (https://github.com/tenderlove/psych) 27 / 30
  • 28. Библиотека yaml-cpp #include <yaml-cpp/yaml.h> // Подключение библиотеки. YAML::Node db = YAML::LoadFile( "students.yml" ); YAML::Node students = db["students"]; for( auto i = students.begin(); i != students.end(); ++i ) { std::cout << (*i)["name"] << " from " << (*i)["university"] << std::endl; } universities: - &msu Lomonosov Moscow State University - &bmstu Bauman Moscow State Technical University students: - { name: Anton Todua, university: *msu } - { name: Ekaterina Scherbakova, university: *bmstu } 28 / 30
  • 29. Полезные ссылки • https://en.wikipedia.org/wiki/Serialization • https://en.wikipedia.org/wiki/JSON • https://en.wikipedia.org/wiki/Comparison_of_data_ serialization_formats • https://en.wikipedia.org/wiki/YAML • http://www.yaml.org/ • http://www.yaml.org/spec/1.2/spec.html • http://pyyaml.org/wiki/LibYAML • https://github.com/jbeder/yaml-cpp 29 / 30