尹輯山,曹三省
(中國傳媒大學,北京100024)
新聞行業如果沒有統一的中文新聞技術標準,往往容易造成新聞共享和資源利用的各種困難,即便在一個單位內部的各個系統之間也會形成信息孤島,彼此之間數據交換需要進行繁雜的格式轉換,增加了開發和維護的成本。中文新聞信息置標語言(CNML)的制定結束了國內新聞行業內長期沒有統一標準的局面。該標準不僅能夠很好的適應新聞行業的數字化、網絡化及多媒體化,并且為新聞領域多媒體發信息的組織、發布、交換、存儲、應用建立一套非常完整的新聞數據、元數據、受控詞表等相關技術,而且方便新聞媒體單位之間及單位內部各個系統之間的新聞信息的交流和共享[1]。
目前國際上的新聞標準有多種,如國際電訊理事會(IPTV)的 NewsML1.x、NITF、NewsCode、新華社的XinHuaML、國際數字企業聯盟的Prism、ISO/IEC的Mpeg7,都柏林核心元數據(Dublin Core),國家廣播電影電視總局的音頻、視頻編目標準等等[2]。其中,最具有重要影響力的是IPTV的NewsML1.x,目前是NewsML1.2版本。NewsML核心是定義了一種一對多的基本結構,它為新聞數據的互換和管理提供了框架。
CNML新聞標準與NewsML標準相比較,CNML新聞標準在元數據管理機制和新聞數據的格式上更有優勢,一方面,它規定了新聞流通領域內的企業型用戶可以針對自己的業務特點提供相應的元數據擴展機制;另一方面,它將新聞數據層和語義層分離開來,便于新聞數據的管理和挖掘。
CNML新聞標準不僅在新聞數據的交換方面提供了統一的新聞元數據標準和規范的交換格式,而且還能夠充分滿足媒體前瞻性的要求,對所交換的數據提供更多語義層面的支持,提供稿件之間和內容項之間豐富的關聯關系。
首先,CNML標準依托于XML技術,XML是可擴展標記語言 (Extensible Markup Language)的縮寫,用于標記電子文件使其具有結構性的標記語言,能夠允許用戶自己定義的標簽來進行標識的語言。XML是標準通用標記語言(SGML)的子集,能夠很好的被應用到系統之間進行數據交換。目前,XML語言已經成為信息交換的通用語言。因此,CNML標準具有先天的優越性。該標準中為新聞領域多媒體信息的組織、發布、交換、存儲及應用定義了一套非常完整的新聞數據、元數據、受控詞表等相關技術標準,使得新聞文檔更加規范化、標準化。不同系統之間或系統內部之間進行信息交換就可以大大簡化了數據交換的過程,避免了不同標準之間的相互轉換及完整性驗證等處理步驟。
其次,從CNML標準的結構方面來看,該標準將一篇完整的CNML新聞文檔分成三個層:文檔層、稿件層和內容層。文檔層包含了用于信息交換的信封(envolope)和稿件;稿件層包括元數據組、多媒體內容及稿件關系;內容層包含內容元數據組、數據內容及內容關系。另外,稿件還定義了關系描述和受控詞表及引用機制。從CNML標準的各個層次中可以發現,層次之間是一種包含關系[1]。具體結構如圖1所示:

