DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 准備 XML 及相關技術認證,第 1 部分: 體系結構
准備 XML 及相關技術認證,第 1 部分: 體系結構
編輯:XML詳解     

XML 體系結構

  這一節討論就系統體系結構的特定方面而言 XML 技術最有效的應用。通過這一節讀者應該能夠:

  確定涉及到 XML 應用的系統領域

  為系統的不同部分選擇最合適的 XML 技術,兼顧性能和安全

  理解如何將 XML 綁定到 Java

  XML 的應用無所不在,如用於動態網頁的 Asynchronous JavaScript and XML (AJax),以及用於博客和提要的 Rich Site Summary (RSS)。將來還會更多。本系列主要討論核心 技術,包括 Simple API for XML (SAX)、文檔對象模型(DOM)、DTD、XML Schema、XPath、XLink 和 XQuery。

  您會遇到大量的縮寫詞。隨便閱讀幾篇技術文章就會看到 XDI、RDF、REST、SVG、XUL 等等。這是因為 XML 不僅僅是一個熱點話題,而且是一個超級熱點話題。為什麼會出現這種情況?主要原因在於 XML 為數據提供了跨平台、跨語言的能力,就像 Java 為應用程序邏輯提供了跨平台支持一樣。我們來看看最近為世界市場帶來沖擊的一些 XML 用法:

  提要(RSS 和 Atom)

  動態 Web(AJax)

  博客(代表性狀態傳輸,Representational State Transfer 或者 REST)

  面向服務的體系結構(SOA)和 Web 服務

  這些應用如 圖 1 和 圖 2 所示,這兩個圖分別說明了如何在電子商務應用程序體系結構和動態 Web 中集成 XML。

  圖 1. 使用 XML 技術的電子商務

  准備 XML 及相關技術認證,第 1 部分: 體系結構

  圖 2. 使用 XML 技術的動態 Web

  准備 XML 及相關技術認證,第 1 部分: 體系結構

  為了從這些應用中獲益,需要良好的 XML 技術基礎,這正是本系列所要提供的。

  什麼是體系結構,它與 XML 有什麼關系?

  “體系結構是有序引入變更的一種框架。” —— Tom DeMarco

  如果曾經由於不夠優化的系統體系結構而在深夜裡收到請求支持的電話,就會知道明智地選擇所用的技術有多麼重要。體系結構有很多差別,包括物理的和邏輯的。圖 3 顯示了一種物理體系結構。

  圖 3. 物理體系結構的例子

  准備 XML 及相關技術認證,第 1 部分: 體系結構

  “系統的基本組織體現在組成它的組件、組件之間以及組件和環境之間的關系、控制系統設計和演化的基本原則之中。” —— ANSI/IEEE 1471-2000, Recommended Practice for Architecture Description of Software-Intensive Systems

  系統體系結構有多種不同的定義。在本教程中,我們將軟件系統體系結構看作:

  盡量在已有結構的基礎上構建(比如擴展框架和重用公共組件)

  根據需要在進程和處理器之間分配,系統各部分公開有接口

  特定的技術可用於體系結構的某個方面但不能用於其他方面。在 圖 3 中的示例系統中,XML 可用於多個方面:

  浏覽器

  可以使用 XML 內容和相關的 XSL 樣式表來呈現網頁。XSLT 提供了這種功能,並且支持多種不同格式的轉換。

  客戶機請求

  XMLHttpRequest 是 AJax 的核心。

  服務器響應

  如果返回的是 XMLHttpRequest,響應內容可能采用 XML 格式。即便不是 XML,浏覽器仍然使用 DOM 操縱 Web 頁面。在本系列的第 3 部分中,您將看到 DOM 是從 XML 發展起來的。

  Web 服務

  SOAP 是一種基於 XML 的協議,用於通過 HTTP 交換信息(換句話說,就是通過 Web)。主要用於請求遠程 Web 服務。它是 XML 遠程過程調用(RPC)的後繼者。

  Java Message Service (JMS)

  JMS 用於在進程間異步發送消息。連接和延遲問題通過可靠的傳遞來彌補。消息的 XML 內容提供了一種混合語言,雙方都能理解,無論是用什麼語言或者運行在什麼平台上。

  報告

  除了在 Web 浏覽器、PDA 和其他設備上呈現之外,還可以把 XML 作為報告呈現。除了呈現網頁內容外,XSLT 還可用於以多種格式呈現報告。

  數據庫

  現在已經不是上一代人曾經用過的數據庫了。為了避免錯失 XML 的良機,IBM® 和 Oracle 都提供了存儲 XML 文檔結構並支持 XQuery 的原生 XML 數據庫。本系列的第 3 部分將詳細討論這個話題,現在只要記住 XML 本質上是普通文本,因此即使沒有 XML 感知的數據庫,也可以將 XML 存儲在扁平文件和數據庫中。

  這僅僅是體系結構的一個例子。Kevin Dick 出版的 XML: A Managers Guide(第 216 頁,參見 參考資料)列舉了五種不同的企業應用程序,都能通過 XML 的使用獲得很大好處:

  勞動力自動化

  知識管理

  貿易伙伴協調

  應用程序集成

  數據集成

  其核心觀點是 XML 可用於多種不同的領域,包括您從事的領域。

  現在您了解了 XML 可用於什麼地方,但是選擇哪種技術以及在系統的什麼地方真正應用它呢?下面將討論這方面的一些問題,請繼續讀下去。

  在現有的應用程序中使用 XML

  XML 的一個強大之處在於它能夠被不同的系統所理解。如果有一個現存的應用程序,無論是用 C 編寫、在 Linux® 機器上運行的,還是用 Java 編寫、在 Microsoft® Windows® 機器上運行的,您都可以通過基於 XML 的通信,將遺留應用程序集成到系統的其他部分中。

  另外,有些產品和框架使用 XML 作為配置文件。比如,struts 使用 struts-config.xml 文件定義如何控制 servlet,Web 應用程序使用 web.xml 文件定義如何部署在服務器上運行的應用程序。更多關於 XML 的外圍應用不斷湧現。您的應用程序當然也能很好地利用這些能力。

  但是本教程主要討論 XML 技術與應用程序更加核心、集成的應用。表 1 列出了應用程序的一些特征,並給出了什麼時候可以運用 XML 技術的建議。

  表 1. 應用 XML 的建議

  

