姜 贏, 高 巾, 張 婧, 朱玲萱, 張如玉
1(北京師范大學珠海分校 管理學院, 珠海 519087)
2(中國移動通訊集團廣東有限公司珠海分公司 信息技術中心, 珠海 519015)
標簽式組裝建站系統研究①
姜 贏1, 高 巾2, 張 婧1, 朱玲萱1, 張如玉1
1(北京師范大學珠海分校 管理學院, 珠海 519087)
2(中國移動通訊集團廣東有限公司珠海分公司 信息技術中心, 珠海 519015)
針對我國中小企業電子商務需求現狀, 提出了基于第三方電子商務平臺的組裝建站系統. 介紹了基于ASP.NET(C#)的組裝建站系統的標簽庫和標簽解析引擎的設計和實現思路, 并通過系統實現證明了方案的可行性.通過標簽的組裝, 不僅可以完成中小企業的網站建設功能, 更可以通過組裝和添加多種功能和模塊以擴展和建設第三方電子商務平臺.
組裝建站; 標簽; .NET
電子商務是未來的發展趨勢, 越來越多的企事業開始認識到網絡營銷對企業發展的重要性. 通過建設網站, 企業可以不受地域和國界的限制, 讓更多地區的人們能夠通過網頁認識和了解企業, 甚至還能夠實現網上交易、客戶信息反饋, 極大的方便了企業與客戶之間信息交流, 擴大企業的知名度. 因此, 中國電信、中國移動、中國網通等基礎的電信運營商現在紛紛提供電子商務增值服務, 已經開始要著重開展面向中小企業的ISP服務、自助建站服務等等[1]. 另外, 專業網絡公司或運營商開發出自助建站工具(DIY)提供企業在線使用, 企業每年只需繳納很少的服務費用, 就可以擁有自己的網站. 通過使用自助建站系統, 企業不需要聘請專門的技術人員, 只要會簡單的打字, 處理圖片, 就可以根據頁面的提示信息維護網站內容. 專業網絡公司或運營商還需要整合資源, 建設一個在各個DIY網站之上的第三方電子商務平臺, 通過搜索和挖掘各個DIY子網站的信息內容, 整理后發布在第三方電子商務平臺上. 平臺的內容會隨著子網站的增加而不斷的豐富和壯大, 平臺的價值和人氣也會不斷提升, 反過來總網站也可以為DIY網站的企業提供更多的信息和更好的服務. 這樣能形成一個企業聯盟式的電子商務網絡家族, 必然比單個小企業的網站有更強的生命力, 可以說是B2B模式和B2C模式的結合, 更適合電子商務網站的穩健發展[2].
自助建站系統在功能上, 主要分為整體類, 擴展類,組合類. (1)整體類服務商提供固定化網站欄目和模板,由客戶選擇后填寫進入相關內容既可. 本類系統優點在于頁面經過專業美工設計, 整體效果美觀; 但欄目固定擴展性小. 因而依附類服務商中, 針對某一行業的門戶網站大多選擇使用本類系統. 據不完全統計, 截止2015年底此類商家約200家, 如中國營銷網自助企業網站建站平臺等都屬于這一種. (2)擴展類服務商給用戶一定選擇空間, 用戶可以根據自身的需要進行欄目的設置, 并可自行建立多級目錄(一般為二級目錄). 本類產品優點在于給了用戶一定的選擇空間, 可以放置其特有欄目和信息; 但欄目的自行建立破壞了整體效果的美觀. 因而此方式相對靈活, 且技術難度不大, 所以獨立類服務商、門戶類服務商(其他服務與建站系統無關)與大部分商務信息類門戶網站(跨行業進行信息服務的門戶網站)所選擇. (3)組合類服務商在市場中極少, 部分服務商給了用戶最多的選擇, 使用戶可以在建立欄目同時選擇欄目使用功能模塊的功能, 并可以對頁面中更多元素進行改變. 如表1所示, 這三類建站系統雖然都能在某種程度上滿足中小型企業用戶的需求,但都不具備良好的擴展性, 沒有多種功能的復雜組合及疊加.

表1 三類自助建站系統對比表
面向中小型企業的自助建站系統作為第三方電子商務的重要應用, 其發展趨勢必然是更加靈活的組裝方式, 更加安全的服務及與商務平臺更好的集成, 甚至于服務于商務平臺本身的建設和功能擴展[6,7]. 在這樣的背景下, 筆者提出了基于第三方電子商務平臺的標簽式組裝建站系統. 通過標簽的組裝, 不僅可以完成中小企業的網站建設功能, 更可以通過組裝和添加多種功能和模塊以擴展和建設第三方電子商務平臺.
如圖1所示, 本系統便采用了插件思路, 將細粒度的若干種可重用的網站功能封裝在不同的標簽中, 將粗粒度的功能封裝在模板和欄目中, 從而形成類似于插件的表現方式, 通過標簽解析引擎統一進行管理.
如圖2所示, 本系統在標簽設計上完全遵循XHTML標準. XHTML就是一種XML應用. 它采用XML的DTD文件格式定義, 并運行在支持XML的系統上. 遵循此標準, 本系統將業務流程的數據標記文件與外觀文件完全分開, 通過XML標準接口進行數據傳輸與解析, 從而大大增加了系統的可擴展性. 當系統需要增加新的功能時, 只要確保新設計添加的標簽符合XML標準并有相應的標簽類支持, 標簽解析引擎便可以順利將其解析, 將新的功能注入系統中.

圖1 標簽式組裝建站系統的插件示意圖

圖2 組裝建站系統基于XHTML的可擴展性
3.1 標簽程序實體對象設計
如圖3所示, 當組裝建站標簽解析引擎掃描到XHTML文件中的一個標簽時, 它首先通過一個類似于標簽倉庫管理的類將此標簽字符串與數據庫中的標簽定義相匹配, 進而找到此標簽實例所對應的標簽定義類, 由此標簽定義類實例化此標簽對應的標簽類實例與標簽處理類實例, 接著由此標簽類實例調用其對應的標簽處理工具類實例, 從而將此標簽實例對應的代碼生成并傳回, 為下一步組裝做好準備. 整個標簽處理過程涉及到4個標簽相關實體. 他們分別是“標簽倉庫管理實體”、“標簽定義實體”、“標簽實體”、“標簽處理實體”. 遵循面向對象程序設計的思路, 筆者在程序中對應這4種對象分別定義了4個類.

圖3 標簽作業流程示意圖
(1) 標簽定義倉庫(TagDefinitionRepertory)
它對標簽定義類(TagDefinition)的管理、新建及初始化. 管理行為包括添加、刪除標簽定義類; 根據特定條件(如功能限制)查詢并返回符合條件的標簽定義類實例集合; 查詢特定標簽屬性的種類(如查詢名字空間的種類). 新建及初始化行為包括根據namespace和localname在數據庫中查詢特定的標簽定義類并初始化其基本屬性, 新建并返回標簽定義類(TagDefinition)實例.
(2) 標簽定義類(TagDefinition)
其實例代表特定名字空間(localname)和本地名(namespace)所組成的標簽的特定含義, 是一個抽象實體. 特定的標簽定義類與特定的標簽類和標簽處理類相關. 主要負責新建并初始化標簽實例和標簽處理類實例. 行為包括新建標簽類(Tag)實例, 新建其對應標簽處理類(TagHandler)實例, 關聯二者, 將標簽處理類實例的引用賦予標簽類實例. 初始化標簽處理類實例的所有屬性. 初始化標簽類的部分屬性.
(3) 標簽處理類(TagHandler)
其實例代表完成特定標簽行為的工具實體. 主要負責標簽代碼的底層加工. 行為包括讀入特定后臺源代碼塊, 根據傳入參數對源代碼進行加工替換. 完畢后返回給標簽實例.
(4) 標簽類(Tag)
其實例代表美工模版中使用的每個具有唯一名字空間和本地名組合的標簽. 主要負責傳遞前臺參數, 調用其對應的標簽處理類實例, 完成標簽實例為前臺和后臺生產特定代碼的工作.
3.2 標簽類設計
標簽分類考慮了存儲平臺與標簽功能自身特點兩方面的因素. 大致由“數據類”、“非數據類”、“平臺級別”與“企業級別”四個標準交叉組合, 再穿插具體功能細節組成. 非數據類標簽不涉及到企業特定數據中數據的存取, 只依靠前臺參數的傳遞便可以直接形成頁面顯示; 數據類標簽涉及到從特定企業的特定數據庫中讀取數據; “平臺級別”與“企業級別”標簽的區別在于涉及數據內容的不同, 平臺級別的數據主要是整個組裝建站平臺上所涉及存儲的數據, 而企業級別的數據則深入到特定行業中的不同企業數據庫中. 考慮到平臺將來的可擴展性, 除去現在需要的標簽, 筆者還專門預留了一類“第三方標簽”(ThirdPartyWebServiceTag),方便將來有了新的應用后通過Web服務等方式添加到組裝建站平臺中.
如圖4所示, 標簽分類主要包括: (1) AbstractTag:所有標簽類的抽象父類, 里面處理所有標簽都具備的一些方法操作和屬性. (2) CustomAbstractTag: 當前組裝建站平臺自身所有標簽的抽象父類, 處理組裝建站自有標簽都具備的一些方法操作和屬性. (3)ThirdPartyTag: 第三方標簽的抽象父類, 處理組裝建站所有第三方外來標簽都具備的一些方法操作和屬性.(4) WebServiceTag: 第三方標簽的一類, 針對通過WebService與組裝建站平臺集成的標簽類. (5) PlainLinkTag:非數據鏈接標簽類, 專門處理非數據鏈接標簽, 只根據屬性給與的數據生成鏈接, 不需要從數據庫中存取. 其他標簽分類與(5)類似, 實現不同的功能, 故不再贅述.

圖4 標簽分類
3.3 標簽屬性參數設計
標簽的屬性主要用于傳遞必要的數據. 數據的來源有4個: (1) 來自于數據庫, 即在生成代碼時標簽調用數據接入層對象從而從數據庫中取得的數據(例如“DBColumnName”, 數據標簽定義所涉及到的數據庫字段, 用于直接存儲數據); (2) 來自于美工給出的數據,如美工唯一確定的標簽ID, 以及一些相關的鏈接地址等(例如“SuccessHref”, 操作成功后的跳轉鏈接地址);(3) 來自于模版頁面的上下文, 如列表標簽中用于確定列表范圍的一些屬性數據、一直跟隨頁面傳遞的行業ID數據等(例如“FatherDBColumnName”, 標簽的父標簽對應的數據庫字段名); (4) 由程序自動合成的數據, 如每個標簽最終的唯一ID(例如“CodePath”, 代碼文件的路徑, 用于和標簽處理類所知道的代碼文件名進行組合從而找到最終代碼文件).
3.3 標簽后臺代碼段參數設計
標簽的主要任務便是根據前臺傳入的數據生成相關的后臺代碼. 本系統中標簽將前臺及數據庫中的相關參數進行處理和傳遞, 在找到對應的后臺代碼后填充其中需要的參數, 進而生成最終返回前臺的程序代碼, 這其中, 參數的設計非常重要. 表2給出了標簽后臺代碼的部分參數及其說明.

表2 標簽后臺代碼參數說明
如何在現有的標簽類和標簽庫基礎之上增加新的標簽?本系統提供以下3種機制: 新建標簽類、只擴展標簽定義; 只用擴展字段.
4.1 新建標簽類
如果新標簽完全是新的功能, TagMeta表中沒有對應的標簽代碼, 比如要添加投票功能, 那么需要新建功能和標簽類. 主要步驟如下:
(1) 新建功能類, 在Functions表中添加功能定義相關數據, 獲得功能id號, 填寫到TagMeta_FunId字段;(2) 根據新功能添加數據表;(3) 編寫新功能的代碼;
(4) 對代碼進行切割, 分離出新的標簽代碼, 分析新的標簽代碼所需要的參數以<<>>標識, 新代碼以.txt文件存儲起來, 文件名填寫到TagMeta_CodeName字段;
(5) 分析標簽的優先級別, 填寫到TagMeta_Level(如列表list為2, 具體條目details為1, 其他為0, 優先級別高的模版引擎會先處理);
(6) 分析新的標簽代碼所需要的參數, 如果恰好TagMeta_ClassType中的某個標簽類與之符合, 則可以重用這個標簽類, 即該標簽屬于這個標簽類; 如果沒有符合的, 則需要重新設計新的標簽類和標簽處理類對參數進行處理, 并將其填寫到TagMeta_ClassType和TagMeta_HandlerType字段;
(7) 填寫標簽的LocalName, Namespace和中文名稱介紹等;
(8) 根據(2)中數據表的信息, 填寫標簽TagMeta_DBColName, 如果TagMeta_Level為0, 則填寫字段名, 如果TagMeta_Level為2則填寫表名, 如果TagMeta_Level為1則填寫表的標識字段名(通常為…_id);
(9) 根據(6)中分析的參數, 填寫標簽對應的美工屬性到TagAtrTagDef表中;
(10) 根據(8)中填寫的屬性, 填寫標簽父子對應關系到TagLevel表中;
(11) 如果是數據標簽, 即需要在后臺輸入數據的,需要開發相應的后臺管理頁面, 并將頁面掛在相應的功能類下面作為管理入口.
4.2 只擴展標簽定義
如果新標簽的是在原有的功能上進行擴展, 并不需要添新的功能和標簽代碼, 則(1)至(5)步可以省略,使用已經有的功能和標簽代碼. 如新聞和產品都是使用同一種標簽代碼, 同一種標簽類, 卻是不同的標簽定義(即Namespace和LocalName不同).
4.3 只用擴展字段
如果已經有擴展字段標簽, 則上文中的步驟(1)至(10)步都可以省略, 只需要使用這種擴展字段標簽就能完成, 比如對企業增加一個“企業形象代言人”屬性, 則只需要使用 5.1 標簽解析引擎基本原理 標簽解析引擎是標簽式組裝建站系統的核心, 它負責模板的解析、檢測、注冊、生成和部署. 它能將XHTML模板解析成基于Asp.Net的網頁(包括前臺aspx頁面和后臺code_behind代碼). 每一組模板頁面被解析生成一個模板網站, 這個模板網站包含各種功能、欄目. 企業可以根據自己的需要選擇模板網站, 設計并填充符合企業特點的數據. 由標簽解析引擎生成的模板網站提供靈活的管理后臺, 可自由編輯排版、智能式操作, 隨時新建網站欄目或更新欄目、不同用戶可分配不同管理權限、設置不同內容的訪問權限. 5.2 具體實現過程 第一步: 從數據庫中讀取模版號后, 根據模版號,調用模版函數, 得到模版對象, 這個模版對象中包含了這個模版里的每個頁面的引用, 每個頁面包含了這個頁面的以DOM形式存放的靜態和動態文本和以引用方式存在的本頁面的Tags. 第二步: 循環這個模版的每個頁面, 執行第三步的操作. 第三步: 首先構建一個PageBuilder對象, 包含Aspx實例和CsCodeBehind實例, 前者包含了封裝了需要寫在 第四步: 循環TagCollection, 執行第五步的操作. 第五步: 對每個Tag, 先從DOM節點和標簽的對照哈希表里, 由DOM節點為鍵, 取出Tag里面的string類型的AspxCode屬性, 包裝成一個DOM節點, 替換前者的DOM節點. 以保證最終生成的DOM是前臺頁面的DOM文檔. 同時執行第六步. 第六步: 由DOM節點為鍵取出Tag里面的將要填入后臺代碼的string類型的數據, 這里面分為三個部分,第一部分對應的是將要生成的頁面的Using指令和類名以及命名空間, 第二部分對應的是將要生成的頁面的PageLoad代碼, 第三部分對應的是將要生成的頁面的普通函數. 對于第一部分而言, 可以通過單個Tag的屬性UsingCode得到. 對于第二部分而言, 又有以下三種情況, 第一種情況是預處理指令, 這需要放入PageLoad的最前面. 第二部分是Page級別的之間的關系, 這個也需要放入PageLoad的前面, 但是相較于第一部分, 在其后, 第三部分就是一些這個頁面內部的需要寫入PageLoad指令的代碼, 而這一部分內也是有先后順序的. PageLoad對象, 對每個tag需要存放文件的位置有預先定義好的級別. 首先將預處理指定當做有最高級別的代碼塞入PageLoad對象的用來存放優先級別最好的屬性當中去. 再將Page級別的之間的關系也當作有最高級別的代碼塞入此屬性中. 完成了要優先輸入的代碼之后, 就可以根據Tag的具體級別分別塞入PageLoad對象里, 優先級別高, 中, 低 的對應屬性當中去. 第七步, 已經有了存在內存里的封裝了前臺代碼的Aspx對象和封裝了后臺代碼的CsCodeBehind對象.那么可以一次性將這些對象里面的代碼輸出到相應的文件夾里. 第八步, 第五步的循環結束, 調用方法將模版文件夾里面的所有文件都拷貝到目標文件夾中, 完成整個模版引擎的工作. 重復進如第五步的循環. 第九步, 重復進入第二步循環, 直到此模版內沒有需要處理的頁面. 本系統總共設計和實現了72個標簽, 主要包含功能模塊: (1)產品展示: 發布和維護自己的產品信息; 商品分類顯示; 客戶可以詢盤、咨詢; 產品按目錄管理、支持產品訪問權限設置; 產品信息可與電子商務平臺的信息自動同步. (2)企業自有會員管理: 提供會員注冊、登錄和權限修改等. (3)新聞發布: 后臺發布新聞內容, 首頁自動生成鏈接. 本系統還設計了20套涵蓋物流、外貿、酒店、旅游、制造、工業園等不同行業特色的網站模板, 可以滿足大部分中小企業資助建站需求. 2蔣紅林. 淺談企業網站運營維護. 計算機光盤軟件與應用,2013, (13): 107,109. 3關博, 楊紅天, 劉博. 智能企業自助建站系統設計與實現. 電子技術與軟件工程, 2015, (8): 77. 4孫雷. 自助建站系統的研究與應用. 自動化技術與應用, 2015,34(5): 101–103,114. 5楊明子. 中小企業自助建站信息系統的設計與開發. 消費導刊, 2009, (12): 190–191. 6張睿, 李欣. 基于PHP技術的自助建站系統的設計與實現. 科技創新導報, 2008, (4): 42–43. 7毛力. 無障礙自助建站系統轉戰內地市場. 互聯網天地, 2008,(5): 78–79. Research on Tag-Styled Website Builder System JIANG Ying1, GAO Jin2, ZHANG Jing1, ZHU Ling-Xuan1, ZHANG Ru-Yu1 1(School of Management, Beijing Normal University, Zhuhai 519087, China) According to the E-commerce demands of small and medium sized companies, this paper puts forward a scheme for the border construction of third party E-commerce platform. It introduces the tag warehouse based on the ASP.NET(C#) and the design and realization of the tag analyzing engine, demonstrating the feasibility of the scheme through the development of a website building system. Besides the function of website building, we can extend the platform of third party E-commerce by adding new functions using tags. website builder; tag; .NET 姜贏,高巾,張婧,朱玲萱,張如玉.標簽式組裝建站系統研究.計算機系統應用,2017,26(7):65–70. http://www.c-s-a.org.cn/1003-3254/5830.html 星. 企業模板建站與定制建站有何區別. 計算機與網絡,2015, (20): 43. 10.3969/j.issn.1008-1739.2015.20.040 廣東省自然科學基金項目(2016A030313386); 廣東省科技計劃項目(2014A080804001) 2016-10-21; 收到修改稿時間: 2016-11-245 標簽解析引擎的實現
6 總結
2(IT Center, China Mobile Communications Group Guandong Co. Ltd., Zhuhai Branch, Zhuhai 519015, China)