XML 檔與 DTD 和 XML 綱目的關聯

當 XML 與 DTD 或 XML 綱目有關聯時,將以 DTD 或 XML 綱目包含的任何結構性規則來連結。 文件必須附有 DTD 或 XML 綱目,且符合 DTD 或 XML 綱目中的所有宣告,才能成為有效的 XML 檔。

有兩種不同方式可以建立 XML 檔與 DTD 或 XML 綱目的關聯性。

  1. 直接關聯 - XML 檔在 doctype 宣告中包含 DTD 的名稱 (例如,<!DOCTYPE root-element SYSTEM " dtdfile.dtd" >,其中 dtdfile.dtd 是 DTD 檔案的名稱), 或在 XML 檔根元素的 schemaLocation 屬性中包含 XML 綱目的路徑 (例如,<xsi:schemaLocation="http://www.ibm.com schema.xsd">,其中 schema.xsd 是 XML 綱目的名稱)。
  2. XML 型錄項目 - 您可以在「XML 型錄」中登錄 DTD 和 XML 綱目檔, 再與代表這些檔案的 Key 建立關聯性。 然後可以從 XML 檔中參照 DTD 或 XML 綱目檔 Key,而非直接參照 DTD 或 XML 綱目檔。 一個「XML 型錄」項目有兩個部分 - 索引鍵(代表 DTD 或 XML 綱目)和 URI(包含 DTD 或 XML 綱目位置的相關資訊)。

關聯的運作方式

建立 XML 檔與 DTD 的關聯性
如果 XML 檔與 DTD 有關聯,XML 檔會包含如下所示的 DOCTYPE 標示:
<!DOCTYPE root-name PUBLIC "InvoiceId" "C:\mydtds\Invoice.dtd">

InvoiceId 是 DTD 檔案的公開 ID。 用來建立 XML 檔與 DTD 檔案的關聯性(在這個例子中,DTD 檔案是 Invoice.dtd)。 如果公開 ID InvoiceId 對應於 Invoice.dtd 的「XML 型錄」項目的 Key, 則會以「XML 型錄」項目的 URI(包含 Invoice.dtd 位置的相關資訊)來尋找 DTD。 否則會以 DOCTYPE 的系統 ID ( "C:\mydtds\Invoice.dtd") 來尋找 DTD, 此 ID 直接參照 DTD 的檔案系統位置。

附註:您也可以在「XML 型錄」項目中使用系統 ID 作為「索引鍵」。 如果使用系統 ID 作為「索引鍵」,XML 檔會包含如下所示的 DOCTYPE 標示:

<!DOCTYPE Root-name SYSTEM "MyDTD.dtd"> 

其中,MyDTD.dtd 是系統 ID,對應於「XML 型錄」項目的「索引鍵」。

建立 XML 檔與 XML 綱目的關聯性

如果 XML 檔與 XML 綱目有關聯,XML 檔會包含一或多個綱目位置屬性。schemaLocation 中的資訊是提供作為給 XML 處理器的「提示」。 下例顯示 schemaLocation 屬性。

範例 1
<purchaseOrder xmlns="http://www.ibm.com"
xsi:schemaLocation="http://www.ibm.com C:\myschemas\PurchaseOrder.xsd">
<shipTo country="US">
...
範例 2
<purchaseOrder xmlns="http://www.ibm.com"
xsi:schemaLocation="http://www.ibm.com PO.xsd">
<shipTo country="US">
....

在範例 1 中,schemaLocation 的「提示」('C:\myschemas\PurchaseOrder.xsd') 直接參照 XML 綱目的檔案系統位置或 URI。 在此情況下,XML 處理器會直接尋找綱目檔。

在範例 2 中,schemaLocation 的「提示」('PO.xsd') 則是參照「XML 型錄」項目。 PO.xsd 對應於 PurchaseOrder.xsd 的「XML 型錄」項目的 Key, 將以「XML 型錄」項目的 URI(包含 PurchaseOrder.xsd 位置的相關資訊)來尋找 XML 綱目。