特征 討論 建議 輸出目標和格式(PDA、浏覽器、ipod、PDF) 數據類型越多,XML 轉換的優勢越明顯。 如果需要多種輸出格式可以使用 XML。 內容的大小 內容越多,使用 XML 需要克服的性能障礙越大。這就需要考慮其他方法,比如壓縮或者另一種完全不同的格式,比如 Abstract Syntax Notation One (ASN.1),這種格式損失了人類可讀的優點。 在消息傳遞和處理效率不及標准工具的互操作性和可用性重要時使用 XML。 互操作性 XML 最強大的地方無疑就是它提供了不同系統能夠理解的跨語言、跨平台的格式。 在不同系統需要通信的情況下使用 XML。 搜索 XML 通過 XPath 支持相對簡單的查詢,最新的 XQuery 則支持更復雜的查詢。XML 搜索技術雖然日漸成熟,但仍然比較弱。XML 感知數據庫是否有助於解決這個問題還有待於觀察,因為它們用樹結構存儲 XML。請參閱 XML 感知數據庫。 在搜索功能很重要的情況下,不要使用 XML 文檔。相反,應該把內容保存到數據庫中,或者使用 XML 感知數據庫。 摘要 XML 技術在摘要數據方面比較弱,比如生成報告。請參閱 XML 感知數據庫。 在摘要功能很重要的情況下,不要使用 XML 文檔。相反,應該把內容保存到數據庫中,或者使用 XML 感知數據庫。 項目規模 使用 XML 需要解析器和代碼來處理 XML 事件或樹。 對於需求簡單的小型項目,可能不需要承擔 XML 的開銷。

  XML 感知數據庫

  數據庫廠商希望支持使用 XML 技術的項目,但是關系數據庫存儲和檢索 XML 文件不是很方便。IBM 推出了原來稱為 Viper 的 DB2® 新版本,支持用原生格式存儲和索引 XML 數據(換句話說,不是把 XML 分解開來以便適應關系模型)。存儲 XML 的數據庫支持 XQuery,XQuery 是相當於 SQL 的 XML 等價物。

  那麼這些新出現的數據庫能力對您的項目意味著什麼呢?主要是能夠使原生形式的 XML 數據獲得典型的數據庫能力,比如搜索和摘要。

  性能

  這一節討論使用 XML 技術可能影響性能的一些問題。

  選擇適當的處理模型

  正如 Designing Web Services with the J2EE™ 1.4 Platform: JAX-RPC, SOAP, and XML TechnologIEs(參見 參考資料)這本書中指出的那樣,通過下列 API 有四種主要的 XML 處理模型可供選擇:

  1. SAX:提供了一種基於事件的編程模型

  2. DOM:提供了一種內存樹遍歷編程模型

  3. XML 數據綁定:提供了一種內存 Java 內容類綁定編程模型

  4. XSLT:提供了一種基於模板的編程模型

  SAX 和 DOM 是最常見的編程模型。與 XSLT 一起,這兩種模型都可通過 Java API for XML Processing (JAXP) 使用。XML 數據綁定模型可以通過 JAXB 技術使用。

  所有這些技術都將在本系列後面的教程中討論,但是首先來看看各種處理模型對性能的影響。表 2 比較了 SAX 解析器和 DOM 解析器的一些特性。

  表 2. 解析器:SAX 和 DOM

  