圖1 CNML標準層次結構模型圖
另外,在統一層中,各個模塊是相對獨立的。比如,在稿件層,元數據組、多媒體內容以及稿件關系都是相互分離的表示的,這種設計使得標準結構更加清晰,便于準確獲取對應部分內容。而且在元數據組、多媒體內容、以及稿件關系的內部設計也都是繼承了它們上一級層次的設計模式,各個模塊彼此相對獨立,對各部分數據的管理也就更加方便了。這種各個模塊相對獨立的設計方案,很類似面向對象語言的設計。每個模塊都是一個對象,所有的模塊都繼承了CNML文檔這個最原始的對象,所有的模塊都是它的子孫模塊。不僅如此,CNML標準也提供了擴展機制,能夠適應未來可能出現的新的數據交換新需求。該擴展機制同樣非常類似面向對象語言中的繼承關系。因此,在對CNML新聞標準文檔進行處理的時候,可以將其映射成許多相對獨立但彼此又有關聯的對象。標準中的稿件級關系和內容項級關系在對數據進行關系型數據庫存儲時將會非常有用。
本系統是采用B/S模式基于CNML新聞標準的能夠實現新聞數據內容的上傳、CNML標準文檔的生成以及新聞數據內容的顯示等功能。
系統后臺使用Java編程語言針對不同媒體類型的新聞內容,即對應CNML標準中的不同類型的內容項,開發了一系列的程序接口來實現新聞數據的上傳。根據CNML標準的結構特點,我們采用了模版的方式來進行CNML標準文檔的生成。比如,信封(envolope)、稿件關系、內容項關系等內容進行模版化設計。當進行新聞內容上傳時,首先創建一個空的XML文檔,然后讀取模版內容,并寫入到空的XML文檔中。然后,將上傳的新聞數據通過Dom4j組件按照CNML標準來進行封裝,并遍歷XML文檔,找到內容層并將封裝的內容項插入指定位置。
XML與數據庫都有存儲數據的能力,然而,數據庫提供了更強大的數據存儲和數據分析能力。如果系統存儲要求不高的話,可以采用XML直接存儲數據,并采用XPath、Dom4j等技術來對其進行解析。然而,這種方式對CNML文檔管理上也會存在一定麻煩,比如,文檔名的沖突問題,對文檔的內容的修改和刪除。CNML標準中各個模塊相對獨立,并且各個層是包含關系,由此使用面向對象的設計方法,將各個模塊映射成一個個對象,在層次結構中處于內層的作為外層的屬性。通過JAXB數據綁定技術,根據CNML實例文檔生成Java類。Java類中的屬性,對應了CNML文檔中屬性和子標簽[3]。然后通過ORM框架iBatis將對象和數據庫中的表格進行關聯。
整個系統采用MVC模式,JAXB生成的Java類作為M(Model層)。C(Controller層)用來處理客戶端的請求,通過調用持久層類的業務方法進行數據庫操作[4]。整體框架設計如圖2所示:
另外,系統中還設計了對新聞信息的有效管理設計。包括對稿件層和內容項層內容的增刪改查等操作。系統后臺設計效果圖如圖3所示:

系統前端主要通過Ajax技術,從服務器端獲取新聞數據,然后在瀏覽器中進行呈現。通過Ajax異步通信技術可以有效減少通信所需的帶寬,而且對數據的處理主要放在客戶端瀏覽器來執行,減輕了服務器端對數據處理的壓力。
在首頁中對服務器端發送請求給Controller層對象,Controller層對象調用Service層對象的方法按照時間從數據庫中查找較新的新聞標題列表,并返回給客戶端。通過JavaScript開發框架jQuery在客戶端給每個新聞標題來添加click事件,click觸發事件中調用 jQuery封裝的 Ajax方法$.getJSON(url,[data],[callback])。url地址設置成 Controller層對象,data參數中填寫要獲取數據的標識信息。Controller層對象將會從數據庫中查找data參數中指定的數據,封裝成.json格式的文件后返回給客戶端。callback參數指向的JavaScript方法,來完成對返回的.json格式的文件里數據進行解析,并將數據添加到在html對應標簽中[5]。具體流程及效果如圖4、5所示:

圖4 系統前端設計流程圖