在上述兩個範例中,xsi:schemaLocation 標示中的 http://www.ibm.com 是用來識別 XML 綱目名稱空間的 URI。

您也可以使用名稱空間作為「XML 型錄」項目的「索引鍵」。 如果使用名稱空間作為「索引鍵」,XML 檔會包含如下所示的 schemaLocation 標示:
<purchaseOrder xmlns:="www.ibm.com"
xsi:schemaLocation="http://www.ibm.com po/xsd/PurchaseOrder.xsd ">

schemaLocation 屬性指向綱目的「索引鍵」和實際位置。

DTD 或 XML 綱目位於遠端伺服器

XML 編輯器有幾項功能需要用到 DTD 或 XML 綱目,例如驗證和內容輔助。 產品文件提供 DTD 或 XML 綱目位於本端機器時的用法資訊。 然而,DTD 或 XML 綱目時常位於遠端伺服器,例如:

<!DOCTYPE Catalog PUBLIC "abc/Catalog" "http://xyz.abc.org/dtds/catalog.dtd">

一般而言,這種狀況不會有問題, 因為可以從遠端伺服器擷取 DTD 或 XML 綱目。 不過,如果您位於防火牆之後,且沒有具備支援 SOCKS 的系統,則工作台目前未提供任何方式讓您指定擷取 DTD 或 XML 綱目的 Socks 伺服器。 如果您無法使系統支援 SOCKS,這個問題的暫行解決方法是擷取 DTD 或 XML 綱目的副本(比方說,使用 Web 瀏覽器),然後將該副本儲存在本端機器中。然後,您可以將本端副本放在 XML 檔的同一個專案中,或利用「XML 型錄」來建立公開 ID 與 DTD(本端)位置的關聯性。

附註:如果 XML 檔相關聯的 XML 綱目或 DTD 位於網路的某處,但您使用的機器沒有連接網路, 如果要使用內容輔助或驗證 XML 檔,請遵循前述步驟。

「XML 型錄」項目關聯的優點

如果您建立 XML 檔與 XML 綱目 或 DTD 檔之間的直接關聯,每當您變更綱目或 DTD 的位置時,都必須追查,並以 DTD 或綱目的 新位置來更新所有參照的 XML 檔。。 然而,如果建立 XML 檔與 XML 綱目或 DTD 索引鍵的關聯性, 則變更綱目或 DTD 的位置時,只需要更新「XML 型錄」項目,不必更新每一個 XML 檔。

例如,有一個 DTD 是 "Building.dtd",與五個 XML 檔有關聯 - Office.xml、House.xml、Apartment.xml、Bank.xml 及 PostOffice.xml。 您將 DTD 檔案 Building.dtd 移至新的位置。如果您讓 Building.dtd 與所有 XML 檔之間有直接關聯, 您必須更新每一個 XML 檔中的 <DOCTTYPE> 宣告,來反映 Building.dtd 的新位置。 然而,如果您有「XML 型錄」關聯,且所有 XML 檔都參照 Building.dtd 的「索引鍵」, 則只需要更新 URI,所有 XML 檔就會指向 Building.dtd 的新位置。

在 XML 型錄中更新項目

更新 XML 型錄中的項目之後,您可能需要自動更新 XML 編輯器視圖,才會使用新的資訊。 若要執行這項作業,請按一下重新載入相依關係工具列按鈕 這個圖形是「重新載入相依關係」工具列按鈕,如此即會使用 現行的「XML 型錄」設定來更新視圖。當開啟的 XML 檔參照已更新的「XML 型錄」項目時, 您只需要自動更新 XML 編輯器視圖。

如果需要詳細資訊,請參閱相關作業。

(c) Copyright 2001, World Wide Web Consortium (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University).

相關概念
XML 編輯器
相關工作
以 DTD 或 XML 綱目限制進行編輯
編輯 DOCTYPE 宣告
將項目新增至 XML 型錄
以 DTD 和綱目之變更來更新 XML 檔
編輯名稱空間資訊
編輯 XML 處理指示
在「設計」視圖中編輯
在「程式碼」視圖中編輯