Jump to content

КБОР

КБОР
Расширение имени файла
.cbor
Тип интернет-СМИ
приложение/cbor
Тип формата Обмен данными
Расширено с Пакет сообщений
Стандартный RFC   8949
Открытый формат ? Да
Веб-сайт cбор .что

Краткое представление двоичных объектов ( CBOR ) — это формат сериализации двоичных данных , основанный на JSON, авторами которого являются Карстен Борман и Пол Хоффман. [а] Как и JSON, он позволяет передавать объекты данных, содержащие пары имя-значение , но в более краткой форме. Это увеличивает скорость обработки и передачи за счет удобочитаемости для человека . Это определено в IETF РФК   8949 . [2]

Помимо прочего, это рекомендуемый уровень сериализации данных для набора протоколов CoAP Интернета вещей. [3] [ не удалось пройти проверку ] и формат данных, на котором COSE основаны сообщения . Он также используется в протоколе клиент-аутентификатор (CTAP) в рамках проекта FIDO2. [4]

CBOR был вдохновлен MessagePack , который разработал и продвигал Садаюки Фурухаси. CBOR расширил MessagePack, в частности, позволив отличать текстовые строки от байтовых строк, что было реализовано в 2013 году в MessagePack. [5] [6]

Спецификация кодировки CBOR

[ редактировать ]

Данные, закодированные CBOR, рассматриваются как поток элементов данных. Каждый элемент данных состоит из байта заголовка, содержащего 3-битный тип и 5-битный короткий счетчик. За этим следует необязательный расширенный счетчик (если короткий счетчик находится в диапазоне 24–27) и необязательная полезная нагрузка.

Для типов 0, 1 и 7 полезная нагрузка отсутствует; счетчик — это значение. Для типов 2 (байтовая строка) и 3 (текстовая строка) счетчиком является длина полезных данных. Для типов 4 (массив) и 5 ​​(карта) счетчиком является количество элементов (пар) в полезных данных. Для типа 6 (тег) полезная нагрузка представляет собой один элемент, а счетчик представляет собой числовой номер тега, который описывает вложенный элемент.

Данные ЦБОР Элемент данных 1 Элемент данных 2 Элемент данных 3...
Количество байтов 1 байт (заголовок элемента данных CBOR) Переменная Переменная 1 байт (заголовок элемента данных CBOR) Переменная Переменная и т. д...
Структура Основной тип Короткий счет Расширенный счет (необязательно) Полезная нагрузка данных (необязательно) Основной тип Короткий счет Расширенный счет (необязательно) Полезная нагрузка данных (необязательно) и т. д...
Количество битов 3 бита 5 бит 8 бит × переменная 8 бит × переменная 3 бита 5 бит 8 бит × переменная 8 бит × переменная и т. д..

Обработка основных типов и количества в каждом элементе данных

[ редактировать ]

Поведение каждого элемента данных определяется основным типом и количеством. Основной тип используется для выбора основного поведения или типа каждого элемента данных.

5-битное поле короткого счета напрямую кодирует значения от 0 до 23. Короткие значения 24–27 указывают, что значение счетчика находится в следующем 8, 16, 32 или 64-битном расширенном поле счета. Значения 28–30 не назначены и не должны использоваться.

Типы делятся на «атомарные» типы 0–1 и 6–7, для которых поле счетчика кодирует значение напрямую, и неатомарные типы 2–5, для которых поле счетчика кодирует размер следующего поля полезной нагрузки.

Короткий счет 31 используется с неатомными типами 2–5 для обозначения неопределенной длины; полезная нагрузка представляет собой следующие элементы до байта маркера «разрыва», равного 255 (тип = 7, короткий счетчик = 31). Короткий счет 31 не допускается с другими атомными типами 0, 1 или 6.

Тип 6 (тег) необычен тем, что его поле счетчика напрямую кодирует значение, но также имеет поле полезной нагрузки (которое всегда состоит из одного элемента).

Расширенные счетчики и все многобайтовые значения кодируются в сетевом (обратном порядке байтов) .

Кодировка поля элемента данных CBOR

[ редактировать ]

Кодирование крошечных полей

