文/姚渺波 彭超云
Drupal如何與“公共數(shù)據(jù)庫(kù)”進(jìn)行數(shù)據(jù)交換?
文/姚渺波 彭超云
Drupal是使用PHP語(yǔ)言編寫的開源內(nèi)容管理系統(tǒng)(CMS)和內(nèi)容管理框架(CMF),曾連續(xù)多年榮獲全球最佳CMS大獎(jiǎng)。世界頂尖的前100所大學(xué)當(dāng)中就有71所大學(xué)使用Drupal,國(guó)內(nèi)也有不少高校在使用它建設(shè)網(wǎng)站。然而僅僅只是使用Drupal來(lái)建站,實(shí)在是有點(diǎn)大材小用,做為CMF的Drupal,有著靈活的架構(gòu)和豐富的模塊,通過(guò)它來(lái)構(gòu)建業(yè)務(wù)系統(tǒng),可以讓Drupal在國(guó)內(nèi)高校的“數(shù)字校園”中發(fā)揮出更大的作用,而不僅僅只是個(gè)CMS。
國(guó)內(nèi)大部分高校都建成了“數(shù)字校園”,“數(shù)字校園”建設(shè)的目的是為了消除信息孤島,所做之事簡(jiǎn)而言之就是建立公共數(shù)據(jù)交換標(biāo)準(zhǔn)和“公共數(shù)據(jù)庫(kù)”,確定權(quán)威源數(shù)據(jù)以及在“公共數(shù)據(jù)庫(kù)”與業(yè)務(wù)系統(tǒng)之間進(jìn)行數(shù)據(jù)交換。具體來(lái)講,就是通過(guò)前期調(diào)研,將“公共數(shù)據(jù)庫(kù)”中業(yè)務(wù)系統(tǒng)需要的數(shù)據(jù)推到“中間庫(kù)”中,然后由業(yè)務(wù)系統(tǒng)根據(jù)業(yè)務(wù)所需到“中間庫(kù)”去抽取相關(guān)的數(shù)據(jù)。如果業(yè)務(wù)系統(tǒng)的數(shù)據(jù)被確定為權(quán)威源數(shù)據(jù),那么該業(yè)務(wù)系統(tǒng)還要將其他業(yè)務(wù)系統(tǒng)所需的數(shù)據(jù)通過(guò)“中間庫(kù)”推送到“公共數(shù)據(jù)庫(kù)”中,供其他業(yè)務(wù)系統(tǒng)抽取。
如果想使用Drupal來(lái)構(gòu)建業(yè)務(wù)系統(tǒng),從而在“數(shù)字校園”中發(fā)揮更大的作用,就需要用它來(lái)構(gòu)建業(yè)務(wù)系統(tǒng),并使它能夠與“數(shù)字校園”中的“公共數(shù)據(jù)庫(kù)”之間進(jìn)行數(shù)據(jù)交換,從而使其所建系統(tǒng)不至于成為信息孤島。而這也正是Drupal在高校推廣時(shí)遇到的最大挑戰(zhàn),因?yàn)镈rupal并沒(méi)有一個(gè)現(xiàn)成的解決方案可以完全滿足這一頗具中國(guó)高校特色的需求。因此,筆者仔細(xì)分析了Drupal一些相關(guān)的模塊,并嘗試?yán)眠@些模塊來(lái)解決Drupal與“公共數(shù)據(jù)庫(kù)”數(shù)據(jù)交換時(shí)所遇到的部分問(wèn)題。
縱觀“數(shù)字校園”中的業(yè)務(wù)系統(tǒng),只有少量業(yè)務(wù)的數(shù)據(jù)是權(quán)威數(shù)據(jù)源,這也就意味著大多數(shù)業(yè)務(wù)系統(tǒng)只需要到“公共數(shù)據(jù)庫(kù)”去抽取數(shù)據(jù)。因此,實(shí)現(xiàn)Drupal從公共數(shù)據(jù)庫(kù)抽取數(shù)據(jù)的功能模塊,是其構(gòu)建數(shù)字校園業(yè)務(wù)系統(tǒng)的首要任務(wù)。
而實(shí)現(xiàn)這一功能,首先需要由Drupal創(chuàng)建業(yè)務(wù)所需的內(nèi)容類型(或?qū)嶓w類型),然后通過(guò)相關(guān)模塊將業(yè)務(wù)所需數(shù)據(jù)(大多部分都是人員和機(jī)構(gòu)信息)從“中間庫(kù)”取出(“中間庫(kù)”中供業(yè)務(wù)系統(tǒng)抽取的數(shù)據(jù)是由“公共數(shù)據(jù)庫(kù)”通過(guò)ODI推送過(guò)來(lái)的),在此需要注意的一點(diǎn)就是“中間庫(kù)”中的表結(jié)構(gòu)與內(nèi)容類型中的字段不盡相同。這很好理解:一個(gè)是遵循學(xué)校公共的數(shù)據(jù)標(biāo)準(zhǔn),一個(gè)是遵循具體的業(yè)務(wù)需求。本文以學(xué)生基本信息數(shù)據(jù)為例,介紹Drupal從“中間庫(kù)”中抽取數(shù)據(jù)的功能模塊實(shí)現(xiàn)方法,具體如下:
1.下載并安裝相關(guān)模塊
使用Drush工具下載和啟用Feeds和Feeds SQL模塊:drush en feeds_ui feeds_sql feeds_tamper_ui -y,這樣Drush工具就會(huì)自動(dòng)下載并啟用Feeds、Feeds SQL和Feeds Tamper模塊,同時(shí)還會(huì)下載和啟用它們的依賴模塊CTools和JobScheduler。
2.添加“中間庫(kù)”連接信息
在Drupal的配置文件sites/default/settings.php中,添加“中間庫(kù)”的連接信息,并將其DatabaseKey設(shè)置為mid:
... ...
$databases = array (
// 缺省數(shù)據(jù)庫(kù)的連接信息
'default' =>
array (
'default' =>
array (
'database' => 'test',
'username' => 'Drupal',
'password' => 'Drupal',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
// “中間庫(kù)”連接信息
'mid' =>
array(
'default' =>
array (
'database' => 'mid',
'username' => 'Drupal',
'password' => 'Drupal',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
... ...
3. 設(shè)置內(nèi)容類型
在Drupal中創(chuàng)建一個(gè)名為學(xué)生基本信息的內(nèi)容類型,并根據(jù)需要設(shè)置其字段,如學(xué)號(hào)、姓名、姓名拼音、曾用名、英文名、身份證件類型、身份證件號(hào)、身份證件有效期、出生地碼、出生日期、籍貫、血型等,并按照集成方案設(shè)置字段類型和長(zhǎng)度。一般與“中間庫(kù)”相關(guān)表的字段屬性相同,以方便抽取。其中出生日期可以安裝Date模塊,并將其字段類型設(shè)為Date(Unix Timestamp),這樣方便用戶界面(UI)展示。
4. 設(shè)置Feeds Importer
創(chuàng)建一個(gè)Feeds Importer,將其命名為“導(dǎo)入學(xué)生基本信息”(機(jī)器名:fi_xsjbxx),在編輯界面的Basic settings中將Attach to content type設(shè)為“學(xué)生基本信息”,并根據(jù)業(yè)務(wù)需要設(shè)置好Periodic import(一般設(shè)為every 1 day);
在Fetcher中將Fetcher從默認(rèn)的HTTP Fetcher改為SQL fetcher,并將SQL fetcher設(shè)置中的Database勾選為“中間庫(kù)”的“mid”;
在Parser中將Parser改選為SQL parser,并將SQL parser設(shè)置中的Database選為“mid”,在SQL query文本框中填入SQL語(yǔ)句:SELECT * FROM GXXS_XSJBSJZL(其中GXXS_XSJBSJZL為“公共數(shù)據(jù)庫(kù)”同步到“中間庫(kù)”的學(xué)生基本數(shù)據(jù)子類表名,這里為了方便起見,所以使用了通配符*,一般的用法是需要用到什么字段,就填入什么字段),如果SQL語(yǔ)句沒(méi)有出現(xiàn)錯(cuò)誤的話,會(huì)在下面顯示測(cè)試信息,會(huì)顯示執(zhí)行SQL語(yǔ)句后記錄總數(shù)和字段數(shù),并有個(gè)表格顯示記錄內(nèi)容,以便判斷在SQL query文本框中所輸入SQL語(yǔ)句是否正確;
在Processor中將Processor設(shè)為默認(rèn)的Node Processor,并將其設(shè)置中的Bundle選為“學(xué)生基本信息”,將Update existing nodes選為“Update existing nodes”,Text format保持默認(rèn)的“Plain Text”,Expire nodes保持默認(rèn)的“after 1 day”;接下來(lái)就是最關(guān)鍵的一步了,在Processor中點(diǎn)擊Node Processor中的Mapping,將“中間庫(kù)”數(shù)據(jù)表中的字段與內(nèi)容類型的字段一一對(duì)應(yīng)起來(lái),如圖1所示。
圖1 “中間庫(kù)”數(shù)據(jù)表中的字段與內(nèi)容類型的字段
5. 設(shè)置Feeds Tamper
在完成了上述配置之后,基于Drupal的業(yè)務(wù)系統(tǒng)就差不多可以正常地從“中間庫(kù)”抽取公共數(shù)據(jù)了,但這之前還需要做一個(gè)小處理。“中間庫(kù)”的出生日期根據(jù)部標(biāo)是8位字符,而為了UI展示,在前面Drupal內(nèi)容類型的字段類型的設(shè)置時(shí),是建議安裝Date模塊并將字段類型設(shè)為Date(Unix Timestamp)的,這就意味著在抽取過(guò)來(lái)的數(shù)據(jù)需要在做“一個(gè)字符串到時(shí)間戳”的轉(zhuǎn)換之后,才能夠保存到Drupal中,因此需要用到Feeds Tamper模塊,可以選擇TAMPER標(biāo)簽頁(yè),并找到出生日期這個(gè)Mapping,然后點(diǎn)擊Add Plugin,將The plugin to add標(biāo)簽下的單選框選為“String to Unix Timestamp”,這樣就可以在抽取出生日期時(shí)將部標(biāo)的8位字符串轉(zhuǎn)換成Date(Unix Timestamp)類型保存在Drupal中。而且由于Feeds Tamper是插件式的,還可以自行開發(fā)轉(zhuǎn)換代碼用以擴(kuò)展Feeds Tamper的功能。其設(shè)置如圖2所示。
圖2 自行開發(fā)轉(zhuǎn)換代碼用以擴(kuò)展Feeds Tamper的功能
通過(guò)上面的配置,基于Drupal構(gòu)建的業(yè)務(wù)系統(tǒng)就可以從外庫(kù)“中間庫(kù)”抽取所需的數(shù)據(jù)了,上述三個(gè)模塊相互配合就很方便地完成了數(shù)據(jù)抽取功能,而這么復(fù)雜的功能,需要用戶做的事情卻并不多,不得不讓人感嘆Drupal及其模塊的強(qiáng)大。
然而,由于目前國(guó)內(nèi)高校“公共數(shù)據(jù)庫(kù)”從業(yè)務(wù)系統(tǒng)抽取數(shù)據(jù)的方式比較單一,基本都是基于數(shù)據(jù)庫(kù)層面來(lái)進(jìn)行的。因此Drupal要融入數(shù)字校園就還必須要有一套比較成熟的將數(shù)據(jù)輸出到外部數(shù)據(jù)庫(kù)的解決方案。令人遺憾的是,Drupal雖然有著一套較為成熟的數(shù)據(jù)輸出解決方案,但卻是基于WebService的?;跀?shù)據(jù)庫(kù)層面上的數(shù)據(jù)輸出,雖然也有一些模塊支持,但還不能形成一個(gè)比較成熟的解決方案。
綜上所述,要想進(jìn)一步推動(dòng)Drupal在我國(guó)高校的發(fā)展,就需要解決其與“公共數(shù)據(jù)庫(kù)”的數(shù)據(jù)交換問(wèn)題。好在Drupal不僅是一個(gè)CMS,還是一個(gè)CMF,可以很靈活地通過(guò)編寫一些功能模塊,來(lái)滿足某些功能需求。筆者和高教學(xué)會(huì)信息化分會(huì)Drupal推進(jìn)組的同仁們,正在著手編寫DataHub數(shù)據(jù)交換模塊,嘗試通過(guò)這個(gè)模塊來(lái)實(shí)現(xiàn)符合國(guó)人思維習(xí)慣,并能在數(shù)據(jù)庫(kù)層面進(jìn)行數(shù)據(jù)交換,以期解決Drupal與外部數(shù)據(jù)庫(kù)的數(shù)據(jù)雙向交換問(wèn)題,從而進(jìn)一步加快Drupal在我國(guó)高校的推廣。
(作者單位為溫州大學(xué)現(xiàn)代教育技術(shù)中心)
華為北京ICT巡展:未來(lái)將是全聯(lián)接的世界
本刊訊近日,“華為企業(yè)業(yè)務(wù)2015炫動(dòng)ICT中國(guó)行巡展·北京站”落下帷幕。
華為中國(guó)區(qū)副總裁董明表示,在過(guò)去的2014年,華為公司實(shí)現(xiàn)全球銷售收入約2880億人民幣,同比增長(zhǎng)約20%。目前,華為的產(chǎn)品和解決方案已經(jīng)應(yīng)用于170多個(gè)國(guó)家和地區(qū),服務(wù)全球超過(guò)1/3的人口。中國(guó)市場(chǎng)作為華為全球化業(yè)務(wù)的重要組成部分,企業(yè)業(yè)務(wù)領(lǐng)域、消費(fèi)者業(yè)務(wù)領(lǐng)域、運(yùn)營(yíng)商業(yè)務(wù)領(lǐng)域均實(shí)現(xiàn)了持續(xù)高速增長(zhǎng)。
會(huì)上,華為提出“全聯(lián)接”的概念。董明表示,未來(lái)將是一個(gè)全聯(lián)接的世界。萬(wàn)物互聯(lián)、隨時(shí)在線將成為新常態(tài)。“我們預(yù)測(cè),到2025年,全球?qū)⒂谐^(guò)1000億的聯(lián)接,這將是一個(gè)規(guī)??涨暗氖袌?chǎng),如何存儲(chǔ)與處理、傳送與分發(fā)、獲取與呈現(xiàn)這些龐大的數(shù)據(jù)流量,既是一個(gè)巨大的挑戰(zhàn),也是我們面臨的戰(zhàn)略機(jī)遇?!?/p>
在巡展大會(huì)上,他表示,華為企業(yè)業(yè)務(wù)近幾年在北京大規(guī)模發(fā)展,ICT解決方案在北京各行業(yè)已廣泛應(yīng)用。在教育領(lǐng)域,華為與北京理工大學(xué)、北京交通大學(xué)、北京郵電大學(xué)等高校都有合作,“我們借助智慧校園和三通兩平臺(tái)解決方案,為高等教育和基礎(chǔ)教育信息化建設(shè)提供了完整的解決方案?!?/p>
“教育市場(chǎng)是華為極其關(guān)注的一個(gè)領(lǐng)域?!比A為北京代表處業(yè)務(wù)解決方案部部長(zhǎng)苗實(shí)表達(dá)了華為對(duì)未來(lái)教育信息化的理解:“未來(lái)的校園將是智慧校園,在校園中,會(huì)融合大數(shù)據(jù),云服務(wù),在此基礎(chǔ)上給校園提供智慧的服務(wù)和管理,讓整個(gè)校園校務(wù)管理變得更高效透明?!贝送?,她認(rèn)為,未來(lái),許多校園將會(huì)把自己的優(yōu)質(zhì)教學(xué)資源擴(kuò)展到整個(gè)社會(huì)中去,那么如何更好更方便地進(jìn)行資源的分享,這是整個(gè)行業(yè)值得思考的問(wèn)題。
苗實(shí)表示,今后,在教育領(lǐng)域內(nèi),華為的規(guī)劃是按照“三通兩平臺(tái)”的思路,一是為學(xué)校提供良好的無(wú)線網(wǎng)絡(luò)連接,這是智慧校園的基礎(chǔ);二是通過(guò)桌面云為師生帶來(lái)便利,三是重點(diǎn)推廣敏捷網(wǎng)絡(luò)的解決方案和理念,四是推動(dòng)大型數(shù)據(jù)中心進(jìn)校園。