專利名稱:一種結(jié)構(gòu)化數(shù)據(jù)交換方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種結(jié)構(gòu)化數(shù)據(jù)交換方法,特別是一種提高數(shù)據(jù)交換速度的結(jié)構(gòu)化數(shù) 據(jù)交換方法。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的發(fā)展,計(jì)算機(jī)網(wǎng)絡(luò)的應(yīng)用無處不在,應(yīng)用軟件的架構(gòu)也已脫離 桌面式單機(jī)時(shí)代,發(fā)展到C/S(客戶/服務(wù)架構(gòu))、C/S/S(客戶/中間件應(yīng)用服務(wù)/數(shù)據(jù)庫(kù) 服務(wù))、B/S/S (瀏覽器客戶/Web應(yīng)用服務(wù)/數(shù)據(jù)庫(kù)服務(wù))和分布式多層異構(gòu)平臺(tái)。這些結(jié) 構(gòu)都能實(shí)現(xiàn)多客戶端、多并發(fā)和大型數(shù)據(jù)訪問的軟件管理信息系統(tǒng),大大提高了信息流通 的速度和效率,吸引了越來越多的企業(yè)、個(gè)人通過網(wǎng)絡(luò)從事其相關(guān)活動(dòng),基于網(wǎng)絡(luò)的數(shù)據(jù)交 換和業(yè)務(wù)協(xié)作越來越頻繁。數(shù)據(jù)交換的協(xié)議主要是基于TCP/IP、HTTP等底層協(xié)議,數(shù)據(jù)的訪問方法不同架構(gòu) 有不同的方式C/S主要使用數(shù)據(jù)庫(kù)服務(wù)器專有協(xié)議和數(shù)據(jù)格式,使用如SQL (結(jié)構(gòu)化查詢語(yǔ)言) 等方法,利用客戶端的開發(fā)工具(如PowerBuilder,Delphi,Vb等)實(shí)現(xiàn)數(shù)據(jù)的訪問。C/S/S架構(gòu)客戶端使用與中間件應(yīng)用服務(wù)器的專有協(xié)議訪問,如Oracle Bea Tuxedo使用簡(jiǎn)單的字串到復(fù)雜的FML等多種交換方式實(shí)現(xiàn)客戶端與中間件的數(shù)據(jù)交換。中 間件與數(shù)據(jù)庫(kù)的訪問同C/S架構(gòu)。B/S/S是基于瀏覽器瘦客戶端,使用HTTP協(xié)議與TOB服務(wù)器交互,在文本交互方式 的基礎(chǔ)上發(fā)展出如XML、JSON等開放的交換格式。當(dāng)前流行的數(shù)據(jù)交換格式和方案主要有XML、JSON和Google的Protocol buffer 等XML 以文本格式描述數(shù)據(jù)的標(biāo)記語(yǔ)言,缺點(diǎn)是用XML描述的數(shù)據(jù)比原始數(shù)據(jù)大很 多,而且數(shù)據(jù)訪問解析比較慢,格式復(fù)雜,傳輸占用帶寬。服務(wù)器端和客戶端都需要花費(fèi)大 量代碼來解析XML,不論服務(wù)器端和客戶端代碼變的異常復(fù)雜和不容易維護(hù),客戶端不同瀏 覽器之間解析XML的方式不一致,需要重復(fù)編寫很多代碼,服務(wù)器端和客戶端解析XML花費(fèi) 資源和時(shí)間都較多。JSON (JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,它基于 JavaScript Programming Language,相對(duì)于XML,它更加易讀。但JSON中的分隔符只限于 單引號(hào)、小括號(hào)、中括號(hào)、大括號(hào)、冒號(hào)和逗號(hào)等可輸入字符,若數(shù)據(jù)內(nèi)容中本身包含這些字 符時(shí),要做轉(zhuǎn)移處理,會(huì)增加解析的復(fù)雜度,且對(duì)于其它語(yǔ)言編碼解碼相對(duì)復(fù)雜。因此,需要一種新的數(shù)據(jù)交換方法以解決上述問題。
發(fā)明內(nèi)容
針對(duì)上述現(xiàn)有結(jié)構(gòu)化數(shù)據(jù)交換方法所存在的問題和不足,本發(fā)明的目的是提供一 種結(jié)構(gòu)化數(shù)據(jù)交換方法,該方法有數(shù)據(jù)包小、數(shù)據(jù)交換速度快、應(yīng)用方便的特點(diǎn)。
為實(shí)現(xiàn)上述目的,本發(fā)明可采用如下技術(shù)方案一種結(jié)構(gòu)化數(shù)據(jù)交換方法,數(shù)據(jù)交 換格式由數(shù)據(jù)項(xiàng)值對(duì)區(qū)和數(shù)據(jù)記錄集內(nèi)容區(qū)組成,數(shù)據(jù)項(xiàng)值對(duì)區(qū)用以描述數(shù)據(jù)項(xiàng)名稱與數(shù) 據(jù)項(xiàng)的內(nèi)容,數(shù)據(jù)記錄集內(nèi)容區(qū)用以存放記錄集的二維數(shù)據(jù),每個(gè)記錄集都有名稱屬性、記 錄數(shù)屬性、列名屬性。本發(fā)明與現(xiàn)有技術(shù)相比其中數(shù)據(jù)交換包的結(jié)構(gòu)主要由數(shù)據(jù)項(xiàng)值對(duì)與數(shù)據(jù)記錄集 兩種結(jié)構(gòu)組成,能很簡(jiǎn)明地描述數(shù)據(jù),并使用特殊的不可輸入分隔符將數(shù)據(jù)項(xiàng)分開,包含數(shù) 據(jù)項(xiàng)值對(duì)與數(shù)據(jù)記錄集的格式實(shí)現(xiàn),只增加了很少的冗余數(shù)據(jù),從而使用該結(jié)構(gòu)化數(shù)據(jù)交 換方法可使數(shù)據(jù)包小、數(shù)據(jù)交換速度快、應(yīng)用方便。
圖1為本發(fā)明結(jié)構(gòu)化數(shù)據(jù)交換方法中數(shù)據(jù)交換格式內(nèi)部結(jié)構(gòu)圖。圖2為本發(fā)明結(jié)構(gòu)化數(shù)據(jù)交換方法中數(shù)據(jù)項(xiàng)內(nèi)部結(jié)構(gòu)圖。圖3為本發(fā)明結(jié)構(gòu)化數(shù)據(jù)交換方法中記錄集屬性數(shù)據(jù)項(xiàng)內(nèi)部結(jié)構(gòu)圖。圖4為本發(fā)明結(jié)構(gòu)化數(shù)據(jù)交換方法中數(shù)據(jù)記錄集內(nèi)容區(qū)內(nèi)部結(jié)構(gòu)圖。圖5為本發(fā)明結(jié)構(gòu)化數(shù)據(jù)交換方法中結(jié)構(gòu)化數(shù)據(jù)交換格式的示意圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施方式
,進(jìn)一步闡明本發(fā)明,應(yīng)理解下述具體實(shí)施方式
僅 用于說明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對(duì)本 發(fā)明的各種等價(jià)形式的修改均落于本申請(qǐng)所附權(quán)利要求所限定的范圍。本發(fā)明提供一種結(jié)構(gòu)化數(shù)據(jù)交換方法,本發(fā)明中的數(shù)據(jù)交換格式對(duì)比當(dāng)前的數(shù)據(jù) 交換格式,有數(shù)據(jù)包小、數(shù)據(jù)交換速度快、應(yīng)用方便等特點(diǎn),可以把它用在C/S/S架構(gòu)、B/S/ S架構(gòu)或分布式應(yīng)用之間的數(shù)據(jù)通信。本發(fā)明中結(jié)構(gòu)化數(shù)據(jù)交換方法中的結(jié)構(gòu)化數(shù)據(jù)交換格式由兩大數(shù)據(jù)區(qū)組成一是 數(shù)據(jù)項(xiàng)值對(duì)區(qū),另一個(gè)是數(shù)據(jù)記錄集內(nèi)容區(qū)。數(shù)據(jù)項(xiàng)值對(duì)也可以理解為數(shù)據(jù)域,由數(shù)據(jù)項(xiàng)的 名稱和數(shù)據(jù)項(xiàng)的內(nèi)容組成,這類數(shù)據(jù)項(xiàng)通常在軟件開發(fā)中簡(jiǎn)稱為“值對(duì)”,值對(duì)的優(yōu)點(diǎn)是在 數(shù)據(jù)交換中每個(gè)數(shù)據(jù)項(xiàng)可以用唯一的名稱標(biāo)識(shí)出來,在數(shù)據(jù)交換解析時(shí)可以用名稱直接取 得該數(shù)據(jù)項(xiàng)的內(nèi)容,可以提高解析速度,本發(fā)明的結(jié)構(gòu)中數(shù)據(jù)項(xiàng)值對(duì)以最小的冗余來描述, 如圖2所示,數(shù)據(jù)項(xiàng)名稱與數(shù)據(jù)項(xiàng)內(nèi)容之間用不可輸入的字符分隔,該字符為ASCII碼(為 計(jì)算機(jī)表示字符的編碼)為1的鍵盤不可輸入字符,數(shù)據(jù)項(xiàng)的內(nèi)容中不易包含這類字符。 數(shù)據(jù)項(xiàng)值對(duì)區(qū)由若干個(gè)數(shù)據(jù)項(xiàng)組成,本發(fā)明提供的格式將不同的數(shù)據(jù)項(xiàng)之間由ASCII碼為 2的字符分隔。數(shù)據(jù)項(xiàng)值對(duì)區(qū)結(jié)束由ASCII碼為6的字符表示。數(shù)據(jù)項(xiàng)值對(duì)主要表達(dá)一維的數(shù)據(jù),數(shù)據(jù)交換中還需要表達(dá)二維結(jié)構(gòu)的數(shù)據(jù),通常 稱為數(shù)據(jù)記錄集,請(qǐng)參閱圖1所示,本發(fā)明提供的格式將記錄集的描述進(jìn)行了優(yōu)化,同一 個(gè)數(shù)據(jù)包中可包含一個(gè)以上的記錄集,每個(gè)記錄集有唯一的名稱,并將每個(gè)記錄集的屬性 (主要有記錄集的名稱、記錄數(shù)和列名)以數(shù)據(jù)項(xiàng)值對(duì)形式放入了數(shù)據(jù)項(xiàng)值對(duì)區(qū)中,解析數(shù) 據(jù)時(shí)可用名稱取得記錄集,并通過屬性項(xiàng)可以取得記錄集記錄數(shù)和記錄集的各列名稱,大 大提高記錄集的解析速度。數(shù)據(jù)記錄集的名稱屬性設(shè)計(jì)為一個(gè)特殊的數(shù)據(jù)項(xiàng)值對(duì),該數(shù)據(jù)項(xiàng)值對(duì)的名稱為數(shù)
4據(jù)記錄集的名稱,該數(shù)據(jù)項(xiàng)值對(duì)的內(nèi)容為一固定的記錄集標(biāo)識(shí)符[$],由美元符號(hào)和一對(duì)
中括號(hào)組成。數(shù)據(jù)記錄集的名稱屬性數(shù)據(jù)項(xiàng)格式為數(shù)據(jù)記錄集名稱+ASCII碼為1的字符 +, [$],。數(shù)據(jù)記錄集的記錄數(shù)屬性由編碼時(shí)放入,該項(xiàng)的名稱為“數(shù)據(jù)記錄集的名 稱.rows”,該項(xiàng)的值為記錄數(shù)。數(shù)據(jù)記錄集的記錄數(shù)屬性數(shù)據(jù)項(xiàng)格式為數(shù)據(jù)記錄集名稱 +,· rows' +ASCII碼為1為字符+記錄數(shù)。數(shù)據(jù)記錄集的各列名稱由一數(shù)據(jù)項(xiàng)表示,該項(xiàng)的名稱為“數(shù)據(jù)記錄集的名 稱.cols”,該項(xiàng)的內(nèi)容是由各列名稱和ASCII碼為4的列分隔符組成,參見圖3,數(shù)據(jù)記錄 集的列名屬性數(shù)據(jù)項(xiàng)格式為數(shù)據(jù)記錄集名稱+’ · cols+ASCII碼為1為字符+列1名稱 +ASCII碼為4為字符+列2名稱+ASCII碼為4為字符+列3名稱……+ASCII碼為4為字 符+列n(n為大于1的自然數(shù))名稱。數(shù)據(jù)記錄集內(nèi)容區(qū)如圖4,由若干個(gè)記錄集內(nèi)容組成,每個(gè)記錄集的內(nèi)容格式由 名稱、行數(shù)據(jù)和結(jié)束符組成,記錄集內(nèi)容開始處的名稱由三部分組成,一是標(biāo)識(shí)起始符,由 ASCII碼為3的字符和’ <’字符總共2個(gè)字符組成,第二部分是記錄集名稱,第三部分為標(biāo) 識(shí)結(jié)束符,由字符’ Y和ASCII碼為3的字符組成,行數(shù)據(jù)由每行數(shù)據(jù)組成,行與行之間由 ASCII碼為5的字符分隔,行數(shù)據(jù)由數(shù)據(jù)集的各列加上ASCII碼為4的列分隔符組成,記錄 集內(nèi)容結(jié)束符與數(shù)據(jù)項(xiàng)值對(duì)區(qū)結(jié)束符相對(duì),為ASCII碼為6的字符,數(shù)據(jù)記錄集內(nèi)容區(qū)中的 多個(gè)記錄集依次存放。綜上所述,本發(fā)明數(shù)據(jù)交換方法中數(shù)據(jù)交換包的結(jié)構(gòu)主要由數(shù)據(jù)項(xiàng)值對(duì)與數(shù)據(jù)記 錄集兩種結(jié)構(gòu)組成,能很簡(jiǎn)明地描述數(shù)據(jù),并使用特殊的不可輸入分隔符將數(shù)據(jù)項(xiàng)分開,包 含數(shù)據(jù)項(xiàng)值對(duì)與數(shù)據(jù)記錄集的格式實(shí)現(xiàn),只增加了很少的冗余數(shù)據(jù),序列化編碼、解碼的方 法簡(jiǎn)單,體積小,編碼的效率較高,能支持文本和二進(jìn)制數(shù)據(jù),可直接閱讀。與XML、JSON等 格式相比,有數(shù)據(jù)包小、數(shù)據(jù)交換速度快、應(yīng)用方便等特點(diǎn),可以把它用在C/S/S架構(gòu)、B/S/ S架構(gòu)或分布式應(yīng)用之間的數(shù)據(jù)通信,異構(gòu)環(huán)境下的數(shù)據(jù)交換也適用。本發(fā)明的格式在編碼 時(shí)相對(duì)簡(jiǎn)易,與計(jì)算機(jī)語(yǔ)言無關(guān),當(dāng)前主流的語(yǔ)言與平臺(tái)都能實(shí)現(xiàn),下面以Java語(yǔ)言的方 式描述編碼的一種優(yōu)選的實(shí)施方式。結(jié)構(gòu)化數(shù)據(jù)交換格式編碼主要由以下關(guān)鍵步驟1、分配數(shù)據(jù)交換的空間,開辟一個(gè)數(shù)據(jù)項(xiàng)值對(duì)區(qū)和一個(gè)數(shù)據(jù)記錄集內(nèi)容區(qū),如在 Java 中申明兩個(gè) String Buffer 變量 bufl 和 buf2。2、寫入數(shù)據(jù)項(xiàng)值對(duì),先寫入數(shù)據(jù)項(xiàng)的名稱,若該數(shù)據(jù)項(xiàng)的名稱為’namel’,則bufl. append ( ‘namel’),依次寫入數(shù)據(jù)項(xiàng)名稱與內(nèi)容的分隔符bufl. append (char (1)),再將數(shù) 據(jù)項(xiàng)的內(nèi)容寫入,如bufl. append ( ‘nameljalue’),最后寫入與下一個(gè)數(shù)據(jù)項(xiàng)的分隔符 bufl. append (char (2)),一個(gè)完整的數(shù)據(jù)項(xiàng)編碼過程結(jié)束。3、若有多個(gè)數(shù)據(jù)項(xiàng),按步驟2的方法依次寫入,所有的數(shù)據(jù)項(xiàng)寫完后,最后寫入數(shù) 據(jù)項(xiàng)值對(duì)區(qū)的區(qū)結(jié)束符bufl. append (char (6)),若本次編碼中有記錄集,應(yīng)將記錄集的屬 性數(shù)據(jù)項(xiàng)寫入到數(shù)據(jù)項(xiàng)區(qū)后才能寫入?yún)^(qū)結(jié)束符。4、若有記錄集,寫入數(shù)據(jù)記錄集時(shí),先將記錄集名稱按步驟2寫入,內(nèi)容為” [$] ”, buf2. append ( “記錄集 1 [$] ”)。5、完成步驟4后,將記錄集的記錄數(shù)按步驟2寫入,名稱為記錄集名稱.rows,內(nèi)容為記錄數(shù),如Java的list取記錄數(shù)為list名· size(),buf2. append ( “記錄集 1. rowslOOO”)。6、將記錄集的各列列名稱按步驟2寫入,名稱為記錄集名稱.cols,內(nèi)容是各列 列名用ASCII碼為4的字符分隔,分隔字符個(gè)數(shù)為記錄集的列數(shù)減一,兩端無分隔符,buf2. append( “記錄集 L cols cl c2 c3,,)。7、寫記錄集的內(nèi)容,在數(shù)據(jù)記錄集內(nèi)容區(qū)buf2中,首先寫入記錄集標(biāo)識(shí)起始符, 為兩個(gè)字符,第一個(gè)是ASCII碼為3的字符,第二個(gè)為”〈”,buf2. append (char (3)), buf2. append( “<”)。8、在數(shù)據(jù)記錄集內(nèi)容區(qū)buf2中寫入記錄集的名稱,buf2. append ( “記錄集1”)。9、依次寫入記錄集標(biāo)識(shí)結(jié)束符,與起始符對(duì)應(yīng)為兩個(gè)字符,第一個(gè)是”〉”,第二個(gè) 是 ASCII 碼為 3 的字符,buf2. append ( “>,,),buf2. append (char (3))。10、寫入數(shù)據(jù)記錄集的行數(shù)據(jù),從記錄集的第一行開始,依次寫入,每一行的規(guī)則 是按列的順序(順序與記錄集的各列名屬性順序一致),寫入各列的內(nèi)容,列之間用ASCI I 碼為4的字符分隔,最后一列后續(xù)不用些分隔,一行結(jié)束后寫入行結(jié)束符(ASCII碼為5的 字符),完成記錄集所有行的數(shù)據(jù)后,寫入記錄集數(shù)據(jù)區(qū)結(jié)束符(ASCII碼為6的字符)。11、若有多個(gè)數(shù)據(jù)記錄集,按步驟4至步驟10方法寫入。結(jié)構(gòu)化數(shù)據(jù)交換格式解析主要由以下關(guān)鍵步驟對(duì)本發(fā)明提供的結(jié)構(gòu)化數(shù)據(jù)交換格式解析時(shí),主要實(shí)現(xiàn)以下幾大解析功能1、通過名稱取得指定數(shù)據(jù)項(xiàng)的內(nèi)容。2、取得所有數(shù)據(jù)項(xiàng)名稱的列表或數(shù)組。3、通過名稱取得指定數(shù)據(jù)記錄集的游標(biāo)句柄(或指針)。4、實(shí)現(xiàn)記錄集游標(biāo)遍歷(單向或雙向)。5、通過列名稱取得當(dāng)前記錄集游標(biāo)所在行指定列的內(nèi)容。6、通過列索引編號(hào)取得當(dāng)前記錄集游標(biāo)所在行指定列的內(nèi)容。
權(quán)利要求
一種結(jié)構(gòu)化數(shù)據(jù)交換方法,其特征在于數(shù)據(jù)交換格式由數(shù)據(jù)項(xiàng)值對(duì)區(qū)和數(shù)據(jù)記錄集內(nèi)容區(qū)組成,數(shù)據(jù)項(xiàng)值對(duì)區(qū)用以描述數(shù)據(jù)項(xiàng)名稱與數(shù)據(jù)項(xiàng)的內(nèi)容,數(shù)據(jù)記錄集內(nèi)容區(qū)用以存放記錄集的二維數(shù)據(jù),每個(gè)記錄集都有名稱屬性、記錄數(shù)屬性、列名屬性。
2.根據(jù)權(quán)利要求1所述的結(jié)構(gòu)化數(shù)據(jù)交換方法,其特征在于所述數(shù)據(jù)項(xiàng)值對(duì)區(qū)中具 有的數(shù)據(jù)項(xiàng)具有數(shù)據(jù)項(xiàng)的名稱與數(shù)據(jù)項(xiàng)的內(nèi)容,數(shù)據(jù)項(xiàng)的名稱與數(shù)據(jù)項(xiàng)的內(nèi)容由不可輸入 分隔符分隔。
3.根據(jù)權(quán)利要求2所述的結(jié)構(gòu)化數(shù)據(jù)交換方法,其特征在于所述不可輸入分隔符采 用ASCII碼為1或2的分隔符,所述數(shù)據(jù)項(xiàng)的名稱與數(shù)據(jù)項(xiàng)的內(nèi)容由ASCII碼為1的分隔 符分隔,數(shù)據(jù)項(xiàng)與下一個(gè)數(shù)據(jù)項(xiàng)之間由ASCII碼為2的分隔符分隔。
4.根據(jù)權(quán)利要求2或3所述的結(jié)構(gòu)化數(shù)據(jù)交換方法,其特征在于所述數(shù)據(jù)記錄集的 名稱、記錄數(shù)、列名等屬性以數(shù)據(jù)項(xiàng)值對(duì)的形式在數(shù)據(jù)項(xiàng)值對(duì)區(qū)中描述。
5.根據(jù)權(quán)利要求4所述的結(jié)構(gòu)化數(shù)據(jù)交換方法,其特征在于數(shù)據(jù)記錄集的名稱屬性 數(shù)據(jù)項(xiàng)格式為數(shù)據(jù)記錄集名稱+ASCII碼為1的字符+’[$]’,其中[$]為固定的記錄集標(biāo) 識(shí)符。
6.根據(jù)權(quán)利要求5所述的結(jié)構(gòu)化數(shù)據(jù)交換方法,其特征在于數(shù)據(jù)記錄集的記錄數(shù)屬 性數(shù)據(jù)項(xiàng)格式為數(shù)據(jù)記錄集名稱+’ · rows' +ASCII碼為1為字符+記錄數(shù)。
7.根據(jù)權(quán)利要求6所述的結(jié)構(gòu)化數(shù)據(jù)交換方法,其特征在于數(shù)據(jù)記錄集的列名屬性 數(shù)據(jù)項(xiàng)格式為數(shù)據(jù)記錄集名稱+’. cols+ASCII碼為1為字符+列1名稱+ASCII碼為4為 字符+列2名稱+ASCII碼為4為字符+列3名稱……+ASCII碼為4為字符+列η (η為大 于1的自然數(shù))名稱。
8.根據(jù)權(quán)利要求7所述的結(jié)構(gòu)化數(shù)據(jù)交換方法,其特征在于數(shù)據(jù)記錄集內(nèi)容區(qū)由若 干個(gè)記錄集的內(nèi)容組成。
全文摘要
本發(fā)明提供一種結(jié)構(gòu)化數(shù)據(jù)交換方法,其中數(shù)據(jù)交換包的結(jié)構(gòu)主要由數(shù)據(jù)項(xiàng)值對(duì)與數(shù)據(jù)記錄集兩種結(jié)構(gòu)組成,能很簡(jiǎn)明地描述數(shù)據(jù),并使用特殊的不可輸入分隔符將數(shù)據(jù)項(xiàng)分開,包含數(shù)據(jù)項(xiàng)值對(duì)與數(shù)據(jù)記錄集的格式實(shí)現(xiàn),只增加了很少的冗余數(shù)據(jù),從而使用該結(jié)構(gòu)化數(shù)據(jù)交換方法可使數(shù)據(jù)包小、數(shù)據(jù)交換速度快、應(yīng)用方便。
文檔編號(hào)G06F17/30GK101930455SQ20101024146
公開日2010年12月29日 申請(qǐng)日期2010年7月30日 優(yōu)先權(quán)日2010年7月30日
發(fā)明者蘇祖輝, 金定勇, 陳軍 申請(qǐng)人:南京萊斯信息技術(shù)股份有限公司