[ редактировать ]
Количество байтов 1 байт (заголовок элемента данных CBOR)
Структура Основной тип Короткий счет (значение)
Количество битов 3 бита 5 бит
Атом 0–1, 7 0–23
Маркер разрыва 7 31

Кодирование коротких полей

[ редактировать ]
Количество байтов 1 байт (заголовок элемента данных CBOR) Переменная
Структура Основной тип Короткий счет Ценить
Количество битов 3 бита 5 бит 8 бит × переменная
Атом 0–1, 7 24–27 8, 16, 32 или 64 бита
Нить 2–3 0–23 количество × 8 бит
Предметы 4–5 0–23 количество × предметов/пар
Ярлык 6 0–23 один предмет

Кодирование длинных полей

[ редактировать ]
Количество байтов 1 байт (заголовок элемента данных CBOR) 1, 2, 4 или 8 байт Переменная
Структура Основной тип Короткий счет (24–27) Расширенный счет (длина полезной нагрузки) Ценить
Количество битов 3 бита 5 бит 8, 16, 32 или 64 бита 8 бит × переменная
Нить 2–3 24–27 До 2 64 −1 количество × 8 бит
Предметы 4–5 24–27 До 2 64 −1 количество × предметов/пар
Ярлык 6 24–27 Тег, до 2 64 −1 один предмет

Целые числа (типы 0 и 1)

[ редактировать ]

Для целых чисел поле счетчика представляет собой значение; полезной нагрузки нет. Тип 0 кодирует положительные или беззнаковые целые числа со значениями до 2. 64 −1. Тип 1 кодирует отрицательные целые числа со значением −1-count для значений от −2. 64 до −1.

Строки (типы 2 и 3)

[ редактировать ]

Типы 2 и 3 имеют поле счетчика, которое кодирует длину полезной нагрузки в байтах. Тип 2 представляет собой неструктурированную строку байтов. Тип 3 — это текстовая строка UTF-8 .

Короткое число 31 указывает на строку неопределенной длины. За этим следует ноль или более строк определенной длины того же типа, завершающихся байтом-маркером «разрыва». Значение элемента представляет собой объединение значений вложенных элементов. Элементы другого типа или вложенные строки неопределенной длины не допускаются. Текстовые строки должны иметь правильный формат; Символы UTF-8 не могут быть разделены по элементам.

Массивы и карты (типы 4 и 5)

[ редактировать ]

Тип 4 имеет поле счетчика, кодирующее количество следующих элементов, за которыми следует такое же количество элементов. Не обязательно все предметы должны быть одного типа; в некоторых языках программирования это называется «кортеж», а не «массив».

Альтернативно может использоваться кодирование неопределенной длины с коротким счетчиком 31. Это продолжается до тех пор, пока не появится байт маркера разрыва 255. Поскольку вложенные элементы также могут использовать неопределенную кодировку, синтаксический анализатор должен соединить маркеры разрыва с соответствующими байтами заголовка неопределенной длины.

Тип 5 аналогичен, но кодирует карту (также называемую словарем или ассоциативным массивом) пар ключ/значение. В этом случае счетчик кодирует количество пар элементов. Если используется кодировка неопределенной длины, перед байтом маркера «разрыва» должно быть четное количество элементов.

Семантический тег (тип 6)

[ редактировать ]

Семантический тег — это еще один атомарный тип, для которого счетчик является значением, но он также имеет полезную нагрузку (один следующий элемент), и оба они считаются одним элементом, например, в массиве или на карте.

Номер тега предоставляет дополнительную информацию о типе следующего элемента, помимо той, которую может предоставить 3-битный основной тип. Например, тег 1 указывает, что следующее число является значением времени Unix . Тег 2 указывает, что следующая строка байтов кодирует беззнаковое большое число . Тег 32 указывает, что следующая текстовая строка является URI , как определено в РФК   3986 . RFC   8746 определяет теги 64–87 для кодирования однородных массивов целых чисел фиксированного размера или значений с плавающей запятой в виде байтовых строк.

Тег 55799 обозначает «следуют данные CBOR». Это семантический запрет , но позволяет использовать соответствующие байты тегов. d9 d9 f7 быть добавленным к файлу CBOR, не влияя на его значение. Эти байты можно использовать как « магическое число », чтобы отличить начало данных CBOR.

