[XBUP]XBUP - Specifikace: Úroveň 0

Úvod

Tento dokument je součástí dokumentace projektu eXtensible Binary Universal Protocol. Obsahuje specifikaci 0. úrovně protokolu.

O úroveň výše

Obsah

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

1. Popis

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.

2. Kódování čísel

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í.

2.1. Schéma UBNumber

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.

2.2. Kódování UBNatural

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.

2.3. Kódování UBENatural

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.

3. Organizace dat

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
Atributová část
Datová část
Atributová část podbloku
Datová část podbloku
...
...
Rozšiřující oblast

3.1. Hlavička proudu

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.

3.2. Blok

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ů.

4. Zpracování dokumentu

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.

4.1. Správná utvořenost

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á.

4.2. Rozhraní parseru

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