EXI Prototype for .NET

使用OSS Nokalva的EXI工具.NET爲您的XML數據實現前所未有的緊湊(còu)性。 OSS EXI Tools for .NET是一組實現高效XML交換(huàn)(EXI)格式1.0(第二版)W3C推薦标準的工具。
OSS EXI工具.NET允許.NET應用程序讀(dú)取和寫入符合EXI推薦(jiàn)标準的數據流。

EXI是W3C推薦的高效XML交換(EXI)格式1.0(第二版)中指定的XML的非常緊湊的表示。與标準(文本)XML相比,EXI提高瞭(le)串行化和解析速度,並(bìng)允許更有效地使用内存和電池壽命。 EXI流通常比等效的XML文檔小很多倍,並(bìng)且需要較少的CPU時間來讀取或寫入。
EXI可以對XML文檔進行編碼的兩種主要方式 - 無模式模式和模式通知模式。在無模式模式下,無論模式是否可用於(yú)編碼器,EXI都可以編碼任何XML文檔。在模式通知模式下,EXI具有利用從XML模式提取的信息的獨特能力,以提高編碼的效率,而不需要通常嚴格遵守數據到模式。然而,如果用戶確(què)定數據将根據模式有效,則EXI編碼甚至可以更有效。
使用模式信息使得EXI編(biān)碼更有效,因爲它允許EXI處理器在EXI流内的任何點處對流中的下一項做出某些預測(cè)。例如,如果模式指定元素“A”(在特定上下文中)必須總是後跟元素“B”,則當前一元素爲“A”時元素“B”的出現被編(biān)碼爲零位(在嚴格模式下)。
在無模式模式中,在編碼或解碼操作期間,EXI處理器基於(yú)迄今遇到的文檔的實際内容連續地修改對每個項目進行編碼的方式。例如,當EXI編碼器在元素“P”的内容中遇到元素“C”時,假設當當前父元素是元素時,名爲“C”的元素比具有其他名稱的元素具有更高的出現概率命名爲“P”,並(bìng)且創建縮寫方式以編碼在名爲“P”的元素下名爲“C”的元素的出現。下一次在名爲“P”的元素(具有相同名稱的相同或後續元素)下遇到名爲“C”的元素時,EXI編碼器将能夠使用“C”的縮寫編碼,從而節省空間。
總之,EXI的用戶可以在三個(gè)主要選項之間進行選擇:(a)根本不使用模式(無模式),(b)以僅支持有效XML文檔(dàng)(模式通知,嚴格)的方式使用模式,和(c)以支持與模式的偏離的方式使用模式(模式通知的,非嚴格的)。模式通知,嚴格模式是三者中最高效的。無模式模式是最容易使用的,因爲它不涉及模式。
與許多其他XML壓縮技術一樣,EXI使用字符串表臨時存儲正在編(biān)碼的XML文檔中出現的某些類型的字符串,例如命名空間URI,本地名稱,屬性值等,以允許後續出現的相同字符串使用短字符串标識符進行編(biān)碼。在無模式模式中,所有字符串表在編(biān)碼或解碼操作開始時被複位。在模式通知模式中,包含命名空間URI和本地名稱的字符串表預填充瞭(le)從模式中提取的字符串或在XML模式建議中定義的字符串,以便那些字符串在每個編(biān)碼或解碼操作開始時就已經知道。
EXI中有其他選項影響EXI流的内容。其中一些選項,稱爲保真選項,控制EXI處理器在EXI流中包括某些類型的項目的能力,例如XML注釋,處理指令和命名空間聲明。如果用戶對在EXI編碼中保留的這樣的項目之一不感興趣,則他們可以通過不必包括該類型的項目來選擇将使得EXI編碼更有效的選項。因此,例如,如果用戶聲明命名空間聲明和前綴不需要保留,則EXI流編碼器将放棄編碼這些東西的能力,並(bìng)且所得到的EXI流可以更緊湊。還有另一個保真選項,它控制使用簡單類型保存屬性和元素的原始字符串值。當未選擇此選項時,将更有效地編碼這些值(例如,類型爲xsd:integer的屬性值将被編碼爲二進制整數而不是字符串),但讀者無法重建讀回EXI流時的精確(què)原始字符串。在許多應用中,這種信息丢失是可接受的,因此不應該選擇該選項。
EXI的最後一個主要特性是支持字節對齊和壓縮。用戶可以選擇四個對齊選項之一:(a)位打包對齊,(b)字節對齊對齊,(c)預壓縮和(d)壓縮。位打包和壓縮是更緊湊的(壓縮通常,但不總是,比位打包更緊湊)。位填充和字節對齊是較快的(字節對齊可能比位填充稍快)。預壓縮和壓縮都将EXI流内的編碼數據排列成特定的布局,其中可能相似的所有編碼數據項都靠近在一起。這種布置提高瞭(le)應用於數據的壓縮算法的有效性。預壓縮本身不執行任何壓縮,因爲它的唯一目的是爲外部壓縮步驟(EXI處理器外部)準備要應用於EXI流的EXI流。壓縮進一步並(bìng)且将标準DEFLATE算法應用於類似編碼數據項的每個塊,以産生最終的EXI流。

組件
OSS EXI工具包括兩(liǎng)個(gè)主要組件:
•模式預處(chù)理器實(shí)用程序(ossEXIpre.exe)和
•EXI / .NET運行時(shí)庫(kù)(ossEXIdn.dll)。
模式預處(chù)理器實用程序是讀取XML模式並(bìng)生成序列化模式文件的命令行應用程序。 作爲模式預處(chù)理器輸入的模式必須包含符合W3C XML模式1.0的一個或多個模式文檔文件。 輸出是一個XML文件(序列化模式文件),它傳遞從模式提取的信息,並(bìng)以專有格式表示,這是EXI / .NET運行時庫理解的。 EXI的無模式模式不需要使用模式預處(chù)理器。
模式預處(chù)理功能也可在EXI / .NET運行時庫(kù)中使用。
EXI / .NET運行時庫是一個.NET DLL,用於(yú)讀取和寫入EXI流以及将XML文檔(dàng)和片段轉換爲EXI和将EXI流轉換爲XML。