當 XML 檔和 DTD 或 XML 綱目相關聯時,它會以 DTD 或 XML 綱目內含的任何結構化規則來連結。如果要成為有效的 XML 檔,文件必須附有 DTD 或 XML 綱目,且必須符合該 DTD 或 XML 綱目中的所有宣告。
您可以利用兩種不同的方法來建立 XML 檔與 DTD 或 XML 綱目之關聯性。
<!DOCTYPE root-name PUBLIC "InvoiceId" "C:\mydtds\Invoice.dtd">
InvoiceId 是 DTD 檔的公開 ID。 它用來建立 XML 檔與 DTD 檔的關聯性(在本案例中,DTD 檔就是 Invoice.dtd)。如果公開 ID InvoiceId 對應於 Invoice.dtd 的 XML 型錄項目索引鍵,就會利用 XML 型錄項目的 URI(含有 Invoice.dtd 位置的相關資訊)來尋找 DTD。否則,會利用直接指向 DTD 檔案系統位置的 DOCTYPE 系統 ID ( "C:\mydtds\Invoice.dtd") 來尋找 DTD。
附註: 您也可以使用系統 ID,作為「XML 型錄」項目中的「索引鍵」。如果您使用系統 ID 作為索引鍵, 則 XML 檔中就會併入如下的 DOCTYPE 標示:
<!DOCTYPE Root-name SYSTEM "MyDTD.dtd">
其中 MyDTD.dtd 是對應於「XML 型錄」項目的「索引鍵」的系統 ID。
如果 XML 檔有相關的 XML 綱目,XML 檔中就會併入一或多個綱目位置屬性。schemaLocation 中的資訊專供作為 XML 處理器之「提示」之用。下例顯示 schemaLocation 屬性。
<purchaseOrder xmlns="http://www.ibm.com" xsi:schemaLocation="http://www.ibm.com C:\myschemas\PurchaseOrder.xsd"> <shipTo country="US"> ...
<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 型錄」項目的索引鍵,且「XML 型錄」項目的 URI(含有 PurchaseOrder.xsd 位置的相關資訊)將用來尋找 XML 綱目。
在這兩個範例中,xsi:schemaLocation 標示中的 http://www.ibm.com 都是識別 XML 綱目之名稱空間的 URI。
<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 綱目。不過,如果您在防火牆後面,且沒有 SOCKSified 系統,工作台就不會有方法可供您指定 Sock 伺服器來擷取 DTD 或 XML 綱目。如果您無法 SOCKSify 您的系統,這個問題的解決方式是擷取 DTD 或 XML 綱目之副本(例如,利用 Web 瀏覽器)來將副本儲存到本端機器中。之後,您就可以將本端副本放在 XML 檔的同一個專案中,或利用「XML 型錄」來建立公開 ID 和 DTD(本端)位置的關聯性。
附註:如果有一個 XML 檔和網路中其他位置上的 XML 綱目或 DTD 相關聯, 且您正在使用的機器已切斷網路連線,如果您要使用內容輔助或驗證 XML 檔,您可以遵循上述步驟。
如果您建立了 XML 檔與 XML 綱目或 DTD 檔之間的直接關聯,每當您變更綱目或 DTD 的位置時, 您都必須向下追蹤,並以 DTD 或綱目之新位置來更新所有進行參照的 XML 檔。不過,如果您建立了 XML 檔和 XML 綱目或「DTD 索引鍵」之間的關聯性,則當您變更綱目或 DTD 的位置時, 您只要更新「XML 型錄」項目就行了,不需要更新每個個別的 XML 檔。
例如,您有一個稱為 "Building.dtd" 的 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 編輯器視圖。
如果需要詳細資訊,請參閱相關作業。
(c) Copyright 2001, World Wide Web Consortium (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University).