# XBUP - Projekt XBUP-XML

### Úvod

Tento dokument je součástí dokumentace projektu eXtensible Binary Universal Protocol. Obsahuje popis projektu pro vytvoření předpisu pro uložení XML dokumentu ve formátu XBUP.

O úroveň výše

### Obsah

1. Úvod
1.1. Motivace
1.2. Principy
2. Kódování XML dat
2.1. Hlavička dokumentu
2.2. Tag dokumentu
3. Související formáty
4. Výsledná specifikace formátu

### 1. Úvod

Cílem XBUP-XML je vytvořit sadu pravidel pro převod standardních XML dokumentů do binárního tvaru protokolu XBUP a případná zohlednění sémantického významu dokumentu.

### 1.1. Motivace

XML je textový formát pro reprezentaci obecně libovolný dat s popisem jednotlivých bloků pomocí slov nebo zkratek zvoleného jazyka. Textová reprezentace se značkovacími symboly však má některé nevýhody, především co se týká výkonu a velikosti. Proto se objevily snahy o vytvoření binární varianty XML, která by umožnila přenést kladné aspekty tohoto jazyka do binární podoby a přitom vyřešit ty negativní. Ačkoliv jsou cíle protokolu XBUP poněkud odlišné, přesto by mělo být možné jej vhodně využít i pro reprezentaci XML dokumentu v nějakém výhodnějším binárním tvaru.

### 1.2. Principy

Návrh předepisuje způsob, jakým reprezentovat jednotlivé textové položky XML se zachováním potřebné informace:

- Stromová struktura tagů
- Sekvence atributů tagů
- Názvy tagů, atributů
- Hodnoty atributů a textové uzly
- Komentáře, instrukce pro zpracování a další pomocné položky
- Namespaces, DOCTYPE, XMLSchema, RelaxNG, Schematron atd...

### 2. Kódování XML dat

Následující varianta je pouze pro orientační představu o možném řešení. Nepočítá se s bílými znaky jinde než v elementech.

XML má následující typy položek:

- Document -- Element (maximum of one), ProcessingInstruction, Comment, DocumentType (maximum of one)
- DocumentFragment -- Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
- DocumentType -- no children
- EntityReference -- Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
- Element -- Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference
- Attr -- Text, EntityReference
- ProcessingInstruction -- no children
- Comment -- no children
- Text -- no children
- CDATASection -- no children
- Entity -- Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
- Notation -- no children

### 2.1. Hlavička dokumentu

Dokument začíná specifikačním blokem následovaným XML dokumentovým uzlem. Ten má následující položky:

XML/Document (0):
UBPointer PrologPointer
UBPointer ElementPointer
UBPointer MiscPointer

První z odkazů ukazuje na položku XML Prolog s následujícími atributy:

XML/Prolog (1):
UBPointer DeclarationPointer
UBPointer DocTypePointer
UBPointer MiscPointer
UBPointer MiscAfterDTPointer

Všechny položky jsou nepovinné. Položka MiscAfterDTPointer by měla být přítomna pouze pokud je DocTypePointer neprázdný. DocTypePointer odkazuje na položku typu ML/DocType. DeclarationPointer odkazuje na následující typ bloku:

XML/Declaration (2):
XBVersion XMLVersion
UBPointer EncodingPointer
UBPointer StandalonePointer

Kde EncodingPointer odkazuje na položku typu "Text/Encoding Type" a StandalonePointer na položku typu Boolean.

Příklad: <?xml version="A.B" encoding="UTF-8"?>

Následuje popis struktury XML/Misc (3), která je typu List. Může obsahovat položky typu XML/Comment (4), nebo XML/Processing Instruction (5).

Položka typu XML/Comment je textový řetězec, který nesmí obsahovat dva znaky "--" za sebou. Processing instruction obsahuje ještě další atribut

XML/Processing Instruction (5)
UBPointer PITargetPointer
UBPointer PIStringPointer

PITargetPointer odkazuje na řetězec XML/PITarget (6), který nesmí být roven "XML" bez ohledu na velikost znaků. PIStringPointer odkazuje na řetězec XML/PIString (7), který nesmí obsahovat za sebou znaky "?>".

### 2.2. Tag dokumentu

Jsou dva základní elementy dokumentu. XML/Element je rozšířením typu List následujícím způsobem:

XML/Tag (8)
UBPointer TagName
UBPointer AttributeListPointer
UBList Content

Položky seznamu content mohou být následujících druhů:

- Text/StringList
- XML/Processing Instruction (5)
- XML/Comment (4)
- XML/CData (10)

XML/CData je textový řetězec, který nesmí obsahovat posloupnost znaků "]]>". Textová data jsou při překladu konvertována s využitím XML referencí.

