Extensible Binary Meta Language
EBML (Extensible Binary Meta Language) je binární formát souboru. Byl inspirován formátem XML, ale na rozdíl od něj není textový, ale binární.
Použití
Formát EBML byl vytvořen v rámci projektu Matroska, za účelem ukládání tohoto multimediálního kontejneru do binárního souboru. Díky svému návrhu však není na tento účel omezen a je možné pomocí něj ukládat libovolná strukturovaná data. Pro práci s EBML v jazyce C++ nabízí vývojový tým Matroska knihovnu https://github.com/Matroska-Org/libebml.
Výhody a nevýhody
Výhody
- U různých verzí formátu, který je založen EBML, je možné zachovat zpětnou kompatibilitu
- Velikost binárních dat není omezená.
- Velikost polí pro data není konstantní, ale mění se dle potřeby, tudíž v dokumentu nezůstávají přebytečné prázdné znaky.
- Pro čtení ani zápis není nutné znát předem celkovou velikost, tudíž je možné zpracovávat jako datový proud.
Struktura
Obdobně jako XML, i EBML se skládá z elementů, a to povinně kořenového elementu a nepovinně dalších. Každý element se skládá ze tří částí: ID, Popis velikosti a poté samotná data.
ID
ID je číslo, které je kódováno v jednom až čtyřech bytech. Velikost je určena pozicí první jedničky v binárním zápisu, tj. ID bude vypadat takto (kde místo x je binárně zakódované číslo ID):
1xxx xxxx 01xx xxxx xxxx xxxx 001x xxxx xxxx xxxx xxxx xxxx 0001 xxxx xxxx xxxx xxxx xxxx xxxx xxxx
Popis velikosti
Popis velikosti je číslo, určující počet bytů dat, které daný element obsahuje. jeho hodnota je v rozmezí 1 až 256, což znamená, že data elementu mohou mít velikost od 1 bytu do zhruba 72000 terabytů. Popis velikosti je kódován obdobně jako ID:
1xxx xxxx 01xx xxxx xxxx xxxx ... 0000 0001 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
Data
Data jsou posloupnost bytů, o velikosti určené popisem velikosti, která není nijak interpretována formátem EBML, tj. formát již závisí pouze na tvůrci konkrétního souboru.