通過分析比較,系統採用了一個折中方案:對於除正文以外的其它元素,如標題、發文機關、年份等,在資料庫中分別在不同欄位中分離存儲,以方便用戶的查詢;同時又將文檔本身進行存儲,以便於公文的恢復。該方案以一定的存儲開銷為代價,較好地照顧了查詢操作和公文恢復操作。因為除正文以外的其它元素內容很少,通過資料庫中的日期型欄位、 varchar欄位等即可滿足要求,因此引入的額外開銷非常小。實驗部分證明了該方法的有效性。
公文文檔存放在oracle中的blob欄位中,具體是通過delphi中tblobfield類的loadfromfile()和savetofile()方法實現了資料庫的存入和讀出。
3.2 公文內容的自動解析和批量歸檔
為了解決在公文歸檔過程中手工輸入各種元素信息的效率問題,系統實現了公文內容的自動解析。根據公文格式規定,通過程式對指定的公文進行自動分析,解析出各種元素的內容,然後自動填入資料庫。
delphi提供了兩個類:twordapplication和tworddocument[3]。前者可以連線到ms word應用程式中,後者可以連線到一個word文檔。公文中的每一段、每一行以及每一個表格,都可以通過tworddocument對應的如paragraph、line
以及table對象等獲得。根據公文承辦規定中對相關元素位置、格式的定義,配合識別元素的關鍵字信息,通過逐段逐行分析,就可以解析得到元素內容。
實現了對一個公文的解析功能,再配合findfirst、findnext以及findclose等windows的api函式的遞歸調用,就可以查找指定路徑下(包括子目錄)的所有word文檔,然後逐一對之進行解析並將分析結果入庫,就可以實現公文批量歸檔的功能。
公文內容自動解析及批量歸檔功能的實現,簡化了公文歸檔的工作量,用戶只需指定檔案或者路徑,系統即可自動完成剩餘工作,大大提高了公文歸檔的效率。
3.3 基於內容的全文檢索查詢
指定通過公文標題、發文機關等元素內容,查找滿足條件的公文,是基本的資料庫查詢操作,比較容易實現。但是在公文的查找中存在一類需求,即用戶只記得公文的大致內容,如公文內容中包含的幾個關鍵字,但是關於公文更詳細的內容如發文時間、發文機關名稱等並不清除。在這種情況下需要對公文進行基於內容的全文檢索查詢。
該功能的實現流程如圖2所示。對資料庫中的每條記錄,均先將對應的word文檔保存到本地,然後用delphi的tworddocument類打開。tworddocument類的content屬性為range對象,調用其find.execute()方法可以在該範圍內進行文本查找,功能與word應用程式中調用“編輯-查找”功能選單一樣,不僅可以進行基本的查找,還可以通過參數控制在查找過程中是否區別大小寫、是否使用通配符等。如果匹配成功,則該方法返回true,系統為該條記錄做好標記,作為查詢結果中的一條進行顯示。當資料庫中所有的記錄都處理完後,查詢處理結束,所有被標記的記錄均為滿足條件的結果,即內容中包含指定關鍵字的公文。
3.4 文檔版本控制
“臨時公文管理”模組主要是將正在撰寫尚未正式定稿的公文存放到資料庫中進行備份,同時支持同一稿件在撰寫修改過程中產生的多個不同版本維護功能。文檔修改前後的比較、版本控制是這一模組的主要技術點。