曾志勇,劉建業(yè)
(云南財經(jīng)大學(xué)信息管理中心,昆明 650221)
基于NoSQL的XBRL數(shù)據(jù)存儲研究與應(yīng)用
曾志勇,劉建業(yè)
(云南財經(jīng)大學(xué)信息管理中心,昆明 650221)
XBRL是XML語言在商務(wù)報告領(lǐng)域的擴展和應(yīng)用,隨著XBRL在世界范圍內(nèi)的大規(guī)模普及,加入XBRL組織的公司越來越多,每年產(chǎn)生的XBRL報表數(shù)量成倍增長。面對海量XBRL數(shù)據(jù),探索和研究了在NoSQL環(huán)境下對XBRL數(shù)據(jù)的進(jìn)行有效的存儲、查詢和分析等問題。
可擴展商業(yè)報告語言;醞葬灶早燥閱月;月澤燥灶文檔;數(shù)據(jù)轉(zhuǎn)換
XBRL是XML語言在商務(wù)報告領(lǐng)域的擴展和應(yīng)用,其最主要的思想是將XML語言中的元素標(biāo)簽實例化,給出所有出現(xiàn)在XML文件中的元素名稱定義和屬性定義,使其符合商務(wù)報告的要求。伴隨著XBRL在商務(wù)報告領(lǐng)域的成功,越來越多的XBRL組織相繼成立,經(jīng)過國際上大約450個主要公司、組織和政府機構(gòu)組成的非營利組織對XBRL標(biāo)準(zhǔn)的發(fā)展,XBRL現(xiàn)已成為一個統(tǒng)一的、開放的、免費的標(biāo)準(zhǔn),并被很多國際和地區(qū)投入使用。隨著XBRL在世界范圍內(nèi)的大規(guī)模普及,加入XBRL組織的公司越來越多,每年產(chǎn)生的XBRL報表數(shù)量成倍增長。面對如此龐大的數(shù)據(jù)量,無疑會大大增加投資者和分析師搜尋和處理信息的成本,因此,如何有效的對XBRL數(shù)據(jù)進(jìn)行存儲、查詢、分析,是一個值得探索和研究的問題。
XBRL數(shù)據(jù)具有結(jié)構(gòu)類似、數(shù)據(jù)量大、更新速度快的特點,要想實時地提取和分析數(shù)據(jù),傳統(tǒng)的集中式數(shù)據(jù)存儲方式很難滿足這方面的要求,因此,采用分布式的存儲和計算成為處理該類型數(shù)據(jù)的必然選擇。
MongoDB屬于NoSQL數(shù)據(jù)庫的一種,由C++語言編寫,是由MongoDB公司提供的一個開源的、模式自由的、面向文檔存儲的、分布式的數(shù)據(jù)庫,是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,旨在為Web應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。MongoDB支持一種類似Json的Bson格式的數(shù)據(jù)結(jié)構(gòu),這種松散的數(shù)據(jù)結(jié)構(gòu)可以存儲比較復(fù)雜的數(shù)據(jù)類型,與XML數(shù)據(jù)有著天然的對應(yīng)關(guān)系,非常適合文檔化格式數(shù)據(jù)的存儲和查詢。同時,Bson相比XML更輕量級,轉(zhuǎn)換代價較小,因此,研究在MongoDB中對海量的XBRL數(shù)據(jù)的存儲和計算問題有著重要的意義。
XBRL是eXtensible Business Reporting Language的縮寫,中文譯作“可擴展商業(yè)報告語言”,是一種基于XML(eXtensible Markup Language,可擴展標(biāo)記語言),用于財務(wù)報告編制、披露和使用的計算機語言,目前用于非結(jié)構(gòu)化信息處理,是一套公開、免費的標(biāo)準(zhǔn),也是財務(wù)信息交換和處理的最新公認(rèn)的標(biāo)準(zhǔn)和技術(shù)。XBRL主要應(yīng)用于財務(wù)報告的自動化處理,為財務(wù)報告信息的準(zhǔn)備、生成、分析和傳輸提供了便利,有助于商業(yè)信息的編制、分類和交流。與傳統(tǒng)的財務(wù)報告方式(如PDF文檔)相比,基于XBRL分類標(biāo)準(zhǔn)的財務(wù)報告可以改善財務(wù)報告的披露效率,提高財務(wù)信息的準(zhǔn)確性、可比性以及透明性,從而有利于數(shù)據(jù)的分析和決策的制定。XBRL財務(wù)報告主要由分類標(biāo)準(zhǔn)(Taxonomy)與報告實例(Instance)組成。XBRL分類標(biāo)準(zhǔn)整體相當(dāng)于商業(yè)信息的詞典,企業(yè)根據(jù)這一詞典,以符合XBRL分類標(biāo)準(zhǔn)語法約束的數(shù)據(jù)信息對詞典中定義的元素進(jìn)行賦值,從而創(chuàng)建出XBRL特殊格式的報告文檔,即為報告實例。
MongoDB是一個功能強大的、靈活的、可擴展的通用數(shù)據(jù)庫系統(tǒng),它具有二級索引,范圍查詢,排序,聚合以及地理空間索引等功能。為了更好的實現(xiàn)擴展性,MongoDB拋棄了關(guān)系模型。因此,MongoDB是一個面向文檔的數(shù)據(jù)庫。在MongoDB里,使用“文檔”這種更容易擴展的模型代替了關(guān)系數(shù)據(jù)庫里中“行”的概念。MongoDB的文檔(document)結(jié)構(gòu)中,允許嵌套的文檔和數(shù)組,這種面向文檔的方式使得在單一的記錄里面表示復(fù)雜的層級關(guān)系成為可能。
總體而言,MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,他支持的數(shù)據(jù)結(jié)構(gòu)是類似Json的Bson這種松散的數(shù)據(jù)格式,因此可以比較方便的存儲較為復(fù)雜的數(shù)據(jù)類型。MongoDB支持的查詢語言非常強大,其語法有點類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,同時支持對數(shù)據(jù)建立索引。
使用MongoDB存儲XBRL實例文件,首先需要將XBRL文件轉(zhuǎn)換成MongoDB能夠存儲的Bson格式的數(shù)據(jù)類型,本文設(shè)計并開發(fā)XBRL-Bson數(shù)據(jù)轉(zhuǎn)換引擎,用于將XBRL文件轉(zhuǎn)換成Bson格式的文檔并存儲到MongoDB數(shù)據(jù)庫中。
3.1 XBRL驗證
在對XBRL數(shù)據(jù)進(jìn)行轉(zhuǎn)換之前,首先需要對其進(jìn)行驗證。驗證的主要目的是檢查XBRL相關(guān)文件(包括分類標(biāo)準(zhǔn)文件與實例文件)是否符合XBRL規(guī)范。因此,XBRL驗證的主要工作包括兩個步驟:首先需要按照XBRL分類標(biāo)準(zhǔn)模式定義文件(Schema)來校驗XBRL實例文件的語法,該步驟先對提交的XBRL文檔是否滿足基本的XML格式要求進(jìn)行檢查,然后根據(jù)XBRL分類標(biāo)準(zhǔn)模式定義文件對XBRL實例文件中的元素進(jìn)行校驗,主要驗證XBRL分類文件中的元素定義是否與模式定義文件中定義的元素相符合,目前,XML驗證工具的發(fā)展已較為成熟,常用的XML分析器包括:SAX、Xerces、MSXML等,本文選用微軟公司的MSXML工具實現(xiàn)XML文檔的解析;完成XBRL的結(jié)構(gòu)校驗之后,需要對提交的XBRL實例文件進(jìn)行語法校驗,驗證XBRL實例文件是否符合分類標(biāo)準(zhǔn)鏈接庫的語義要求,該步驟按照XBRL分類標(biāo)準(zhǔn)鏈接庫(Link base)來校驗XBRL實例文件的語義。
3.2 XBRL-Bson數(shù)據(jù)轉(zhuǎn)換引擎
MongoDB的文件存儲格式為Bson,使用了類似于Json風(fēng)格語法。XBRL文檔轉(zhuǎn)Bson文檔的轉(zhuǎn)換規(guī)則定義:
規(guī)則一:XBRL元素中的文本內(nèi)容轉(zhuǎn)換成Bson文檔對應(yīng)的值類型。
規(guī)則二:既無屬性又無子元素的單個XBRL元素轉(zhuǎn)換為含有一個鍵值對的Bson文檔(document),元素名稱為鍵(key),元素中的文本內(nèi)容為值(value)。
規(guī)則三:具有屬性但無子元素的單個XBRL元素轉(zhuǎn)換為含有一個鍵值對的Bson文檔(document),元素名稱為鍵(key),元素的屬性及元素中的文本內(nèi)容構(gòu)成的Bson文檔為值(value)。
規(guī)則四:既具有屬性又具有子元素的單個XBRL元素轉(zhuǎn)換為含有一個鍵值對的Bson文檔(document),元素名稱為鍵(key),元素的屬性及其子元素構(gòu)成的Bson文檔為值(value)。
規(guī)則五:屬于同一層級的所有具有相同名稱的多個XBRL元素,轉(zhuǎn)換為含有一個鍵值對的Bson文檔(document),元素名稱為鍵(key),元素屬性及其子標(biāo)簽構(gòu)成的Bson文檔數(shù)組(array)為值(value)。
基于上述XBRL-Bson轉(zhuǎn)換規(guī)則,設(shè)計轉(zhuǎn)換算法,算法偽代碼如下:
算法:CreateBsonFromXbrlElement,根據(jù)XBRL元素創(chuàng)建Bson文檔。
輸入:XBRL元素,xElement。
輸出:Bson文檔,bsonElement。
方法:
(1)創(chuàng)建一個空的Bson元素bsonElement;
(2)創(chuàng)建標(biāo)識isDocValue,用于標(biāo)識轉(zhuǎn)換后的Bson元素的值部分為文檔(document)還是普通值(value);
(3)創(chuàng)建一個表示Bson元素的值部分為Bson文檔:ocumentValue;
(4)ifxElement有屬性,將其所有屬性加入到Bson元素的值部文檔documentValue中;
(5)ifxElement有子元素,then;
(6)for xElement的每個子元素child;
(7)if child不存在于同級別文檔中,then;
(8)遞歸:child轉(zhuǎn)換為Bson文檔后直接追加到父XBRL元素的Bson元素的值部文檔documentValue中;
(9)else遞歸:將child轉(zhuǎn)換為Bson文檔后添加到父XBRL元素的Bson元素的值部文檔中相應(yīng)的文檔數(shù)組(BsonArray)中;
(10)endfor;
(11)if xElement無子元素,但有屬性,then;
(12)將xElement中的文本內(nèi)容追加到Bson元素的值部文檔(document)中;
(13)ifxElement既無子元素,又無屬性,then;
(14)設(shè)置標(biāo)識isDocValue=false;
(15)根據(jù)當(dāng)前XBRL元素的情況(是否有子元素與屬性),建立當(dāng)前XBRL元素對應(yīng)的Bson元素并返回bsonElement。
XBRL-Bson數(shù)據(jù)轉(zhuǎn)換工具運行界面如圖1所示。

