【正文】
個(gè)供應(yīng)商可以向 DOM 規(guī)范添加規(guī)范中沒(méi)有定義的方法和屬性,并且只要我們認(rèn)為這些方法和屬性是符合 DOM 基本規(guī)范的。(2)DOM 樹(shù)型結(jié)構(gòu)DOM 在邏輯上用一棵樹(shù)來(lái)表示文檔。例 一個(gè)典型的 XML 文檔?xml version=?booksbookauthorchen/authorprice formatyuan33/price/book/books在圖 2 中,雙橢圓代表根節(jié)點(diǎn),橢圓代表元素節(jié)點(diǎn),菱形代表屬性節(jié)點(diǎn),矩形代表文本節(jié)點(diǎn),箭頭代表父子關(guān)系。節(jié)點(diǎn)就是文檔內(nèi)容中的一個(gè)特定元素、屬性和文本等等的對(duì)象表示。所有的文檔都有一個(gè)節(jié)點(diǎn)稱(chēng)為根節(jié)點(diǎn),它是位于樹(shù)型結(jié)構(gòu)最頂部的節(jié)點(diǎn)。如果一個(gè)節(jié)點(diǎn)下面有一個(gè)或者多個(gè)節(jié)點(diǎn),那么就把下面的節(jié)點(diǎn)稱(chēng)為這個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn),也就是說(shuō)每個(gè)子節(jié)點(diǎn)都是其“父”節(jié)點(diǎn)的一個(gè)孩子節(jié)點(diǎn)。節(jié)點(diǎn)之間的這種父子關(guān)系在 DOM 中被廣泛地使用。把父子關(guān)系的比喻加以延伸,具有相同父節(jié)點(diǎn)的節(jié)點(diǎn)稱(chēng)為“兄弟”節(jié)點(diǎn)。第 7 頁(yè) 共 25 頁(yè)圖 2 文檔樹(shù)節(jié)點(diǎn)的概念不僅限于元素,文檔中的每個(gè)事物都可以表示為一個(gè)節(jié)點(diǎn),包括注釋、元素的屬性、文本內(nèi)容、XML 處理指令、文檔類(lèi)型聲明等等。(3)DOM 的層DOM 被組織為分離的層,每一層都提供了自己的方法和定義。有時(shí)候您可能會(huì)忍不住把不同的 DOM 層看作不同“版本”的 DOM,然而它們并不是真正意義上的版本。比起 DOM 的 Leve12 層,正在用 Level1 層的開(kāi)發(fā)人員可以期望更少的功能和特性。這兩個(gè)層都是 W3C 所推薦的。另外還有第 4 個(gè)層,據(jù)說(shuō)被認(rèn)定為是 Level0,它不是一個(gè)正式的 DOM 規(guī)范,也不是工作草案,它涉及了在 DOMWorking Group 成立之前,由早期的 WEB 瀏覽器(比如 Netscape 3 和 Explorer3)所提供的 DOM 實(shí)現(xiàn)。當(dāng)然它的改進(jìn)是以一般用戶(hù)和 DOM 成員公司的需求為基礎(chǔ)的。Core 模塊具有處理結(jié)構(gòu)化文檔和對(duì)象所需要的核心方法。DOM 應(yīng)用程序可以遵守一個(gè)特定 DOM 層的規(guī)范,也可以遵守一個(gè) DOM 層中的一個(gè)特定模塊的規(guī)范。它被劃分為兩個(gè)模塊:Core 模塊和 HTML 模塊。在HTML 模塊中,設(shè)計(jì)了一個(gè)高級(jí)接口,這個(gè)接口可以和 Core 模塊中的接口一起處理 HTML 文檔中的內(nèi)容。Level2 層被劃分為 14 個(gè)截然不同的模塊,它們是Core,XML,HTML,Range,Traversal,CSS,CSS2,Views,Stylesheets,Events,User Interface Events,Mouse Events,MutationEvents 和 HTML Events。DOM 的 Level2 層更新了由 DOM 的 Level1 層提供的 Core 模塊中的附加命名空間支持,以及 Level1 層沒(méi)有明確地支持的用于處理某些特定情況的方法。除了提供處理結(jié)構(gòu)化文檔的基礎(chǔ)接口外,DOM 的 Leve12 層還增加了用于文檔處理的其它功能,其中常用的如下所述:① 范圍(Range):為處理 DOM 中的范圍操作指定方法。③ 樣式(CSS):為支持各種類(lèi)型的樣式表提供基礎(chǔ)接口。⑤ 事件:描述應(yīng)用程序中的事件流,并為注冊(cè)事件處理程序指定了一個(gè)統(tǒng)一的事件機(jī)制。(4)DOM 的數(shù)據(jù)類(lèi)型基本的、原子性的數(shù)據(jù)類(lèi)型是編程接口內(nèi)部工作方式所必需的,而 DOM 也不例外。通常情況下可以從其它語(yǔ)言中借用現(xiàn)有的數(shù)據(jù)類(lèi)型,但是對(duì)于更復(fù)雜的信息,DOMWorking Group 創(chuàng)造了屬于 DOM 自己的數(shù)據(jù)類(lèi)型。DOMString 類(lèi)型用來(lái)描述一個(gè)字符序列,其中的每個(gè)字符都用雙字節(jié)的單元來(lái)表示。根據(jù) DOM 規(guī)范,DOMString 使用 UTF16(在 Unicode 規(guī)范中有詳細(xì)的定義)第 9 頁(yè) 共 25 頁(yè)進(jìn)行編碼。在所有的 DOM 規(guī)范中,無(wú)論哪里需要字符串,都會(huì)使用 DOMString 類(lèi)型來(lái)表示。所以在某些 DOM 實(shí)現(xiàn)(比如 Xerces)中,專(zhuān)門(mén)提供了把DOMString 類(lèi)型轉(zhuǎn)換為本地字符串類(lèi)型的方法。DOMTimeStamp 數(shù)據(jù)類(lèi)型在 DOM 規(guī)范中是按如下方式定義:Typedef unsigned long long DOMTimeStamp。除了基本數(shù)據(jù)類(lèi)型以外,DOM 也有自己的節(jié)點(diǎn)類(lèi)型。由于一個(gè)文檔中可能包含不同類(lèi)型的信息,因此也要定義不同類(lèi)型的節(jié)點(diǎn)。每種節(jié)點(diǎn)類(lèi)型都有一組相同的屬性和與之相關(guān)的方法。表 1 DOM 節(jié)點(diǎn)類(lèi)型Element HTML 或者 XML 等文檔中表示一個(gè)元素。Attribute 表示一個(gè)元素的屬性。CDATASection 在 XML 文檔中表示 character Data(字符數(shù)據(jù))部分。注釋的表示形式為(!Comment text)。DocumentType DocumentType 每個(gè)文檔都有一個(gè)DocumentType 節(jié)點(diǎn),它提供已經(jīng)包含在 DTD 聲明中的符號(hào)的 NamedNodeMap 和包含一般實(shí)體的NamedNodeMap。DocumentFragment 可以把文檔片段看作輕量級(jí)或者更小型的Document 節(jié)點(diǎn)。使第 10 頁(yè) 共 25 頁(yè)用 DocumentFragment 可以在無(wú)需創(chuàng)建一個(gè)全新的Document 節(jié)點(diǎn)的基礎(chǔ)上方便地對(duì)文檔樹(shù)的一部分進(jìn)行有效的操作。在文檔中可以將它用作一種保存特有處理程序信息的方法。EntityReference 在文檔中表示一個(gè)實(shí)體引用。Notation 節(jié)點(diǎn)沒(méi)有父節(jié)點(diǎn)。其它節(jié)點(diǎn)類(lèi)型通常是用來(lái)描述復(fù)雜 XML 文檔中包含的信息格式和結(jié)構(gòu)。一些類(lèi)型的節(jié)點(diǎn)根本不允許包含子節(jié)點(diǎn)。 XML 與數(shù)據(jù)庫(kù) 技術(shù)比較從技術(shù)角度講,XML 和關(guān)系數(shù)據(jù)同屬于數(shù)據(jù)管理的手段。廣義的 XML 與 DBMS 大致具有相似的作用,XML 與DBMS 相同之處在于:(1)提供數(shù)據(jù)存儲(chǔ)。 (2)提供對(duì)數(shù)據(jù)的直接存取訪(fǎng)問(wèn)。 (3)提供數(shù)據(jù)的模式描述。 關(guān)系數(shù)據(jù)通過(guò)關(guān)系模式來(lái)描述數(shù)據(jù)的邏輯結(jié)構(gòu)。XML 采用 SAX(Simple API for XML)和DOM(Document Object Model)定義應(yīng)用編程接口,使應(yīng)用程序能夠訪(fǎng)問(wèn)和更新 XML 文檔的樣式、結(jié)構(gòu)和內(nèi)容;關(guān)系數(shù)據(jù)采用 ODBC、JDBC、OLEDB 等。另一方面,隨著 Web 技術(shù)的不斷發(fā)展,信息共享和數(shù)據(jù)交換的范圍不斷擴(kuò)大,傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)也面臨著挑戰(zhàn)。第二,數(shù)據(jù)庫(kù)技術(shù)的語(yǔ)義描述能力差,大多通過(guò)技術(shù)文檔表示,很難實(shí)現(xiàn)數(shù)據(jù)語(yǔ)義的持久性和傳遞性,而數(shù)據(jù)交換和信息共享都是基于語(yǔ)義進(jìn)行的,這樣在異構(gòu)應(yīng)用數(shù)據(jù)交換時(shí),不利于計(jì)算機(jī)基于語(yǔ)義自動(dòng)進(jìn)行正確數(shù)據(jù)的檢索與應(yīng)用。 由此,數(shù)據(jù)庫(kù)在數(shù)據(jù)管理方面具有管理方便、存貯占用空間小、檢索速度快、修改效率高、安全性好等優(yōu)點(diǎn),但客觀上需要用一種應(yīng)用方式將其豐富的數(shù)據(jù)有效地發(fā)布出來(lái),以消除平臺(tái)差異、增強(qiáng)語(yǔ)義描述功能、降低環(huán)境要求。 第一,跨平臺(tái)。 第二,易表義。第三,XML 不僅可以描述結(jié)構(gòu)化數(shù)據(jù),還可以有效描述半結(jié)構(gòu)化,甚至非結(jié)構(gòu)化數(shù)據(jù)。首先,XML 技術(shù)采用的是基于文件的管理機(jī)制,文件管理存在著容量大、管理困難的缺點(diǎn);第二,目前 XML 的檢索是基于節(jié)點(diǎn)的檢索,存放大量甚至海量數(shù)據(jù)的 XML 文件造成檢索速度極低;第三,解析手段有缺陷。 XML 在數(shù)據(jù)應(yīng)用方面上具有易表義、跨平臺(tái)等優(yōu)勢(shì),但客觀上需要一種有效的存儲(chǔ)、檢索和修改等方面的管理機(jī)制。 (2)通過(guò) XML 技術(shù)降低數(shù)據(jù)庫(kù)的使用條件、可以使其中豐富的數(shù)據(jù)資源得到利用,并且 XML 在異構(gòu)數(shù)據(jù)交換方面具有很大優(yōu)勢(shì)。 “以數(shù)據(jù)庫(kù)為存貯手段,以 XML 為交換載體”的數(shù)據(jù)管理模式可能是一種趨勢(shì)。從用戶(hù)的角度,XML 文檔和數(shù)據(jù)庫(kù)之間的區(qū)別是不透明的。 XML 做數(shù)據(jù)庫(kù)的技術(shù)正在迅速地發(fā)展和不斷地完善中,前景非常光明。3 需求分析 系統(tǒng)概述文檔資料編輯器的設(shè)計(jì)目的是減輕文檔管理工作的勞動(dòng)強(qiáng)度、減少重復(fù)工作,并加速查詢(xún),建立數(shù)字文檔,充分發(fā)揮文書(shū)檔案的作用。當(dāng)文檔流量大時(shí),工作強(qiáng)度成倍加大、工作效率極為低下,而且在手工處理的后期,文檔查閱和利用問(wèn)題成為更大的一個(gè)問(wèn)題,當(dāng)文檔堆積如山時(shí),高效的查詢(xún)是很難辦到的,為查一份文,可能要翻上幾本厚厚的目錄是經(jīng)常的事;而計(jì)算機(jī)實(shí)行的文檔管理系統(tǒng)卻能很容易解決這些問(wèn)題,而且數(shù)字文檔的保存不但節(jié)省空間,而且在保存期限上也是紙質(zhì)文檔所不能比擬的。 功能需求分析根據(jù)擁護(hù)要求,本系統(tǒng)利用 XML 數(shù)據(jù)庫(kù)技術(shù)和文件處理技術(shù)來(lái)實(shí)現(xiàn)個(gè)人文檔資料的管理和維護(hù),達(dá)到用戶(hù)希望的結(jié)果,同時(shí)提供一些常用編輯功能,豐富系統(tǒng)的“個(gè)人”特性。新建項(xiàng)目下面可以直接上傳計(jì)算機(jī)中已有的文檔,顯示分全部和前 30 條列表。因此,所有文檔不再是凌亂的堆放在各個(gè)目錄下。(2)個(gè)人備忘錄模塊:備忘錄內(nèi)容可編輯設(shè)定有日期,主題,類(lèi)型,狀態(tài),完成情況,操作按鈕有新建,修改,查找,刪除。(3)個(gè)人通訊記錄模塊:通過(guò)使用這一功能項(xiàng),你可以新建,修改,刪除,查找通訊信息。(4)收入/支出財(cái)務(wù)管理模塊:操作按鈕有新建,刪除,修改,查找。(5)記事本編輯模塊:操作設(shè)定有新建,查找,刪除,新建文檔下面可編輯信息包括星期,日期,主題,內(nèi)容,天氣。(6)系統(tǒng)用戶(hù)管理模塊:通過(guò)初始管理員,可以添加、刪除用戶(hù)以及修改密碼、退出程序等基本操作。下面圖 3 是本系統(tǒng)的總體功能結(jié)構(gòu)簡(jiǎn)化圖。圖 4 個(gè)人資料編輯器主窗口(1)程序聲明:Private Const TBL_ALERT As Integer=0Private Const TBL_ACCOUNTINDEX As Integer=1Private Const TBL_DIARY As Integer=2Private Const TBL_DOCINFO As Integer=3Private Const TBL_FILEINFO As Integer=4Private Const TBL_SALARY As Integer=5Private Const TBL_SELECTINFO As Integer=6Private Const TBL_ADDRESSLIST As Integer=7Private Const DISPLAY_LENTGH As Integer =30Public dbObj As ClsXmlProc Private salary_in_out As Boolean 39。False:收入)39。備忘Private saveSortXt As Integer 39。記事Private saveSortTx As Integer 39。收支Private saveSortWd As Integer 39。用于保存文檔操作時(shí)上次選擇的行Private UpLoadFilePath As String 39。退出程序 EndEnd SubPrivate Sub MenuRestart_Click() 39。.amp。數(shù)據(jù)集Dim else As IXMLDOMElement 39。查詢(xún)條件Dim name, group As StringOn Error GoTo Handle =11 Name=Trim()第 18 頁(yè) 共 25 頁(yè) group=Trim() query = If name Then query = contains(name’+name+39。 + group + 39。 + group + 39。 If length 0 Then = True = True Else = False = False End If For count = 1 To length Set ele = list(count) (count) = CLng((ele, id).nodeValue) (count,1) = (ele, name).nodeTypedValue (count,2) = (ele, mobile).nodeTypedValue (count,3) = (ele, 第 19 頁(yè) 共 25 頁(yè)telphone).nodeTypedValue (count,4) = (ele, oicq).nodeTypedValue (count,5) = (ele, msn).nodeTypedValue (count,6) = (ele, address).nodeTypedValue (count,7) = (ele, desc).nodeTypedValue (count,8) = (ele, group).nodeTypedValue (count,9) = (ele, logindate).nodeTypedValue Next For i = 1 To 1 (i,0) = CStr(i) Next