Pokud je potřeba z nějakého důvodu rozlišovat prázdný element a neprázdný element bez obsahu, je možné použít následující blok.

XML/EmptyTag (9)
UBPointer AttributeName
UBPointer AttributesPointer

### 2.3. Atributy tagu

Atributy tagu je možné vyjádřit jako seznam atributů XML/Attribute List (11) obsahující konkrétní atributy XML/Attribute (12) s následujícími hodnotami:

UBPointer AttributeName
UBPointer AttributeValue

### 3. Související formáty

ML/DocType (1):
UBPointer NamePointer
UBPointer ExternalIDPointer
UBPointer InternalPointer

### 4. Výsledná specifikace formátu

Spojením uváděných skupin a bloků je zkušební specifikace formátu jako celku.

- 1: XML Document Group
  - 0: XML/Document
  - 1: XML/Prolog
  - 2: XML/Declaration
  - 3: XML/Misc
  - 4: XML/Comment
  - 5: XML/Processing Instruction
  - 6: XML/PITarget
  - 7: XML/PIString
  - 8: XML/Tag
  - 9: XML/EmptyTag
  - 10: XML/CData
  - 11: XML/Attribute List
  - 12: XML/Attribute
- 2: Text Blocks Group
- 3: SGML Group

### 4.1. Příklad dokumentu

Následuje příklad konverze jednoduchého dokumentu do binárního tvaru.

Zdrojový XHTML dokument

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Web Page</title>
</head>
<body>
<h1>Welcome!</h1>
</body></html>

Celková velikost: 317 bajtů

Kód | Popis
--- | ---
FE 00 58 42 00 01 | Hlavička souboru
07 80 C2 00 00 03 01 02 | Specifikační tag
0A 00 00 08 05 63 00 00 00 00 01 | Odkaz na specifikaci formátu do katalogu (ukázkový)
06 80 B0 01 00 01 02 | XML/Document: Kořenový tag XML Dokumentu
05 7A 01 01 01 02 | XML/Prolog
06 05 01 02 01 00 01 | XML/Declaration
04 00 02 01 00 | Text/Encoding: hodnota kodovani
06 67 03 01 01 02 03 | SGML/DocType
01 04[68 74 6D 6C] | Data: html
01 26[2D 2F 2F 57 33 43 2F 2F 44 54 44 20 58 48 54 4D 4C 20 31 2E 30 20 54 72 61 6E 73 69 74 69 6F 6E 61 6C 2F 2F 45 4E] | Data: "-//W3C//DTD XHTML 1.0 Transitional//EN"
01 37[68 74 74 70 3A 2F 2F 77 77 77 2E 77 33 2E 6F 72 67 2F 54 52 2F 78 68 74 6D 6C 31 2F 44 54 44 2F 78 68 74 6D 6C 31 2D 74 72 61 6E 73 69 74 69 6F 6E 61 6C 2E 64 74 64] | Data: "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
08 80 27 01 08 01 02 02 03 | XML/Tag: Kořenový tag
01 04[68 74 6D 6C] | Data: "html"
05 4F 01 0B 03 01 | XML/Attribute List
05 25 01 0C 01 02 | XML/Attribute
01 05[78 6D 6C 6E 73] | Data: "xmlns"
01 1C[68 74 74 70 3A 2F 2F 77 77 77 2E 77 33 2E 6F 72 67 2F 31 39 39 39 2F 78 68 74 6D 6C] | Data: "http://www.w3.org/1999/xhtml"
05 0E 01 0C 01 02 | XML/Attribute
01 08[78 6D 6C 3A 6C 61 6E 67] | Data: "xml:lang"
01 02[65 6E] | Data: "en"
05 0A 01 0C 01 02 | XML/Attribute
01 04[6C 61 6E 67] | Data: "lang"
01 02[65 6E] | Data: "en"
07 17 01 08 01 00 01 02 | XML/Tag
01 04[68 65 61 64] | Data: "head"
07 09 01 08 01 00 01 02 | XML/Tag
01 05[74 69 74 6C 65] | Data: "title"
01 08[57 65 62 20 50 61 67 65] | Data: "Web Page"
07 1C 01 08 01 00 01 02 | XML/Tag
01 04[62 6F 64 79] | Data: "body"
07 0E 01 08 01 00 01 02 | XML/Tag
01 02[68 31] | Data: "h1"
01 08[57 65 6C 63 6F 6D 65 21] | Data: "Welcome!"

Celková velikost: 335 bajtů

### 2.3. Elementy s indexovaným názvem

Jednou z možných optimalizací je identifikace elementů pomocí identifikačních čísel místo textových položek.

Homepage: http://xbup.sf.net
License: GNU Free Documentation License (FDL)
Latest update: 2007-01-03