XML 中的常見問題(3)
編輯:XML詳解  
osoft 的 XML 服務目前支持 XML 數據架構,它代表了在 1999 年 3 月 Internet Explorer 5 裝運時 “W3C 架構”活動的快照。XML 數據架構允許開發人員在他們的 XML 文檔中添加數據類型,以及定義開放的內容模型。這種對 DTD 功能的擴展對 XML 編程很關鍵。
但是 W3C 正在准備“XML 架構定義 (XSD)”,它將成為“XML 架構標准”。Microsoft 計劃在此規范成為建議後,立即使對“XML 架構定義 (XSD)”的支持成為它核心 XML 服務的一部分。
什麼是名稱空間,它們為何重要?
名稱空間是 XML 的另一個高級功能,並作為 XML 1.0 規范的一部分,在 W3C 筆記中作了概述。它們允許開發人員限定元素名稱和關系。名稱空間使元素名稱唯一可識別,從而避免了名稱相同,但是在不同詞典中定義的元素之間發生名稱沖突。它們允許混合來自不同名稱空間的標記,這一點對多個來源的數據很重要。
例如,書店可以定義
名稱空間有助於清晰地定義這種差別。
XSLT 和 XPATH
什麼是 XSLT?
XSLT(英文) ,或者用於轉換的可擴展樣式表語言,它是在 1999 年 11 月 6 日獲得批准的 W3C 建議。從標記和編程兩重意義上說,這種語言提供了將 XML 結構轉換到其他 XML 結構、Html 或者任何數量的其他文本格式(例如 SQL)的機制。雖然它可以用於創建 Web 頁面的顯示輸出,但是 XSLT 的實際功能在於能夠改變底層結構,而不是簡單地改變這些結構的媒體表示,就像在層疊樣式表 (CSS) 中一樣。
XSL、XQL、XSL 模式 和 XSLT 之間的區別是什麼?
XSLT 源自 CSS 在對 XML 文檔結構改動上的局限性,當時創建 XML 的原因更傾向於代替 Html 而不是提供通用數據描述語言。因此可擴展樣式表語言 (XSL) 成為構造格式化 XML 新方法的成果。
但是,“W3C 樣式工作”組的成員和早期 XML 采用者很快就發現,能夠將 XML 從一種格式轉換到另一個格式的語言,可以極大地簡化生成的大量代碼。Microsoft 向 W3C 提交了一個建議,最初名稱為 XML 查詢語言(或 XQL),它隨之被 W3C 采納為 XSL 模式語言。該語言的大多數功能最終都被納入了 XSLT 規范中。
最終標准結合了為不同初始條件而修改的 XSLT 參數,創建代碼功能塊的命名模板,以及大量用於數值和字符串處理的增強功能。XSLT 還為在語言中添加內置功能提供方便,提供了 Microsoft 可在自己的實現中用來添加許多極其有用功能(包括訪問 COM 對象和腳本)的產品。
什麼是 XPath?
XPath(英文) 是為 XML 定義的查詢語言,它提供在文檔中選擇節點子集的簡單語法。通過 XPath,通過指定類似於目錄的路徑(即名稱)以及路徑中的條件,可以檢索元素集合。XPath 對 XSLT 和 XML DOM 都很重要,並與 XPointer 規范(允許根據統一資源定位符 [URL] 和 XPath 表達式的組合來選擇文檔片斷)有聯系。
為什麼 XSLT 對 XML 很重要?
XSLT 是將一種 XML 文檔轉換為另一種的語言。這意味著它提供了單源 XML 數據的機制,可以在 Web 頁面中創建由用戶動態更改的豐富視圖,可以為目標通信過濾數據。XSLT 對於業務規則編碼已經足夠強大。它可以從數據生成圖形(不僅僅是 Web 頁面)。它甚至可以處理與其他服務器的通信 — 特別是和能夠集成到 XSLT 中的腳本模塊協作 — 以及在 XSLT 自身內部生成適當的消息。雖然它不可能代替桌面系統中的大多數交互(出於性能和使用方便性兩方面分原因),但是在未來的幾年中,XSLT 很有可能最終成為系統之間進行通信的主要“編程”語言。
XSLT 和 CSS 之間的區別是什麼?它們不是樣式表嗎?
層疊樣式表 (CSS) 的任務是對 Html 元素指定一組顯示屬性。CSS 決定了頁面的視覺外觀,但是不會改變源文檔的結構。
另一方面,XSLT 也稱為基於模板的語言,它允許將某種模式映射到源文檔中,該源文檔的輸出是用 XML、Html 或純文本書寫的。使用 XSLT,可以將 XML 文檔的結構轉換為不同的 XML 文檔。例如,您可以更改 XML 文檔的順序、添加或刪除元素、執行條件測試或者用元素的集合進行迭代。
XSLT 和 CSS 不是兼容標准。一種在 XML 中創建 Web 頁面的有用技術,是用 XSLT 將 XML 轉換為諸如列表或表的結構,然後將 CSS 應用於結果,控制這些結構在適當媒體中的顯示。您甚至可以從 XSLT 創建 CSS。
標准
Microsoft 如何與 XML 標准兼容?
從 XML 語言開始產生起,Microsoft 就站在了 XML 的最前沿,而且很值得注意的是,W3C 在過去幾年中所生成的大多數 XML 建議和工作草案,都包括來自至少一個(在某些情況下可能是數個)Microsoft 職員的輸入和參與。Microsoft 已經多次被委以重任,與 W3C 標准組織一起,確保 XML 的開發能使所有用戶受益,並且在許多不同領域的開發中都作出了重要貢獻,包括 XML 規范、DOM、XSLT 和架構定義語言。Microsoft 承諾將與最新規范和標准保持一致。
XML 和 World Wide Web Consortium (W3C) 之間的關系是什麼?
W3C 有一活躍的 XML 工作組。Microsoft 從 1996 年 6 月起就是該組織的共同發起者之一,從那時起許多業界企業都開始加入,包括 Netscape Communications Corp.、IBM 和 Oracle。有關 XML 標准過程的詳細信息,請訪問 W3C Web 站點(英文)。
XML 和 W3C 的地位關系如何?
XML 1.0 是在 1998 年 12 月被正式批准的,現在仍是個穩定的標准。有關當前 XML 規范的詳細信息以及 W3C 內部的提交和審閱過程,請參見 W3C Web 站點(英文)。
DOM 在 W3C 中的地位如何?
DOM Level 1 的 W3C 文檔狀態為“推薦”。這說明 W3C 目前正在提議將它作為 World Wide Web 上的標准。有關 DOM 和在 W3C 內部提交和審閱過程的詳細信息,請參見 DOM 規范(英文)。
工具支持
SQL Server 和 ADO 支持 XML 嗎?
Microsoft ActiveX 數據對象 (ADO) 技術,提供許多將數據庫記錄集(數據記錄集合)轉換為 XML 格式的方法,以及從給定結構中獲取 XML 並將其轉換回 ADO 所支持數據庫(包括 SQL Server 和 Oracle 數據庫)的工具。此外,通過 MSXML2 和 MSXML3 中的 XML 數據源對象,還可以將任意 XML 直接加載到 ADO 中以生成記錄集。
SQL Server 2000 還允許通過 URL 直接設置和檢索 XML,方式和調用 Web 頁面非常相似。這是處理數據的強大機制,因為它基本上意味著可以將 SQL Server 數據直接集成到 XML 過濾器和 Web 頁面,基本上凡是有 XML 文檔的地方都可以集成 SQL Server 數據。此外,還可以設置自定義模板,來控制如何從 SQL Server 數據中產生 XML,使數據庫成為生成 XHtml 頁面的強大工具。
最後,諸如 BizTalk Server 這樣的應用程序還允許在任意數量的不同數據源(從 XML 文檔到數據庫到 Excel 和 Word 文檔)之間進行映射、為 Web 體系結構創建復雜數據管道以及根據 XML 數據庫需求構造有效的架構。
目前有 Microsoft 工具可以幫助我快速沿用 XML 嗎?
Microsoft BizTalk Server 2000 是用於數據交換的、基於 XML 的服務器,它提供啟用電子商務業務社會的基本結構和工具。BizTalk Server 的基礎是基於規則的業務文檔路由、轉換和跟蹤基本結構。該基本結構允許公司通過在組織邊界之內或之間的應用程序中間交換業務文檔,例如購買定單和發票,來集成、管理和自動化業務過程。有關詳細信息,請參見Microsoft BizTalk Server 2000(英文) 。
什麼是 SOAP?
SOAP 是簡單對象訪問協議,是創建大范圍分布式、復雜計算環境的工具,該計算環境可使用現有的 Internet 基本結構運行在 Internet 上。SOAP 可以使應用程序用許許多多方法在 Internet 上互相直接通信。有關 SOAP 的詳細信息,請參見 SOAP 規范(英文)。
XML 如何適用於 Microsoft Windows? Distributed InterNet Applications (Windows DNA) 策略來構造三層並具有 Web 功能的應用程序?
XML 正在快速成為將結構化數據從中間層傳送到桌面的工具。基於 XML 的數據可以通過中間層代理與多種後端(數據庫)源集成。架構(參見“XML 數據”一節)可以改進該過程,並且開發人員可以更精確地描述和交換數據。
問題和解決方案
為什麼在調用了 Load() 方法後,我的文檔對象仍然為空?
默認情況下操作是異步加載的。這意味著如果提供 http URL 地址,那麼 load() 方法將直接返回,並且文檔對象仍然為空,因為數據還沒有從服務器返回。為了糾正這個問題,請在代碼中添加下面的行:
XMLdoc.async = false;
同時,如果是從獨立的 C++ 應用程序加載 http XML 文檔,那麼必須查詢消息隊列才能繼續加載。