EXI Prototype for C/C++

使用OSS EXI Tools for C/C++為您的XML數(shù)據(jù)實現(xiàn)前所未有的緊湊性。 用于OSS EXI Tools for C/C++是一組實現(xiàn)高效XML交換(EXI)格式1.0(第二版)W3C推薦標準的工具。
OSS EXI Tools for C/C++使C / C ++應(yīng)用程序能夠讀取和寫入符合Efficient XML Interchange W3C Recommendation的數(shù)據(jù)流。
OSS EXI Tools for C/C++已經(jīng)通過W3C EXI互操作性測試框架進行測試。

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


組件
用于C / C ++的OSS EXI工具包括兩個主要組件:
•模式預(yù)處理器實用程序(ossEXIpre.exe)和
•EXI / C運行時庫(ossEXIc.dll)。
模式預(yù)處理器實用程序是讀取XML模式并生成序列化模式文件的命令行應(yīng)用程序。作為模式預(yù)處理器輸入的模式必須包含符合W3C XML模式1.0的一個或多個模式文檔文件。輸出是傳遞從模式提取并以專有格式表示的信息的XML文件(序列化模式文件),其由EXI / C運行時庫理解。 EXI的無模式模式不需要使用模式預(yù)處理器。
模式預(yù)處理器依賴于XML模式解析功能和.NET框架的XML模式對象模型(版本4.5或更高版本)。 .NET框架僅由模式預(yù)處理器需要。它不是EXI / C運行時庫(見下文)需要或使用的,因此在目標系統(tǒng)上不需要。
EXI / C運行時庫是一個本地Windows DLL,用于讀取和寫入EXI流,以及將XML文檔和片段轉(zhuǎn)換為EXI和EXI流轉(zhuǎn)換為XML。
EXI Prototype for C/C++-API
EXI / C運行時庫的API是C風(fēng)格的API,可以由C應(yīng)用程序和C ++應(yīng)用程序使用。
EXI / C運行時庫支持創(chuàng)建或處理EXI流的兩種不同方法。在第一種方法中,用戶應(yīng)用程序通過為每個節(jié)點調(diào)用一個或多個API函數(shù)來一次讀取或?qū)懭隕XI文檔或片段一個節(jié)點。在第二種方法中,用戶應(yīng)用程序?qū)PI函數(shù)進行單次調(diào)用,該函數(shù)將整個文檔或片段從XML轉(zhuǎn)換為EXI或從EXI轉(zhuǎn)換為XML。對于只需要讀取或?qū)懭隕XI流(不涉及XML)的應(yīng)用程序,第一種方法更快。當開發(fā)人員必須將EXI添加到讀取或?qū)懭隭ML的現(xiàn)有應(yīng)用程序時,第二種方法可能更方便。
EXI / C運行時庫還包括一些旨在提高EXI編碼/解碼性能的高級功能。其中之一是為非字符串XSD數(shù)據(jù)類型(例如,xsd:integer,xsd:float,xsd:base64Binary等)的值傳遞二進制值而不是跨API的字符串(兩個方向)對于枚舉數(shù)據(jù)類型的值。
EXI / C運行時庫也可用于讀取和寫入XML 1.0文檔和片段。在將整個文檔或片段從XML轉(zhuǎn)換為EXI或從EXI轉(zhuǎn)換為XML的過程中,此功能由EXI / C運行時庫在內(nèi)部使用,但也可通過API提供給用戶應(yīng)用程序。大多數(shù)讀取和寫入文檔或片段的節(jié)點的API函數(shù)對于XML和EXI是通用的。
EXI / C運行時庫的流讀取能力(對于EXI和XML)遵循“拉解析器”模型。
為了方便起見,還包括類似于Apache Xerces-C ++的SAX2 API(SAX2XMLReader和處理程序類)的類似于SAX2的C ++ API。此API的使用是可選的。
EXI Prototype for C/C++-API - 特性
一致性和主要特性(EXI)
用于C / C ++的OSS EXI工具是高效XML交換(EXI)格式1.0(第二版)W3C推薦的完整實現(xiàn)。因此,他們完全支持EXI的以下功能:
•模式通知的EXI流
•僅使用XSD內(nèi)置數(shù)據(jù)類型的模式通知的EXI流
•無模式EXI流
•文檔/片段
•所有對齊選項(位打包,字節(jié)對齊,預(yù)壓縮)
•EXI壓縮(使用DEFLATE)
•嚴格/非嚴格(與模式的偏差)
•保真選項(保留注釋,pis,dtd,前綴,詞匯值)
•處理xsi:type和xsi:nil
•處理自包含元素(在編碼和解碼時)
•讀取和寫入EXI流頭中包含的EXI選項文檔
•數(shù)據(jù)類型表示形式映射
•從模式面得到限制字符集,
以及在編碼和解碼EXI流時都遵循EXI推薦所需的所有其他特征。
一致性和主要特性(XML)
用于C / C ++的OSS EXI工具也是作為非驗證處理器的可擴展標記語言(XML)1.0(第五版)W3C推薦標準的一致性實現(xiàn),具有以下特征:
•它們支持以下字符編碼:UTF-8,UTF-16 little-endian和UTF-16 big-endian(無其他)
•它們讀取和處理內(nèi)部DTD子集
•它們可以讀取和處理外部DTD子集,所有外部實體和所有參數(shù)實體
•它們提供默認屬性,并根據(jù)DTD中指定的屬性類型執(zhí)行屬性值的空格標準化
它們支持讀取和寫入XML文檔和XML片段
•它們支持使用符合XML 1.0(第三版)W3C Recommendation中的命名空間的命名空間
•它們還支持不使用命名空間的XML文檔和片段。
京ICP備09015132號-996 | 違法和不良信息舉報電話:4006561155
© Copyright 2000-2026 北京哲想軟件有限公司版權(quán)所有 | 地址:北京市海淀區(qū)西三環(huán)北路50號豪柏大廈C2座11層1105室
北京哲想軟件集團旗下網(wǎng)站:哲想軟件 | 哲想動畫