「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[WebAPI]] --[[その他、開発の色々]] * 目次 [#f9b64062] #contents *概要 [#f489cac1] -CBORとは、 --オブジェクトをバイナリ・シリアライズする仕様 --[[JSON]]データモデルが基礎となる([[JSON]]互換) >で、シーボルと読む。 -一言でいうと、[[JSON]]のバイナリ版 **特徴 [#d3e464aa] -IoT, etc.向け -[[COSE]]メッセージのベース -[[FIDO2]]の[[CTAP>FIDO2#g0465d1e]]でも使用される。 **経緯 [#f08d910b] MessagePackの後継ということらしく、~ MessagePackを置き換える可能性がある。 -MessagePackの後継ということらしく、MessagePackを置き換える可能性がある。 -[[少なくともcbor-rubyはMessagePackソースで開始されました。 >https://scrapbox.io/nwtgck/CBOR%E3%81%AFMessagePack%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%91%E3%82%A4%E3%82%A2%E3%81%95%E3%82%8C%E3%81%9F%E3%81%A8%E6%9B%B8%E3%81%8B%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E6%89%80]] --[[CBOR – Concise Binary Object Representation | Hacker News>https://news.ycombinator.com/item?id=20603378]] -標準がCBORをいろいろなところで使い始めているので、~ CBOR vs MessagePackはCBORの勝利ということで落ち着きそう(という話がある)。 --https://twitter.com/__gfx__/status/1214023599633289217 *詳細 [#i12d62d3] **Format [#q6bb5072] ***型 [#v4669658] [[Major Type>#j2944dc7]]が1byteで定義 ***値 [#kcec16e6] その後、0-n bytesで実際の値が定義 **型(Major Type) [#j2944dc7] -[[JSON]]と比べて型が多い。 -[[JSON]]は、数値型(int,float含む)、文字列型、真偽値、配列、オブジェクト、Null -CBORは、Major Typeと呼ばれ、0から7まで定義されている。 ***Major type 0 [#wc4d7439] -符号なし整数(unsigned integer) -uint8、uint16、uint32、uint64に分化されるbig-endian ***Major type 1 [#p7fcf3bf] -マイナス数値(negative integer) -uint8、uint16、uint32、uint64に分化されるbig-endian ***Major type 2 [#j8306937] -バイト文字列(byte string) -長さは無制限(文字列バイトの指定 or break文字指定) ***Major type 3 [#m63daeaf] -テキスト文字列(text string) -UTF-8文字列、長さは無制限(文字列バイトの指定 or break文字指定) ***Major type 4 [#x4c7b292] -配列(array) -長さは無制限(項目数の指定 or break指定) ***Major type 5 [#h9f2282c] -マップ(map, JSONだとobject) -キー・値のペアを列挙、長さは無制限(ペア数の指定 or break指定) ***Major type 6 [#z402f041] -拡張用のオプション領域、次のものを現状定義 -日時型、多倍長整数、固定小数点、base64、正規表現、MIME message ***Major type 7 [#jf823c85] -浮動小数点(floating-point numbers)、 -float16、float32、float64、真偽値(Boolean)、Null、Undefinedも定義 **CDDL [#u619feca] -CDDL : Concise data definition language -CBORのスキーマ定義の標準 --CBOR表記規則(CBORを表現する表記法) --[[JSON]]データ構造の記述にも使用できる。 ***目的 [#d8ba3d83] -(G1)CBORデータ構造の全体的な構造の明瞭な記述を提供する。 -(G2)自由度をCBORデータ形式で表現する柔軟性。 -(G3)必要に応じてフォーマットの選択を制限する可能性がある[形式]。 -(G4)共通のCBORデータ型および構造を表現できること。 -(G5)人と機械が読み書き可能であること。 -(G6)データフォーマット準拠の自動チェック。 -(G7)さらなる処理のためにCBORデータから特定の要素を抽出する。 ***記載ルール [#n221eb83] *参考 [#e9206b0f] -CBOR - Wikipedia~ https://en.wikipedia.org/wiki/CBOR -CBOR — Concise Binary Object Representation | Overview~ http://cbor.io/ --Overview --Specification --Implementations ---[[PeterO.Cbor>#bb10c850]] ---[[Dahomey.Cbor>#re7b65a5]] --Tools ---CBOR playground~ http://cbor.me/ -CDDLの紹介|株式会社レピダム~ https://lepidum.co.jp/blog/2020-03-09/cddl/ -[[[CWT入門その1] CBORによるオブジェクトのバイナリ表現 - Qiita>CWT#n011a08f]] **RFC [#cb615961] -RFC 7049 - Concise Binary Object Representation (CBOR)~ https://tools.ietf.org/html/rfc7049 -ietf-cbor-cddl - Concise data definition language (CDDL):~ a notational convention to express CBOR and JSON data structures~ https://tools.ietf.org/html/draft-ietf-cbor-cddl **内部リンク [#b30a84ff] ***[[JSON]] [#lf5dd4ad] ***[[CWT]] [#e7b47f5f] ***[[COSE]] [#nea67b7c] **ライブラリ [#s0e1d500] ***[[PeterO.Cbor]] [#bb10c850] ***[[Dahomey.Cbor]] [#re7b65a5] ---- Tags: [[:IT国際標準]], [[:プログラミング]], [[:通信技術]]