圖1 XBRL-Bson數(shù)據(jù)轉(zhuǎn)換工具運行界面
使用MongoDB存儲XBRL數(shù)據(jù),可充分利用MongoDB分布式的存儲與計算特性,解決海量XBRL數(shù)據(jù)的存儲與計算問題。本文通過對XBRL文檔進(jìn)行分析,設(shè)計并實現(xiàn)了XBRL-Bson數(shù)據(jù)轉(zhuǎn)換工具,通過該工具,可方便的將XBRL文檔轉(zhuǎn)換成MongoDB所需要的Bson格式數(shù)據(jù),實現(xiàn)XBRL數(shù)據(jù)到MongoDB的存儲。
[1]呂志明.XBRL財務(wù)報告研究[M].北京:經(jīng)濟科學(xué)出版社,2012:20-38.
[2]吳忠生,張?zhí)煳鳎?基于領(lǐng)域本體的XBRL財務(wù)報告轉(zhuǎn)換研究[J].計算機應(yīng)用研究,2013,12(30):3643-3646.
[3]葛永琪,呂科.基于.NET的XBRL數(shù)據(jù)轉(zhuǎn)換引擎研究與實現(xiàn)[J].計算機技術(shù)與發(fā)展,2009,2(19):148-150.
[4][美]霍多羅夫.MongoDB權(quán)威指南[M].第2版(影印版).南京:東南大學(xué)出版社,2014:50-98.
[5]郭遠(yuǎn)威.大數(shù)據(jù)存儲MongoDB實戰(zhàn)指南[M].北京:人民郵電出版社,2015:61-89.
10.3969/j.issn.1673-0194.2015.19.027
F232
A
1673-0194(2015)19-0049-02
2015-08-13
教育部人文社會科學(xué)研究青年基金(10YJCZH004);云南財經(jīng)大學(xué)校科研基金重點項目(YC10A003)。