Значения тегов «все единицы» 0xffff, 0xffffffff и 0xffffffffffffffff зарезервированы для обозначения отсутствия тега в библиотеке декодирования CBOR; они никогда не должны появляться в потоке данных.

Псевдоэлемент маркера разрыва не может быть полезной нагрузкой тега.

Специальный/поплавковый (тип 7)

[ редактировать ]

Этот основной тип используется для кодирования различных специальных значений, которые не попадают в другие категории. Он следует тем же правилам размера кодировки, что и другие атомарные типы (0, 1 и 6), но поле счетчика интерпретируется по-другому.

Значения 20–23 используются для кодирования специальных значений false, true, null и undefined . Значения 0–19 в настоящее время не определены.

Короткий счетчик 24 указывает на то, что за ним следует 1-байтовый расширенный счетчик, который можно использовать в будущем для кодирования дополнительных специальных значений. Чтобы упростить декодирование, значения 0–31 можно не кодировать в этой форме. Ни одно из значений 32–255 в настоящее время не определено.

Короткие значения 25, 26 или 27 указывают на то, что следующее расширенное поле счетчика должно интерпретироваться как (с обратным порядком байтов) 16-, 32- или 64-битное значение IEEE с плавающей запятой . Это те же размеры, что и расширенный счетчик, но интерпретируются по-другому. В частности, для всех остальных основных типов 2-байтовый расширенный счетчик 0x1234 и 4-байтовый расширенный счетчик 0x00001234 абсолютно эквивалентны. Это не относится к значениям с плавающей запятой.

Короткие счета 28–30 зарезервированы, как и для всех остальных основных типов.

Короткое число 31 кодирует специальный маркер «разрыва», который завершает кодирование неопределенной длины. Это связано с использованием других основных типов, где короткий счетчик 31 начинает кодирование неопределенной длины, но отличается от него. Это не элемент и может не отображаться в полезных данных определенной длины.

Регистрация семантического тега

[ редактировать ]

IANA создало реестр тегов CBOR, расположенный по адресу https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml . Регистрации должны содержать шаблон, описанный ниже. [7]

Тип семантического тега Диапазон Шаблон
Элемент данных Семантика (краткая форма) Контактное лицо Описание семантики (URL)
Стандартные действия 0–23 Необходимый Необходимый
Требуется спецификация 24–255 Необходимый Необходимый
В порядке очереди обслужено 256–18446744073709551615 Необходимый Необходимый Необходимый Описание не является обязательным.

URL-адрес может указывать на Интернет-черновик или веб-страницу.

Реализации

[ редактировать ]
Имя Основной автор Язык Лицензия Источник Примечания
cбор Кёнхван Квон С С https://github.com/mononn/cbor
ККБОР Лоуренс Лундблейд С С https://github.com/laurencelundblade/QCBOR
cbor-js Патрик Ганстерер JavaScript С https://github.com/paroga/cbor-js
узел-cbor Джо Хильдебранд JavaScript С https://github.com/hildjj/node-cbor
CBOEncode Павел Гульбин PHP PHP https://github.com/2tvenom/CBOREncode
cbor-php Флоран Морселли PHP С https://github.com/Spomky-Labs/cbor-php
fxamacker/cbor Фэй Амакер Идти С https://github.com/fxamacker/cbor Fuzz-тестирование, RFC 8949, теги CBOR, базовое детерминированное кодирование, float64/32/16, обнаружение повторяющихся ключей карты, теги API-кодирования/json + toarray и keyasint и т. д.
cбор Павел Гульбин Идти ВТФПЛ https://github.com/2tvenom/cbor
cbor_go Брайан Олсон Идти АПЛ 2.0 https://github.com/brianolson/cbor_go
go-кодек Угоржи Нвоке Идти С https://godoc.org/github.com/ugorji/go/codec Также обрабатывает JSON, MsgPack и BinC.
го-cбор Сатоши Конно Идти АПЛ 2.0 https://github.com/cybergarage/go-cbor
serde_cbor Пюфиш Ржавчина Массачусетский технологический институт или APL 2.0 https://github.com/pyfisch/cbor
cbor-кодек Торальф Виттнер Ржавчина МПЛ 2.0 https://twittner.gitlab.io/cbor-codec/cbor/
SwiftCBOR greg@ неумолимая.технология Быстрый Отменить лицензию https://github.com/unrelentingtech/SwiftCBOR
CBOR.jl Саурав Сачидананд Юлия С https://github.com/saurvs/CBOR.jl
Цитата-CBOR Ким Альвефур Два С https://www.zash.se/lua-cbor.html
org.conman.cbor Шон Коннер Два ГНУ ЛГПЛ -3 https://github.com/spc476/CBOR
cbor_py Брайан Олсон Питон АПЛ 2.0 https://github.com/brianolson/cbor_py
Флинн Фриц Конрад Гримпен Питон С https://github.com/fritz0705/flynn
cbor2 Алекс Грёнхольм Питон С https://github.com/agronholm/cbor2
CBOR::Бесплатно Фелипе Гаспер Перл GNU GPL и художественное оформление https://metacpan.org/pod/CBOR::Free
КБОР::ПП Фелипе Гаспер Перл GNU GPL и художественное оформление https://metacpan.org/pod/CBOR::PP
КБОР::XS Марк Леманн Перл GNU GPL -3 https://metacpan.org/pod/CBOR::XS
cbor-рубин Садаюки Фурухаси