圖5 系統前端效果圖
在之前的系統版本設計中,我們未采用數據庫來進行數據的存儲,而是將數據僅僅存儲在CNML標準文檔中,而且在系統前端的設計中是獲取一個完整的CNML標準新聞。這種設計一方面不符合MVC開發模式,不利于代碼的重復使用,各層之間密切耦合;另一方面,浪費了資源,一個完整的CNML標準文檔里有大量的元數據、新聞信息數據,然而在新聞閱讀端我們僅僅需要的是一些核心的數據。在本次改進版本設計中,采用了MVC的開發模式,使用jQuery框架對Ajax封裝一系列方法,采用Json格式來進行通信,大大提高了通信效率節省了帶寬。
數據綁定是指將一些數據(XML文檔或者數據庫中),通過程序表示這些數據的過程。數據綁定API允許通過編程來操縱XML。
JAXB(Java Architecture for XML Binding)是一個業界的標準,是一種能夠從XML或Schema生成Java類的技術。JAXB將XML文件解組成Java內容對象樹。應用程序可以直接訪問表示該數據內容和結構的Java對象。JAXB綁定編譯器將 XML Schema作為輸入,生成能夠反映Schema定義規則的Java接口和類的包,并將其進行編譯組成一個公用的JAXB程序包,此過程成為解組(unmarshalling)。編組(marshalling)與解組的過程正好相反,根據Java內容樹返回XML實例文檔的過程[6]。
使用JAXB進行數據綁定,首先要引入開發所需要的jar包和環境變量JAXB_HOME、JAXB_LIBS的設置。JAXB_HOME變量用來指定JAXB的安裝目錄,JAXB_LIBS指定開發所需的jar包的位置。第二步,用 xjc.bat命令根據 XML Schema生成JAXB Java類。如:
xjc.bat CNML_v2.020091106.xsd-p com.cuc
其中,CNML_v2.020091106.xsd是源 XML Schema的文件名;com.cuc是JAXB編譯器將生成的Java接口類存放的包名。然后,將所生成的類進行編譯[7]。最后,通過編程的方式,來生成具體CNML標準的實例文件。如:
JAXBContext jaxbC=JAXBContext.newInstance(PACKAGE_NAME);
Unmarshaller unmarshaller = jaxbC.createUnmarshaller();
Object obj=unmarshaller.unmarshal(new FileInputStream(inputFilename));
首先創建一個JAXBContext的實例對象,并且指定生成的類存放的包名。然后,通過該對象創建一個解組對象unmarshaller,最后一步將根據CNML標準實例文檔來生成具體的java類實例對象[8]。
通過JAXB生成的java對象可以作為javabean來與數據庫中的表進行映射。
Ajax是Asynchronous JavaScript and XML的縮寫,其核心是通過XMLHttpRequest對象以異步的方式,向服務器發送數據請求,并接受服務器返回的針對請求的數據。在2005年,Google通過其Google Suggest使Ajax逐漸變得廣泛應用。Ajax并不是一種新的編程技術,其在Web應用方面能夠創建更好更快及交互性更強的特性。Ajax是一種獨立于服務器的技術,其最大優點是能夠在不更新整個頁面的前提下與服務器端進行通信,從而節省了帶寬。
Ajax應用時首先要實例化一個異步對象連接器。在實例化時要充分考慮不同瀏覽器兼容性問題,主要針對主流瀏覽器 IE和 FireFox。創建完XMLHttpRequest對象后,利用 open(method,url,asynchronous,usr,password)來建立一個請求,并使用send()向服務器發送請求。如果open()方法中的請求方式為“post”,則需要使用setRequestHeader()來添加HTTP頭。然后在send()方法中規定發送請求的參數數據。
XMLHttpRequest對象有兩個屬性responseText和responseXML。在CNML新聞標準應用中,我們可以使用Ajax來從服務器端獲取XML格式的新聞文檔。responseXML屬性能夠獲取服務器端返回的以XML格式進行組織的數據。然后在XMLHttpRequest對象的onreadystatechange事件屬性中,對獲取的CNML新聞文檔進行處理,通過 JavaScript的DOM來進行新聞數據的解析[9]。其詳細過程如圖6所示:

