《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于XQuery的商業報告查詢引擎的設計與實現
基于XQuery的商業報告查詢引擎的設計與實現
來源:微型機與應用2013年第12期
王曉琳1, 樸 勇1, 王秀坤2
(1. 大連理工大學 軟件學院, 遼寧 大連116621; 2. 大連理工大學 電信學院, 遼寧
摘要: 基于XQuery查詢語言的XBRL查詢引擎首先借助JavaCC工具處理輸入的XQuery語句形成抽象語法樹,而后根據XQuery查詢特點編寫程序遍歷此語法樹來簡化查詢語言的處理流程,降低查詢匹配的復雜度,提高查詢效率,利用“SAX+ DOM”方式解析XBRL文件并提取XQuery語句所查詢的數據信息。SAX方法可以提高查詢效率并節省內存消耗,DOM方法可以支持對XBRL文件的上下文相關查詢及頻繁查詢。實驗證明,將二者結合起來應用滿足高查詢效率和低內存消耗雙重需求。
關鍵詞: 軟件 XBRL XQuery 解析器
Abstract:
Key words :

摘 要: 基于XQuery查詢語言的XBRL查詢引擎首先借助JavaCC工具處理輸入的XQuery語句形成抽象語法樹,而后根據XQuery查詢特點編寫程序遍歷此語法樹來簡化查詢語言的處理流程,降低查詢匹配的復雜度,提高查詢效率,利用“SAX+ DOM”方式解析XBRL文件并提取XQuery語句所查詢的數據信息。SAX方法可以提高查詢效率并節省內存消耗,DOM方法可以支持對XBRL文件的上下文相關查詢及頻繁查詢。實驗證明,將二者結合起來應用滿足高查詢效率和低內存消耗雙重需求。
關鍵詞: XBRL; XQuery; 解析器

    XBRL[1](可擴展商業報告語言)是XML語言的擴展應用,主要面向金融財政領域,對其進行數據挖掘和分析具有重大意義,在實際項目中如何方便高效率地對其進行數據提取并降低內存消耗是需要解決的問題。
     W3C制定的XQuery語言中的FLOWR[2]可以高效率地對XBRL進行查詢處理,目前國內外有很多支持XQuery查詢語言的查詢引擎,如國外開源的XQEngine是一個基于JavaBean的用來查詢本地XML文檔的XQuery查詢引擎,該引擎使用SAX[3]解析方式來解析并提取XML中的所需信息,節省了內存也保證了查詢速度。但是由于XBRL中的實例文件是承載財政數據的文件,其節點間存在密切的數據關聯關系,用戶多使用頻繁查詢及復合查詢等查詢實例文件進行數據分析,“邊讀邊扔數據”的SAX方式無法滿足這一需求。本文提出的SAX+DOM方式可以解決這一問題,同時在一定程度上比純DOM[4]讀取方式節省了大量內存。
    圖1給出了基于XQuery的商業報告查詢引擎的整體框架,主要分為XQuery預處理模塊、查詢優化器和查詢執行器3個模塊。傳統的查詢優化包括Schema模式優化[5]、 XQuery語句查詢重寫、XML文檔索引技術、XQuery語句規范化等[6],而本文涉及的解析方式創新及抽象樹的遍歷簡化則是從查詢引擎內部實現角度對XQuery查詢進行了優化,下面著重對查詢引擎內部優化中的XQuery預處理模塊及查詢執行器進行具體闡述。

1 遍歷Javacc生成的抽象語法樹
     XQuery查詢語言被設計用來查詢XML(XBRL本質上也為XML)文件,其語法中的FLWOR表達式是最重要的,它代表 For-Let-Where-Order by-Return。For子句通過將節點綁定到變量,以便繼續循環遍歷序列中的每一個節點;let子句為一個變量賦一個值或一個序列;return 子句定義每個元組要返回的內容;對于where子句,如果其有效布爾值為真,那么該元組就被保留,并且它的變量綁定用在return子句中,反之該元組就被廢棄[7]。
    在查詢預處理模塊,通過JavaCC[8]工具和W3C已定義的XQuery語法規則來進行詞法分析,將輸入的XQuery語句查詢語句中的每個成分都變成帶有特定屬性的節點并生成與之相對應的類(例如顯示的是MainModule等,則語法解析時JavaCC中的JJtree以這些類為節點在內存中生成樹形結構),然后編寫程序遍歷抽象語法樹。下面的算法流程為遍歷FLOWR表達式中For語句對應的抽象語法樹分支的流程,其中MainModule等均為使用JavaCC工具并根據W3C XQuery規范中XQuery BNF定義生成的語法樹中的抽象樹節點名字。XQuery語句解析算法的流程圖如圖2所示,首先取得根節點XQuery開始處理語法樹的內容,循環三次依次得到QueryList、Module和MainModule節點。

    判斷節點MainModule是否為null,如為null,則報錯;如果不為null,取出第一個節點prolog和第二個節點QueryBody,分別對這兩個節點進行分析處理。
    對prolog節點進行處理,左節點prefix和右節點url為命名空間的格式,保存為名值對。在實際項目操作中,QueryBody環節只會出現一個FLOWR語句,很少會有嵌套語句,本文只給出FLOWR的子節點為ForClause的情況,其他子節點暫不考慮。
    判斷ForClause子節點類型,若為用來表示變量所對應的Xpath值PathExpr節點,則取出PathExpr節點的子節點判斷其類型。節點為函數的情況下則調用預定義函數,根據字段名稱在節點樹中定位并保存其內容;如節點類型為分隔符,則表示任意節點都可以作為下一個節點字段的起始狀態。最后將PathExpr節點的處理結果ResultList與Varname變量節點對應并保存。
2 結合SAX和DOM解析XBRL文件
    對于XBRL文件來說,存在DOM和SAX兩種基本的解析手段。如果進行一次性查詢或非頻繁性查詢,建議采用內存消耗小的基于事件驅動模型的SAX解析方式,無需像DOM解析方式中為所有節點創建對象。但當需要大量上下文相關查詢及頻繁查詢時,尤其在查詢后經修改合并而得到的結果集上進行復查詢,則采用DOM方式為好。
    XBRL文件解析分為兩種情況: (1)分類標準比較穩定,對其進行首次框架解析后將在數據庫中將其保存,可以采取單獨的SAX解析方式簡單地進行逐條解析;(2)實例文件承載大量重要數據,用戶多使用頻繁查詢及復合查詢等查詢實例文件來進行數據分析,在這種情況下DOM解析方式是最好的選擇。但是實例文件數量較多時,為XBRL實例文件中所有節點創建對象會大大增加內存需求。這時需要考慮將這兩種方式結合起來使用。在讀取實例文件數據時,利用SAX只讀取用戶所需要的若干小數據文件,并為小數據文件在內存中建立DOM對象,每次讀取新的數據片段,則在已存在的DOM對象上進行添加或者修改等操作。這樣做既有效地節省了大量資源,也充分利用了DOM對象的易操作性。
    圖3為兩種解析方式結合的工作原理,其處理過程為:首先SAX對象objSAX的parse方法被調用來解析XBRL實例文件,在startElement事件中進行元素篩選,如為所需元素,則保存該元素及其子節點元素,在endElement事件中調用DOM對象的loadXML()方法將數據轉化為DOM樹,從而可以方便下一步的數據處理(如頻繁查詢、信息更新等)。這樣不僅保證了快速解析,也在更大程度上支持XQuery的上下文查詢及信息檢索。

3 系統實驗結果
    實驗環境采用Inter Pentium Dual E2160 @1.80 GHz、1 GB 內存、Windows XP。
    本文引擎解析文件時利用SAX+DOM方式,下面的實驗結果證明了使用這種方式的優勢,如圖4所示。使用SAX+DOM方式處理時,只需將所需內容裝入內存,故文檔處理的時間不會因為文檔的大小發生太大變化,事件均小于0.003 s。而采用DOM方法處理文檔,當文檔大小達到一定程度時,需要使用硬盤的虛擬內存,其處理時間也會急劇增大。


    本文所提出的查詢引擎簡化了XQuery語句解析流程和復雜度,節點尋址路線相對于開源軟件XQEngine變得簡單。本實驗利用上述兩種引擎對中國Taxonomy的cas_core_2010-09-30.xsd文件進行查詢,查詢語句如圖5所示,兩個解析器都正確地返回結果2 847個節點。本文提出的查詢引擎用時1.25 s,XQEngine因其復雜的XQuery解析算法使得用時稍長,為3.7 s。

 

 

    本文在深入剖析XQuery查詢語法特點后,結合“SAX+自定義DOM”文件解析方式完成對FLWOR抽象語法樹的遍歷及查詢信息讀取,來簡化XQuery語句的查詢處理流程并降低查詢匹配的復雜度,設計并實現了XBR查詢引擎,提高了查詢效率,降低了內存消耗。該引擎在項目中的數據信息查詢模塊起著重要作用。
參考文獻
[1] 呂科,劉曉峰.XBRL技術原理與應用[M].北京:電子工業出版社,2007.
[2] WALMSLEY P. XQuery權威指南[M].王銀輝,譯.北京:電子工業出版社, 2009.
[3] 馮進,丁博,史殿習,等.XML解析技術研究[J].計算機工程與科學,2009,31(2):120-124.
[4] 楊波.DOM解析器OnceDOMParser的設計與實現[D].北京:中國科學院研究生院(軟件研究所),2005.
[5] 孟曉峰,王宇,王小峰. XML查詢優化研究[J]. 軟件學報, 2006,17(10):2069-20.
[6] PAPARIZOS S, PATEL J M, JAGADISH H V. SIGOPT:Using schema to optimize XML query processing international[C]. Istanbul: International Conference on Data Engineering, 2007.
[7] 華珊珊,謝鉉洋.XML查詢語言XQuery的研究與實現[J].計算機技術與發展, 2009,19(4): 48-50.
[8] VISWANDAHA S, SANKAR S. Java Compiler Compiler(JavaCC)-The java papser generator[J].URL:https://javaCC.dev.java.net.2006.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲精品久久久久久下一站| 久久精品人人做人人爽电影蜜月| 国产在线播精品第三| 国产精品高清在线| 国产精品成人国产乱一区| 欧美日韩精品免费观看视频| 欧美激情一区二区三区| 欧美成人国产一区二区| 免费亚洲视频| 免费在线视频一区| 欧美极品色图| 欧美日韩一区二区三区在线 | 欧美一级久久| 性欧美暴力猛交另类hd| 新狼窝色av性久久久久久| 亚洲欧美中文另类| 欧美在线看片| 亚洲国产经典视频| 亚洲精品视频免费| 在线视频日韩精品| 亚洲一区免费在线观看| 午夜精品久久久久久久久 | 欧美破处大片在线视频| 欧美日韩亚洲激情| 国产精品欧美一区二区三区奶水| 国产精品亚洲综合| 国际精品欧美精品| 亚洲激情国产| 夜夜嗨一区二区| 亚洲欧美中日韩| 亚洲大胆女人| 日韩亚洲视频在线| 亚洲直播在线一区| 久久精品国产99国产精品澳门| 久热国产精品| 欧美日韩专区在线| 国产欧美日韩视频| 影音先锋中文字幕一区二区| 亚洲久久成人| 午夜精品久久久久久久蜜桃app | 亚洲国产精品成人va在线观看| 亚洲人成高清| 亚洲一区三区电影在线观看| 亚洲欧美在线另类| 久久人人爽国产| 欧美片在线观看| 国产日产精品一区二区三区四区的观看方式 | 羞羞色国产精品| 亚洲激情社区| 午夜精品电影| 欧美 亚欧 日韩视频在线| 欧美日韩亚洲一区三区 | 极品裸体白嫩激情啪啪国产精品| 91久久精品一区二区别| 亚洲一区二区三区视频| 亚洲国产成人在线视频| 亚洲伊人久久综合| 另类春色校园亚洲| 欧美亚日韩国产aⅴ精品中极品| 国产一区二区三区成人欧美日韩在线观看| 亚洲国产精品高清久久久| 亚洲网站在线播放| 亚洲欧洲日韩女同| 香蕉久久精品日日躁夜夜躁| 欧美成人高清| 国产日韩欧美二区| 亚洲精选视频在线| 久久成人精品无人区| 亚洲午夜激情在线| 久久婷婷一区| 国产精品久久久久一区二区| 精品电影在线观看| 亚洲午夜精品久久久久久app| 91久久精品日日躁夜夜躁欧美 | 国产九九精品| 亚洲精选在线| 亚洲激情婷婷| 久久精品国产清高在天天线| 国产精品wwwwww| 亚洲国产欧美国产综合一区| 欧美在线电影| 亚洲欧美精品一区| 欧美乱妇高清无乱码| 国内外成人在线| 亚洲综合成人在线| 在线中文字幕一区| 美女久久网站| 国内久久精品视频| 亚洲欧美综合| 亚洲欧美日韩一区在线观看| 欧美了一区在线观看| 黄网站色欧美视频| 欧美一区二区精美| 午夜精品视频一区| 欧美亚洲第一区| 日韩亚洲欧美一区二区三区| 亚洲欧洲精品一区二区三区不卡| 久久久www免费人成黑人精品| 国产精品天天摸av网| 99精品国产在热久久婷婷| 亚洲精品欧美日韩| 毛片一区二区三区| 激情自拍一区| 久久国产精品毛片| 久久久精品一区| 国产日本欧美一区二区三区在线| 亚洲一区二区三区涩| 亚洲欧美在线一区| 国产精品草莓在线免费观看| 夜夜狂射影院欧美极品| 一本色道久久综合亚洲精品按摩| 欧美精品系列| 亚洲人成网站色ww在线| 亚洲狼人综合| 欧美日韩成人在线观看| 亚洲欧洲日产国产综合网| 亚洲精品久久久久中文字幕欢迎你| 久久久久一区| 在线电影欧美日韩一区二区私密| 久久精品卡一| 久久综合国产精品| 在线观看国产一区二区| 亚洲三级色网| 欧美黑人多人双交| 亚洲免费观看在线视频| 在线亚洲成人| 国产精品伦一区| 亚洲欧美国产三级| 久久精视频免费在线久久完整在线看| 国产视频精品xxxx| 久久国产日韩| 蜜臀av性久久久久蜜臀aⅴ四虎| 在线免费观看视频一区| 亚洲伦理久久| 欧美日韩一区在线播放| 亚洲一二区在线| 久久久久久9999| 在线观看成人网| 一级成人国产| 国产精品羞羞答答| 欧美在线啊v| 欧美jizz19性欧美| 一本到高清视频免费精品| 亚洲欧美日韩一区二区三区在线观看 | 亚洲精品乱码久久久久久日本蜜臀| 欧美搞黄网站| 夜久久久久久| 久久成人亚洲| 亚洲国产精品一区二区久| 一本色道久久综合一区| 国产精品日韩在线观看| 亚洲第一精品影视| 欧美日韩国产黄| 亚洲欧美日韩久久精品| 老司机午夜精品| 亚洲免费久久| 久久精品免视看| 亚洲国产精品激情在线观看| 亚洲一级二级| 国产一区二区三区在线观看精品 | 亚洲伦理在线免费看| 亚洲——在线| 国产一区美女| 一区二区三区.www| 国产亚洲在线观看| av成人老司机| 国产午夜精品久久久| 9l国产精品久久久久麻豆| 国产精品一区二区女厕厕| 亚洲精品国产精品国自产观看| 国产精品大片wwwwww| 亚洲电影激情视频网站| 国产精品成人v| 欧美中文字幕在线观看| 欧美日韩亚洲一区二区三区在线| 欧美亚洲网站| 欧美日韩一区二区视频在线 | 午夜欧美精品久久久久久久| 尤物在线观看一区| 亚洲一区二区综合| 在线看片成人| 性欧美办公室18xxxxhd| 亚洲国产日韩精品| 久久aⅴ国产欧美74aaa| 日韩视频欧美视频| 久久久蜜臀国产一区二区| 亚洲精品欧美激情| 久久久999精品| 夜夜嗨av一区二区三区网页| 久久伊人精品天天| 亚洲夜间福利| 欧美精品在线视频观看| 欧美一级一区| 国产精品a久久久久久| 亚洲日本va午夜在线影院| 国产欧美日韩另类一区| 亚洲午夜精品久久久久久浪潮 | 老牛影视一区二区三区| 亚洲无线视频| 欧美日韩成人激情|