xml, json (lecture 11 – xml, json)
TRANSCRIPT
XML, JSONAndroid
Константин Золотов
eXtensible Markup Language 1 <?xml version="1.0" encoding="UTF-8"?> 2 <addresses> 3 <address> 4 <name>Pupkin</name> 5 <city>Novosibirsk</city> 6 <street>Demakova</street> 7 <phone type="mobile">+79139130000</phone> 8 <documents> 9 <document type="driving permit">9045798749</document> 10 </documents> 11 </address> 12 <address> 13 <name>Losev</name> 14 <phone type="home">+73834913400</phone> 15 <documents>16 <document type="passport">3451231231</document> 17 <document type="driving permit">43568749</document> 18 </documents> 19 </address> 20 </addresses>
XML namespace
Позволяют относить элементы и атрибуты с одинаковыми именами к разным группамNamespace обязательно является URIВсе элементы внутри пространства уникальны
XML namespace 1 <root> 2 <h:table xmlns:h="http://www.w3.org/TR/html4/"> 3 <h:tr> 4 <h:td>Apples</h:td> 5 <h:td>Bananas</h:td> 6 </h:tr> 7 </h:table> 8 9 <f:table xmlns:f="http://www.w3schools.com/furniture"> 10 <f:name>African Coffee Table</f:name> 11 <f:width>80</f:width> 12 <f:length>120</f:length> 13 </f:table> 14 </root>
Плюсы и минусы XMLПоддерживает UnicodeИмеет строго заданныйсинтаксисСтандартизирован W3CПлатформонезависимСуществует язык запросов кэлементам документа XPathСуществует языкпреобразования XSLT (eXtensibleStylesheet LanguageTransformations), позволяющийтрансформировать XML в HTML
Избыточный синтаксисСущественно больший размер,нежели JSON, YAMLНеоднозначностьмоделирования (атрибуты vsэлементы)Нет поддержки типов данных
JavaScript Object Notation
Является подмножеством YAMLПредставлен как набор пар ключ-значениеПоддерживает несколько типов данных: строка, литерал (true/false/null), число, объект({}),массив([])
JavaScript Object Notation 1 {"addresses": [ 2 { 3 "name": "Pupkin", 4 "city": "Novosibirsk", 5 "street": "Demakova", 6 "phones": { 7 "mobile": "+79139130000" 8 }, 9 "documents": { 10 "driving permit": "123DP" 11 } 12 }, 13 { 14 "name": "Losev", 15 "phones": { 16 "home": "+73834913400" 17 }, 18 "documents": { 19 "passport": "3451231231", 20 "driving permit": "43568749" 21 } 22 } 23 ]}
Плюсы и минусы JSONПоддерживает UnicodeЛакониченНативная поддержка вJacaScriptУдобочитаемБольшинство сервисовиспользуют именно дляпередачи данных JSON
Менее распространен какформат храненияВыгрузка офисных форматовзачастую возможна только вXMLНет средств преобразованиявстроенных в форматМеньше стандартизированныхсредств (таких, как XPath, XMLSchema)
DOM, DOM-парсер
Document Object Model — это не зависящий от платформы и языка интерфейс, позволяющийпрограммам получить доступ к содержимому XML-документов, а также изменять содержимое,
структуру и оформление таких документов. В памяти строится полное дерево,представляющее документ. Если документ «битый» — прочитать не удастся. Можно
выполнять различные запросы по структуре (XPath) — //phone[@type=’mobile’]/text() выведетвсе номера мобильных из документа в начале презентации.
SAX-парсер
SAX (англ. «Simple API for XML») — способ последовательного чтения/записи XML-файлов(существуют аналоги и для JSON). Push-парсер — мы обрабатываем события вида «начало
элемента», «начало атрибута». Требуют фиксированного количества памяти для своей работы.Не позволяют изменять содержимое документа. Валидируют документ по ходу чтения. Можно
прочесть часть «испорченного» документа. Обычно быстрее, чем DOM-парсеры
StAX-парсер
StAX (англ. «Streaming API for XML») — способ последовательного чтения/записи XML-файлов(существуют аналоги и для JSON) Pull-парсер — мы не обрабатываем события, приходящие отпарсера, а сами инициируем обработку, вытягивая токены. Нам предоставляется курсор, скоторым мы можем перемещаться по токенам документа. В Android нет самого StAX, но есть
аналог — XmlPullParser
Фреймворки
Позволяют делать парсинг автоматически, не задумываясь о деталях.Можно просто подавать класс с соответствующим именованием полей.Можно аннотациями задавать, что и как сериализовать/десериализовать.Могут возникнуть проблемы с «плохим» файлом или с преобразованием структуры.Разные фреймворки позволяют применять разные методы для обхождения разных«подводных камней».В основном они базируются на существующих DOM- (изредка Stream-) парсерах
Полезные ссылки
W3C XML TutorialJSON docsSimple XMLGsonJacksonXmlPullParser