XML ファイルが DTD または XML スキーマと関連付けられるとき、DTD または XML スキーマ・ファイル内に含まれるなんらかの構造上の規則に束縛されます。 XML ファイルが有効である条件として、ある文書が DTD または XML スキーマに付随し、そして DTD または XML スキーマのすべての宣言に適合している必要があります。
XML ファイルを DTD または XML スキーマと関連付けるには、2 つの異なる方法があります。
<!DOCTYPE root-name PUBLIC "InvoiceId" "C:¥mydtds¥Invoice.dtd">
「InvoiceId」は DTD ファイルのパブリック ID です。この ID は、XML ファイルを DTD ファイルに関連付けるために使用します (この場合、 DTD ファイルは Invoice.dtd)。もし、パブリック ID、InvoiceId が Invoice.dtd 用の「XML カタログ入力」の「キー (Key)」に対応しているならば、「XML カタログ入力」の「URI」(Invoice.dtd のロケーションに関する情報を含んでいる) は DTD の場所の探索に使用されます。さもなければ、DTD のファイル・システム・ロケーションを直接参照する DOCTYPE のシステム ID ( "C:¥mydtds¥Invoice.dtd") は、 DTD の場所の探索に使用されます。
注: システム ID を XML カタログ項目のキーとして使用することもできます。 システム ID をキーとして使用すると、 以下に示すような DOCTYPE タグが XML ファイルにインクルードされます。
<!DOCTYPE Root-name SYSTEM "MyDTD.dtd">
ここで、MyDTD.dtd は XML カタログ項目のキーに対応するシステム ID です。
XML ファイルが XML スキーマと関連付けられている場合には、 1 つまたは複数のスキーマ・ロケーション属性が 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 'hint' ('C:¥myschemas¥PurchaseOrder.xsd') は、 ファイル・システム・ロケーションまたは XML スキーマの URI を、直接参照します。この場合、スキーマ・ファイルは XML プロセッサーによって直接配置されます。
例 2 では、schemaLocation 'hint' ('PO.xsd') は XML カタログ項目を参照します。PO.xsd は、「PurchaseOrder.xsd」のための XML カタログ項目の 「キー (Key)」に対応し、 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 システムを持っていない場合、ワークベンチでは現在、ユーザーが DTD または XML スキーマを検索するための Socks サーバーを指定する方法を提供していません。 ユーザーのシステムを Socks 化できない場合は、 DTD または XML スキーマのコピーを検索 (たとえば、Web ブラウザーを使用) して、 そのコピーをユーザーのローカル・マシンに保管することが、この問題への次善策となります。これによって、ローカル・コピーを、XML ファイルと同じプロジェクト内に配置するか、または XML カタログを使用してパブリック ID を DTD の (ローカルの) ロケーションと関連付けることができます。
注: ネットワーク内のいずれかの場所に存在する XML スキーマまたは DTD と関連付けられた XML ファイルがあり、ユーザーがネットワークから切り離されたマシン上で作業する場合に、コンテンツ・アシストの使用または XML ファイルの検証を行うには、 上記のステップを実行します。
XML ファイルと、XML スキーマまたは DTD ファイル間に直接的な関連を作成する場合には、 スキーマまたは DTD のロケーションを変更するごとに、参照を行うすべての XML ファイルをトラッキングして、 DTD またはスキーマの新規ロケーションで更新する必要があります。ただし、XML ファイルを XML スキーマまたは DTD のキーと関連付けると、 そのスキーマまたは DTD のロケーションを変更する際に必要となるのは XML カタログ項目の更新のみで、 それぞれの XML ファイルを更新する必要はありません。
たとえば、 5 つの 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 (マサチューセッツ工科大学、Institut National de Recherche en Informatique et en Automatique、慶応大学)。