XBUP - Specifikace: Úroveň 0Tento dokument je součástí dokumentace projektu eXtensible Binary Universal Protocol. Obsahuje specifikaci 0. úrovně protokolu.
1. Popis
2. Kódování čísel
2.1. Schéma UBNumber
2.2. Kódování UBNatural
2.3. Kódování UBENatural
3. Organizace dat
3.1. Hlavička proudu
3.2. Blok
4. Zpracování dokumentu
4.1. Správná utvořenost
4.2. Rozhraní parseru
Specifikace úrovně 0 popisuje způsob, jakým jsou data kódovány v protokolu XBUP. Je definováno základní kódování přirozených čísel a základní stromová struktura dat. Dále je popsán způsob, jakým se mají data standardně zpracovávat.
Detailnější popis a argumentaci zvoleného řešení můžete nalézt v sekci vývoj protokolu.
Protokol XBUP používá ve svých základních strukturách kódování LRUB/SLRUB. Jedná se o kódování umožňující zakódovat libovolné přirozené či celé číslo, obecně i další typy hodnot, do formy posloupnosti bitů proměnlivé délky. Tato specifikace obsahuje pouze variantu organizovanou na osmice bitů (bajty).
Více o použitém kódování a jeho vývoji se můžete dozvědět v sekci vývoj kódování.
Základem je kódovací schéma UBNumber ve variantě LRUB (rekurzivní unárně binární kódování s lineárním nárůstem délky). Toto schéma definuje, jakým způsobem je kódována hodnota přirozeného čísla včetně 0, s požadavkem na deterministickou interpretaci kódu i výsledné hodnoty. Hodnota je v tomto základním tvaru interpretována jako hodnota UBNatural.
Kód se skládá ze dvou částí, a to z hodnoty určující délku (Length) a binárně kódované hodnoty (Value). Hodnota délky je až do hodnoty 7 kódována unárně a binární část má takovou délku kódu v bajtech odpovídající hodnotě value a navíc využívá i nevyužité bity prvního bajtu kódu. Unární kód je ve variantě posloupnosti bitů hodnoty 1 zakonečená bitem hodnoty 0. Binárním kódu představují jednotlivé bity cifry s dvojkovým exponentem. Používá se řazení big endian, kdy větší cifry čísla předcházejí nižším. Následující hodnoty Length jsou tvořeny prefixem 0xFF následovaným hodnotou v kódování SLRUB.
Základní kódování UBNatural interpretuje binární část jako přirozené číslo (zahrnuje hodnotu 0), přičemž každá hodnota má právě jeden kód. Toho se dosahuje přičítáním hodnot závislých na hodnotě a délce hodnoty Length. Ke každé hodnotě se přičte 1 + maximální hodnota pro předchozí hodnotu Length.
Kódování UBENatural je rozšířením předcházejícího kódování o konstantu pro kladné nekonečno. Ta je vložena mezi hodnoty 0x7E a 0x7F.
Data jsou v protokolu XBUP organizována do stromové struktury. Jedná se o posloupnost atributů a obecných bloků dat.
Více o organizaci dat a jeho vývoji se můžete dozvědět v sekci bloková struktura.
Základní strukturu proudu zobrazuje následující tabulka:
| Hlavička souboru | ||||
| ||||
| Rozšiřující oblast |
Pro vývojové účely byla hlavička souboru stanovena následovně:
Byte - ByteSize = FEh (odpovídá hodnotě 7 v unární kódování)
UBNatural - ProtocolVersion = 00h
DWord - ProtocolSignature = 584200XXh ("XB" + verze)
Verze protokolu 0 je rezervována pro vývojovou fázi protokolu a pro případy, kdy není verze známa.
Pokud se v souboru nevyskytují žádná další data, pak se soubor nazývá prázdný dokument. V opačném případě jsou data zpracována jako jeden blok a data za tímto blokem jsou označena jako rozšiřující oblast.
Blok se skládá z atributové části a datové části. Na začátku bloku je hodnota:
UBNatural - AttribPartSize
Tato hodnota určuje délku atributové části. Délka je počítána jako AttributPartSize*(ByteSize+1) bitů. Pokud je rovna 0 jedná se o terminální blok a datová část bloku je prázdná. V opačném případě následuje posloupnost hodnot v kódování UBNumber s první hodnotou:
UBENatural - DataPartSize
Tato hodnota určuje délku datové části bloku. Pokud je délka této hodnoty rovna hodnotě AttribPartSize, jedná se o datový blok. V opačném případě se blok nazývá standardní, přičemž přesněji se jedná o blok listový pro hodnotu DataPartSize rovnu 0, nebo o blok uzlový v případě nenulové hodnoty. Následuje datová část bloku o délce DataPartSize. Pokud je hodnota DataPartSize rovna ∞ (nekonečno), pak je datová část potenciálně nekonečná, nebo ukončena terminálním blokem. Datová část je v případě standardního bloku interpretována jako posloupnost bloků.
Následující části popisují důležité aspekty, které je třeba zohlednit při zpracování souboru.
Více o zpracování souborů se můžete dočíst v části podpůrné knihovny.
Proud je správně utvořen (well-formed) pokud platí následující podmínky. Podmínky jsou kontrolovány po zpracování dané položky. Je uveden název vyjímky a popis kdy nastává.
Na úrovni 0 vrací parser následující 4 typy položek:
Homepage: http://xbup.sf.net
License: GNU Free Documentation License (FDL)
Latest update: 2008-04-05