圖6 Ajax應用流程
在JavaScript的jQuery框架中對Ajax進行了很好的封裝,并且很好的解決了瀏覽器兼容問題。jQueyr中使用全局函數$.get(url,[data],[callback],[type])、$.post(url,[data],[callback],[type])方法來異步加載服務器端的CNML新聞文檔。url,表示等待加載的數據地址,可選參數data表示發送到服務器的數據,其格式為key/value,可選項callback參數表示加載成功時的回調函數。可選參數type參數表示返回數據的格式,如HTML、XML、Js、Json、text等。在系統設計中,我們要獲取CNML標準新聞中的有效數據,可以將type設置成“XML”,服務器端就可以從數據庫中獲取數據并用DOM4J組件的API將數據組織成XML文檔格式,并返回給客戶端。
在不同應用系統之間或應用系統內部之間進行數據交換,XML數據格式無疑是首選,在一些Web應用中可以通過Json格式進異步獲取數據從而提高通信效率。當要對新聞數據格式進行解析時,XML數據格式和Json數據格式相比較就顯的會有些冗余,因為XML數據格式中需要每個標簽都要關閉,這樣就會造成一定程度上的資源浪費。Json是另一種輕量級的數據交互方式。jQuery同樣對采用Ajax技術來從服務器獲取Json格式數據的方法進行了很好的封裝,$.getJSON(url,[data],[callback])。在可選參數data可以用來指定想要獲取CNML新聞標準信息中具體部分或指定位置的數據內容。服務器端將根據請求參數從數據庫中獲取數據并生成.json格式的文件[5]。.json格式文件內容如下所示:
[{“Headline”:”中國人劉翔創造歷史—男子110米欄記錄歷史回顧”,
“FullName”:“張曉明”,
“DataContent”:“中國選手劉翔成為2006年瑞士洛桑田徑超級大獎賽的超級明星,圖為接受各國記者采訪”,
…
}]
callback參數是對獲取到的.json文件進行解析的回調函數,并將對應數據顯示到html標簽中。由此可見,.json格式文件與XML格式文件相比,對資源信息的描述更加精簡,有效減少通信數據的冗余。
本文首先對中文新聞信息置標語言進行了研究,通過與國際標準進行比較體現了它在一些設計上的優越性。并且基于該標準設計了一套應用系統,能夠實現新聞數據的采集和信息發布。客戶端能夠通過瀏覽器進行新聞的閱讀。整個系統在原來版本的基礎上又采用了MVC的開發模式,使用JAXB開發組件,將CNML標準文檔映射出相應Java類,充當Model層組件,并且與關系型數據庫進行映射。在新聞數據解析時,采用了Web2.0的Ajax技術,Ajax的異步通信可以有效節省帶寬,并且使用輕量級的Json格式文件能夠進一步節省資源。
[1] 陳明祥.中文新聞信息置標語言使用指南[M].北京:新華出版社,2008.
[2] 武國衛,刁毅剛,黃菁.中文新聞信息置標語言之創新研究[J].中國傳媒科技.2005.11
[3] 楚昌林.XML到關系數據庫轉換研究[J].微型機與應用,2009.11
[4] 趙俊峰.Java Web應用開發案例教程——基于MVC模式的JSP+Servlet+JDBC和AJAX[M].北京:清華大學出版社,2012.
[5] 陶國榮.jQuery權威指南[M].北京:機械工業出版社,2011.
[6] 王岳昭,冒東奎.Java綁定XML架構的技術內涵[J].北京工業大學學報,2006,3(32).
[7] Brett McLaughlin.Practical data binding:Get your feet wet in the real world[DB/OL].http://www.ibm.com/developerworks/library/x-pracdb1/index.html#.
[8] Brett McLaugblin.Java &XML,SecondEdition[M].O’Reilly& Associates,2004.
[9] 馬勞可林.深入淺出Ajax[M].南京:東南大學出版社,2008.