Карстен Борман

Руби АПЛ 2.0 https://github.com/cabo/cbor-ruby
libcbor-Ruby Павел Кальвода Руби С https://github.com/PJK/libcbor-ruby Привязка к libcbor.
cbor-erlang Jihyun Yu Эрланг BSD -3-пункт https://github.com/yjh0502/cbor-erlang
Эксбор Карстен Борман Эликсир не указан,

спроси у автора

https://github.com/cabo/excbor
маленький медвежонок Джеймс Вудятт OCaml BSD -2-пункт https://bitbucket.org/jhw/orsetto/ также обрабатывает другие форматы ( JSON , Base32 , Base64 , URI , TAI64 )
cбор янгрек OCaml С https://github.com/ygrek/ocaml-cbor
КБОР Р. Кайл Мерфи Хаскелл ГНУ ЛГПЛ -3 https://github.com/orclev/CBOR
долг Джо Хильдебранд

Фридель Зигельмайер

JavaScript С https://github.com/dignifiedquire/borc Форк node-cbor.
Borc-refs Джо Хильдебранд

Фридель Зигельмайер

Сандро Хоук

JavaScript С https://github.com/sandhawke/borc-refs Вилка борца.
КБОР Питер Оксил С# Программное обеспечение, являющееся общественным достоянием https://github.com/peteroupc/CBOR Также обрабатывает JSON.
Дагомея.Cbor Микаэль Катанзарити С# МОЯ лицензия https://github.com/dahomey-technologies/Dahomey.Cbor
Джексон Тату Салоранта Ява АПЛ-2.0 https://github.com/FasterXML/jackson-dataformats-binary/tree/master/cbor Также обрабатывает другие форматы.
Cbor-Java Константин Рэк Ява АПЛ-2.0 https://github.com/c-rack/cbor-java
Джейкоб Дж. В. Янссен Ява АПЛ-2.0 https://github.com/jawi/jacob
Котлинкс.сериализация JetBrains Котлин АПЛ-2.0 https://github.com/Kotlin/kotlinx.serialization Поддерживает кроссплатформенность
cn-cbor Джо Хильдебранд

Карстен Борман

С С https://github.com/cabo/cn-cbor
cbor-cpp Станислав Овсянников С++ АПЛ-2.0 https://github.com/naphaso/cbor-cpp
cppbor Дэвид Прис С++ БСД https://github.com/rantydave/cppbor Использует варианты C++17.
libcbor Павел Кальвода С С https://github.com/PJK/libcbor
Тиникбор Интел С С https://github.com/01org/tinycbor
НаноКБОР Коэн Зандберг С Общественное достояние https://github.com/bergzand/NanoCBOR Используется РИОТ-ОС
cbor-e Андрей Пенечко Д Повышение 1.0 https://github.com/MrSmith33/cbor-d
clj-cbor Грег Лук Кложур Отменить лицензию https://github.com/greglook/clj-cbor
JSON для современного C++ Нильс Ломанн С++ С https://github.com/nlohmann/json Также обрабатывает JSON и MsgPack.
Бора-Бора Кристоф Энгельберт Ява АПЛ-2.0 https://github.com/noctarius/borabora
lua-Краткая сериализация Франсуа Перрад Два С https://fperrad.frama.io/lua-ConciseSerialization/
фланн Фриц Конрад Гримпен

