EXI 是 W3C 推薦高效 XML 交換 (EXI) 格式 1.0(第二版)中指定的 XML 的一種非常緊湊的表示。與標(biāo)準(zhǔn)(文本)XML 相比,EXI 提高了序列化和解析速度,并允許更有效地使用內(nèi)存和電池壽命。EXI 流通常比等效的 XML 文檔小很多倍,并且需要更少的 CPU 時(shí)間來讀取或?qū)懭搿?/p>
EXI 可以通過兩種主要方式對(duì) XML 文檔進(jìn)行編碼 - schemaless 模式和 schema-informed 模式。在 schemaless 模式下,EXI 可以對(duì)任何 XML 文檔進(jìn)行編碼,無論模式是否可供編碼器使用。在 schema-informed 模式下,EXI 具有獨(dú)特的能力,可以利用從 XML 模式中提取的信息來提高編碼效率,而通常不需要嚴(yán)格 數(shù)據(jù)對(duì)模式的依從性。但是,如果用戶確定數(shù)據(jù)根據(jù)架構(gòu)有效,EXI 編碼可以甚至更有效。
模式信息的使用使 EXI 編碼更有效,因?yàn)樗试S EXI 處理器在 EXI 流中的任何點(diǎn)對(duì)流中的下一項(xiàng)進(jìn)行某些預(yù)測(cè)。例如,如果模式指定元素“A”(在特定上下文中)必須始終跟隨元素“B”,那么當(dāng)前一個(gè)元素是“A”時(shí),元素“B”的出現(xiàn)將被編碼為 < span style="text-decoration: underline">零位(在 strict 模式下)。
在 schemaless 模式下,在編碼或解碼操作期間,EXI 處理器會(huì)根據(jù)目前遇到的文檔的實(shí)際內(nèi)容不斷修改編碼每個(gè)項(xiàng)目的方式。例如,當(dāng)EXI編碼器在一個(gè)元素“P”的內(nèi)容中遇到一個(gè)元素“C”時(shí),它假設(shè)當(dāng)當(dāng)前父元素是一個(gè)元素時(shí),一個(gè)名為“C”的元素比其他名字的元素出現(xiàn)的概率更高 命名為“P”,并創(chuàng)建一種縮寫方式來編碼名為“C”的元素在名為“P”的元素下的出現(xiàn)。下一次在名為“P”的元素下遇到名為“C”的元素(相同或具有相同名稱的后續(xù)元素),EXI 編碼器將能夠使用“C”的縮寫編碼,從而保存 空間。
總之,EXI 的用戶可以在三個(gè)主要選項(xiàng)之間進(jìn)行選擇:(a) 根本不使用模式 (schemaless),(b) 在 一種僅支持有效 XML 文檔的方式(schema-informed, strict),以及 (c) 以支持偏離模式的方式使用模式(< span style="font-style:italic">schema-informed, non-strict)。schema-informed, strict mode 是三者中效率最高的。schemaless 模式是最容易使用的,因?yàn)樗簧婕澳J健?/p>
EXI 與許多其他 XML 壓縮技術(shù)一樣,使用字符串表來臨時(shí)存儲(chǔ)正在編碼的 XML 文檔中出現(xiàn)的某些類型的字符串,例如名稱空間 URI、本地名稱、屬性值等,以允許后續(xù)出現(xiàn)相同的字符串。要使用短字符串標(biāo)識(shí)符編碼的字符串。在 schemaless 模式下,所有的字符串表都會(huì)在編碼或解碼操作開始時(shí)重置。在 schema-informed 模式中,包含命名空間 URI 和本地名稱的字符串表預(yù)先填充了取自模式或在 XML 模式建議中定義的字符串,以便 在每個(gè)編碼或解碼操作開始時(shí),這些字符串將是已知的。
EXI 中還有其他選項(xiàng)會(huì)影響 EXI 流的內(nèi)容。其中一些選項(xiàng),稱為 保真度選項(xiàng),控制 EXI 處理器在 EXI 流中包含某些類型的項(xiàng)目的能力,例如 XML 注釋、處理指令和命名空間聲明。如果用戶對(duì)保留在 EXI 編碼中的此類項(xiàng)目之一不感興趣,他們可以選擇一個(gè)選項(xiàng),通過不必包含該類型的項(xiàng)目來使 EXI 編碼更有效。因此,例如,如果用戶聲明不需要保留名稱空間聲明和前綴,則 EXI 流編碼器將放棄對(duì)這些內(nèi)容進(jìn)行編碼的能力,并且生成的 EXI 流可能更緊湊。還有另一個(gè)保真度選項(xiàng),它控制簡(jiǎn)單類型的屬性和元素的原始字符串值的保留。當(dāng)此選項(xiàng)not被選中時(shí),這些值的編碼效率更高(例如,類型為xsd:integer< /span> 將被編碼為二進(jìn)制整數(shù)而不是字符串),但讀取器在讀回 EXI 流時(shí)不可能重建確切的原始字符串。在許多應(yīng)用程序中,這種信息丟失是可以接受的,因此不應(yīng)選擇此選項(xiàng)。
EXI 的最后一個(gè)主要特性是支持字節(jié)對(duì)齊和壓縮。用戶可以選擇以下四種對(duì)齊方式之一:(a) bit-packed 對(duì)齊方式,(b) byte-aligned 對(duì)齊,(c) 預(yù)壓縮,和 (d) 壓縮跨度>。Bit-packed 和 compression 是更緊湊的(compression 通常但不總是比 bit-packed) 更緊湊。Bit-packed 和 byte-aligned 是更快的(byte-aligned 可能比 bit-packed 稍快)。
precompression 和 compression 都將 EXI 流中的編碼數(shù)據(jù)排列到特定的布局中,其中所有可能相似的編碼數(shù)據(jù)項(xiàng)都靠近在一起。這種安排提高了應(yīng)用于數(shù)據(jù)的壓縮算法的有效性。Precompression 本身不執(zhí)行任何壓縮,因?yàn)樗奈ㄒ荒康氖菫橐獞?yīng)用到的外部壓縮步驟(EXI 處理器之外)準(zhǔn)備 EXI 流EXI 流。壓縮 更進(jìn)一步,將標(biāo)準(zhǔn) DEFLATE 算法應(yīng)用于每個(gè)相似的編碼數(shù)據(jù)項(xiàng)塊,以生成最終的 EXI 流。
-
處理器
+關(guān)注
關(guān)注
68文章
19607瀏覽量
232375 -
解碼
+關(guān)注
關(guān)注
0文章
184瀏覽量
27644 -
編碼
+關(guān)注
關(guān)注
6文章
962瀏覽量
55219
原文標(biāo)題:OSS Nokalva:什么是EXI?
文章出處:【微信號(hào):哲想軟件,微信公眾號(hào):哲想軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
功率器件熱設(shè)計(jì)基礎(chǔ)知識(shí)
PCB繪制基礎(chǔ)知識(shí)

TWL6030氣體監(jiān)測(cè)基礎(chǔ)知識(shí)

Verilog HDL的基礎(chǔ)知識(shí)

負(fù)載開關(guān)基礎(chǔ)知識(shí)

全新的半導(dǎo)體基礎(chǔ)知識(shí)

超聲波傳感基礎(chǔ)知識(shí)

國(guó)產(chǎn)芯片LT8712EXI:4K60分辨率的三通道視頻DAC

C++語言基礎(chǔ)知識(shí)
一文帶你了解LT8712EXI的優(yōu)勢(shì)特點(diǎn)以及適用程序

評(píng)論