android - 12 - data types
DESCRIPTION
Small talk about XML and JSONTRANSCRIPT
Форматы хранения данных
Олег Годовых
XML
eXtensible Markup Language — расширяемый язык разметки<?xml version="1.0" encoding="UTF-8"?><addresses>
<address><name>Pupkin</name><city>Novosibirsk</city><street>Demakova</street><phone type=’mobile’>+79139130000</phone><documents>
<document type=’driving permit’>9045798749</document></documents>
</address><address>
<name>Losev</name><phone type=’home’>+73834913400</phone><documents>
<document type=’passport’>3451231231</document><document type=’driving permit’>43568749</document>
</documents></address>
</addresses>
2 Форматы хранения данных
XML
Плюсы:I Поддерживает Unicode.I Имеет строго заданныйсинтаксис.
I Стандартизован W3C.I Платформонезависим.I Есть язык преобразованияXSLT (можно, например,сделать из XML валидныйHTML).
Минусы:I Синтаксис XML избыточен.I Размер существеннобольше, чем у другихформатов (JSON, YAML).
I Неоднозначностьмоделирования.
I Нет поддержки типовданных.
3 Форматы хранения данных
JSONJavaScript Object Notation — текстовый формат обменаданными, основанный на JavaScript.{
"addresses": [{
"name": "Pupkin","city": "Novosibirsk","street": "Demakova","phones": {
"mobile": "+79139130000"},"documents": {
"driving permit": "123DP"}
},{
"name": "Losev","phones": {
"home": "+73834913400"},"documents": {
"passport": "3451231231","driving permit": "43568749"
}}]
}
4 Форматы хранения данных
JSON
Плюсы:I Поддерживает Unicode.I Лаконичен.I Удобен для работы сJavaScript (хипстерскиебэкенды на Node.js).
I Более удобочитаем.I Большая часть бэкендовотдаёт контент именно вJSON.
Минусы:I Менее распространён какформат хранения.
I Выгрузка офисныхформатов зачастуювозможна только в XML.
I Нет средствпреобразования,встроенных в формат.
I Меньшестандартизованныхсредств (таких, как XMLSchema, XPath, и т. д.).
5 Форматы хранения данных
DOM-парсер
Document Object Model — это не зависящий от платформы иязыка интерфейс, позволяющий программам получить доступ ксодержимому XML-документов, а также изменять содержимое,структуру и оформление таких документов.
I В памяти строится полное дерево, представляющеедокумент.
I Если документ «битый» — прочитать не удастся.I Можно выполнять различные запросы по структуре (XPath)— //phone[@type=’mobile’]/text() выведет всеномера мобильных из документа в начале презентации.
6 Форматы хранения данных
SAX-парсер
SAX (англ. «Simple API for XML») — способ последовательногочтения/записи XML-файлов (существуют аналоги и для JSON).
I Push-парсер — мы обрабатываем события вида «началоэлемента», «начало атрибута».
I Требуют фиксированного количества памяти для своейработы.
I Не позволяют изменять содержимое документа.I Валидируют документ по ходу чтения.I Можно прочесть часть «испорченного» документа.I Обычно быстрее, чем DOM-парсеры.
7 Форматы хранения данных
StAX-парсер
StAX (англ. «Streaming API for XML») — способпоследовательного чтения/записи XML-файлов (существуютаналоги и для JSON)
I Pull-парсер — мы не обрабатываем события, приходящиеот парсера, а сами инициируем обработку, вытягиваятокены.
I Нам предоставляется курсор, с которым мы можемперемещаться по токенам документа.
I В Android нет самого StAX, но есть аналог — XmlPullParser.
8 Форматы хранения данных
Фреймворки
I Позволяют делать парсинг автоматически, не задумываясьо деталях.
I Можно просто подавать класс с соответствующимименованием полей.
I Можно аннотациями задавать, что и каксериализовать/десериализовать.
I Могут возникнуть проблемы с «плохим» файлом или спреобразованием структуры.
I Разные фреймворки позволяют применять разные методыдля обхождения разных «подводных камней».
I В основном они базируются на существующих DOM-(изредка Stream-) парсерах.
9 Форматы хранения данных
Полезные ссылки
I http://www.ibm.com/developerworks/ru/library/x-android/
I http://www.ibm.com/developerworks/ru/library/x-andbene1/index.html
I http://simple.sourceforge.net/I http://code.google.com/p/google-gson/I http://wiki.fasterxml.com/JacksonHomeI http://android-arsenal.com
10 Форматы хранения данных