SAX DOM 事件驅動 樹操作 可以處理很大的文檔,內存占用基本不變 文檔越大占用內存越多 修改內容必須寫入新的文檔 可以在內存中操縱文檔 管理復雜的修改更困難 進行復雜的修改比較容易 一般來說更快一些 相對較慢 對解析的控制更多,但是可能需要更多的編程 一般來說比較省事

  跟多數事情一樣,系統需求通常決定了要使用的解析器。下面是一些例子:

  合並文檔

  當然需要使用 DOM 樹。使用 SAX 一個標記一個標記地合並,想一想就可怕。

  小型設備

  如果需要考慮內存,SAX 使用的內存非常少。DOM 必須建立整個文檔的樹結構。

  查找特定標記

  如果遇到特定標記時發生某個事件,SAX 非常適合。

  復雜的操作

  如果需要根據文檔中其他部分的數據修改文檔的不同部分,使用 DOM 解析器可能更容易一些。

  最後,還可以結合使用兩種解析器。比方說,可以用 SAX 解析器解析一些小型文檔提取需要合並到已有文檔中的信息,然後使用 DOM 解析器和樹操作修改文檔。

  緩存樣式表

  如果使用 XSLT 將 XML 文檔轉化成不同格式,可以在內存中緩存編譯後的線程安全的樣式表 Template,供不同的用戶創建自己的 Transformer 來重用這些對象(如 圖 4 所示)。因而可以減少應用程序的內存占用,還能節約解析和編譯樣式表的時間。

  圖 4. 緩存 XSLT 樣式表

  准備 XML 及相關技術認證,第 1 部分: 體系結構

  使用名稱空間

  您可能已經知道,名稱空間用於在文檔中聲明獨立於其他地方聲明的名稱。在樣式表和其他文檔通過 include 或 import 之類的語句結合起來時,在合並使用不同文法的多個文檔時,都可能會出現問題。如果在元素或屬性名中使用冒號,在使用名稱空間的情況下可以區分名稱空間前綴(冒號左側的部分)和名稱(即名稱空間的本地部分)。比如,XMLns:prefix=URI 允許使用這樣的名稱:prefix:myname。

  本系列的後一個教程將詳細討論名稱空間。但是現在希望提一下名稱空間對性能的影響。如前所述,SAX 是基於事件的解析器。如果解析器遇到名稱空間聲明,就會向應用程序發出 startPrefixMapping 調用和 endPrefixMapping 調用。這些回調會降低應用程序的處理速度。並不是說完全避免使用名稱空間,事實上也不可能這樣做,而是說如果性能比較重要的話應該謹慎地使用名稱空間。

  綁定到 Java 類

  眾所周知,XML 文檔以純文本的格式包含標記和其他內容。因此對性能極為不利。如何提高性能呢?我想討論兩種方法:JAXB 和 XSLT Compiler (XSLTC)。

  JAXB

  JAXB 解析 XML 文檔並創建表示文檔內容的 Java 對象的語義樹(如 圖 5 所示)。然後可以根據相關 XML 模式中的規則操作這些對象,該 XML 模式實現已經被編譯並用於創建 JAXB 綁定框架。還可以使用該框架將樹編組成 XML 文檔。

  除了處理文檔更快以外,JAXB 還使您能夠通過 Java 對象操縱 XML。此外,JAXB 也使得跟蹤模式的變化更容易了。

  圖 5. JAXB

  准備 XML 及相關技術認證,第 1 部分: 體系結構

  注意:JAXB 不 支持 DTD,所以您必須使用 XML Schema 作為模式語言。

  XSLT Compiler

  您知道 XSL Transformation 是什麼。XSLTC 在其中增加了編譯的部分。XLSTC 是兩部分的結合(如 圖 6 所示)。第一部分是一個編譯器,用於從 XSL 樣式表創建 translet,即一組 Java 類。第二部分是一個處理程序,將 translet 應用於 XML 實例文檔,以將其轉化成目標輸出格式。因而可以在解析樣式表後多次重用,從而加快處理速度。

  圖 6. XSLTC

  准備 XML 及相關技術認證,第 1 部分: 體系結構

  安全

  如果在 Internet 上通信,應用程序必須保證端到端的數據安全。無論誰的計算機感染了病毒,或者誰的站點被黑了,都會引起對保護公司信息安全的重視。

  那麼用什麼來保護 XML 通信呢?從本質上說,通過 Internet 安全發送 XML 文檔涉及到 XML 加密和 XML 數字簽名。

  XML 加密是指將內容轉化成難以理解的形式來保護機密信息。當然,目標接受方必須能夠將其轉換成原來的形式。XML 加密還有某些特殊的能力,比如能夠加密特定的元素或者元素內容。這種功能在有些情況下非常有用,比如發生在客戶、供應商和客戶銀行之間的銷售事務,其中參與各方需要閱讀文檔內容的某些部分而不能看到其他部分。

  XML 數字簽名解決 XML 安全的完整性問題(換句話說,判定內容是否被修改了)。與 XML 加密一樣,XML 數字簽名也能用於更小的粒度 —— 換句話說,可以簽署文檔的某些部分。

  與 XML 數字簽名有關的問題,比如在文檔操作中保持屬性的順序,確保文檔可以在通信的接收方能夠被驗證。這些內容超出了本教程的范圍,但是可以通過 JavaWorld 網站進一步了解這方面的內容。

  結束語

  XML 技術在市場上有各種不同的應用。XML 成功結合到應用程序體系結構中的關鍵在於確定在什麼地方使用它們利用其長處。對於核心 XML 技術的了解以及對不同體系結構的掌握是在項目中成功引入 XML 的關鍵。

  總結

  本教程的主題是體系結構,從中學到了如何:

  確定給定的體系結構對於 XML 設計考慮因素意味著什麼

  為給定的體系結構選擇適當的 XML 技術

  評估 XML 解析、驗證和轉換的性能

  使用 JAXB 實現 Java 類

  使用 XML 加密和簽名解決 XML 安全

  本系列的第 2 部分將討論信息建模,包括名稱空間的使用以及 DTD 和模式的定義。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved