WBXML
WBXML (WAP Binary XML) — компактний бінарний варіант XML. Розроблений Open Mobile Alliance для передачі через бездротові з'єднання з низькою швидкістю. В даний момент WBXML розглядається Консорціумом Всесвітньої павутини для включення в сімейство стандартів WAP. Поточна версія 1.3.
WBXML зараз використовується в SyncML, WML, Wireless Village, OMA DRM, програмуванні телефонів через бездротовий зв'язок.
Структура
Для кодування чисел використовується мультибайтне подання. Останній байт починається з біта 0, решта — з 1. Інші 7 біт вже кодують позитивне ціле число.
Файл починається з байта з номером версії WBXML (версія 1.3 кодується як 0x03
). Далі йде тип документа у вигляді посилання на рядок з ім'ям (в таблиці рядків) або коду для добре відомих типів, наприклад, WML. Наступне число вказує на кодування, коди якого зазначені в «IANA Charset MIB» (RFC 3808). У кінці заголовка йде таблиця рядків (спочатку довжина, а потім вміст). Рядки в ній розділені символом NULL
. Для більшої компактності рядка у назві тегу, атрибутах і вмісті можна вказати просто як зміщення в цій таблиці.
Якщо формат XML-документа заздалегідь відомий, то назву тегів і атрибутів можна позначити заздалегідь оговореним байтом. Щоб використовувати більше 256 імен, вони розділені на сторінки, які можна міняти за допомогою спеціальної команди: байт SWITCH_PAGE
і байт з номером сторінки.
Перед кожним тегом йде байт, який вказує чи має він атрибути і вміст (LITERAL
, LITERAL_A
, LITERAL_C
або LITERAL_CA
) і зміщення в таблиці рядків. Або він може бути зазначений у вигляді байта, де перший біт вказує на наявність атрибутів, другий — вмісту, а інші кодують заздалегідь домовлений код тегу. Атрибути вказані далі як обумовленого байт або LITERAL
та посилання на таблицю рядків. Далі рядок з його значенням і байт END
. Рядки, як у значенні атрибуту, так і у вмісті тегу можуть бути або байтом STR_T
та зміщенням в таблиці рядків, або STR_I
і рядком з NULL
на кінці. Вміст тегу закривається байтом END
.
Тег може містити й бінарні дані (наприклад, зображення або стислу інформацію), які кодуються у вигляді спеціального байта OPAQUE
, довжини даних і самого вмісту.