Sokolov Yura

Питон С https://pypi.python.org/pypi/flunn
cbor-qt Антон Дутов С++ Общественное достояние https://github.com/anton-dutov/cbor-qt
QCborValue Qt-проект С++ ГНУ ЛГПЛ https://doc.qt.io/qt-5/qcborvalue.html Часть платформы Qt , начиная с версии 5.12.
cbor11 Якоб Вармос Бентцен С++ Общественное достояние https://github.com/jakobvarmose/cbor11
cborcpp Алексей Некипелов С++ С https://github.com/nekipelov/cborcpp
Золотая Рыбка Винсент Ласко С++ С https://github.com/OneNoteDev/GoldFish
Библиотека-Arduino-Cbor Хуанхо Тара С++ АПЛ-2.0 https://github.com/jjtara/Library-Arduino-Cbor
cборг Дункан Куттс Хаскелл BSD -3-пункт https://github.com/well-typed/cborg
cбор Стив Хэмблетт Дарт С https://github.com/shamblett/cbor
бурильщик Матиас Дениц Скала МПЛ 2.0 https://github.com/sirthias/borer Также обрабатывает JSON.
ним_cbor Эмери Хемингуэй Nim С https://git.sr.ht/~ehmry/nim_cbor
циборий Натаниэль МакКаллум

Марк Беставрос

Команда Энаркс

Ржавчина Апач 2.0 https://github.com/enarx/ciborium
cбор Пауло Моура Логток Апач 2.0 https://github.com/LogtalkDotOrg/logtalk3/tree/master/library/cbor Часть дистрибутива Logtalk; также можно использовать из Пролога
System.Formats.Cbor Команда .NET С# С https://github.com/dotnet/runtime/blob/main/src/libraries/System.Formats.Cbor Часть .NET 5+
DelphiCBOR микерабат Дельфи Лицензия Апач 2.0 https://github.com/mikerabat/DelphiCBOR
Динамические данныеОбъекты Шон Сольберг Дельфи С https://github.com/SeanSolberg/DynamicDataObjects Также обрабатывает JSON, MsgPack, BSON, BinaryJData, CSV, DDO, EBML, ICS, ION, Smile и UBJSON.
хор Дэвид Шугар Зиг С https://github.com/r4gus/zbor
минибор Торальф Виттнер Ржавчина Лицензия на модель Blue Oak https://gitlab.com/twittner/minicbor Можно использовать без полной стандартной библиотеки Rust и, с некоторыми ограничениями, без динамического распределителя памяти.

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ CBOR не назван в честь Бормана, несмотря на то, что название формата по совпадению является его собственным сокращением. [1]
  1. ^ Борман, Карстен; Хоффман, Пол (28 июля 2013 г.). «Проектирование и обзор CBOR» (PDF) . Материалы IETF .
  2. ^ «CBOR — Краткое представление двоичных объектов | Обзор» .
  3. ^ «CoAP — протокол ограниченных приложений | Обзор» . Архивировано из оригинала 3 января 2017 г. Проверено 28 августа 2016 г.
  4. ^ «Проект ФИДО2» . Альянс ФИДО . Проверено 11 мая 2018 г.
  5. ^ «Обсуждение предстоящей спецификации MessagePack, которая добавит в протокол строковый тип» . Гитхаб . Проверено 4 января 2022 г.
  6. ^ Борман, Карстен; Хоффман, Пол Э. (декабрь 2020 г.). «RFC 8949: Краткое представление двоичных объектов (CBOR)» . IETF.
  7. ^ Борман, Карстен; Хоффман, Пол Э. (декабрь 2020 г.). «RFC 8949: Краткое представление двоичных объектов (CBOR)» .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0b95442ac7884e08825c152a96e27522__1718181300
URL1:https://arc.ask3.ru/arc/aa/0b/22/0b95442ac7884e08825c152a96e27522.html
Заголовок, (Title) документа по адресу, URL1:
CBOR - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)