XML-Dateizuordnungen zu DTDs und XML-Schemata

Wenn eine XML-Datei einer DTD oder einem XML-Schema zugeordnet wird, ist sie an alle in der DTD bzw. im XML-Schema enthaltenen strukturellen Regeln gebunden. Damit es als gültige XML-Datei gilt, muss ein Dokument eine DTD oder ein XML-Schema aufweisen und allen Deklarationen in der DTD bzw. dem XML-Schema entsprechen.

Es gibt zwei verschiedene Möglichkeiten, XML-Dateien DTDs oder XML-Schemata zuzuordnen.

  1. Direkte Zuordnung - Die XML-Datei enthält entweder den Namen einer DTD in der DOCTYPE-Deklaration (z. B. <!DOCTYPE root-element SYSTEM " dtdfile.dtd" >, wobei dtdfile.dtd der Name der DTD-Datei ist) oder sie enthält den Pfad eines XML-Schemas im Attribut "schemaLocation" des Stammelements der XML-Datei (z. B. <xsi:schemaLocation="http://www.ibm.com schema.xsd">, wobei schema.xsd der Name des XML-Schemas ist).
  2. XML-Katalogeintrag - Sie können DTD- und XML-Schemadateien im XML-Katalog registrieren und sie einem Schlüssel zuordnen, der sie repräsentiert. Sie können dann von einer XML-Datei aus auf den Schlüssel für eine DTD- oder XML-Schemadatei verweisen, anstatt direkt auf die DTD- oder XML-Schemadatei verweisen zu müssen. Ein XML-Katalogeintrag enthält zwei Komponenten - den Schlüssel (der die DTD- bzw. XML-Schemadatei darstellt) und eine URI (die Informationen zur Position der DTD bzw. des XML-Schemas enthält).

Funktionsweise einer Zuordnung

Zuordnung einer XML-Datei zu einer DTD
Wenn eine XML-Datei einer DTD zugeordnet wird, wird ein DOCTYPE-Tag wie der folgende in die XML-Datei eingefügt:
<!DOCTYPE root-name PUBLIC "InvoiceId" "C:\mydtds\Invoice.dtd">

InvoiceId ist die öffentliche ID der DTD-Datei. Sie wird dazu verwendet, die XML-Datei einer DTD-Datei zuzuordnen (in diesem Fall ist die DTD-Datei Invoice.dtd). Wenn die öffentliche ID "InvoiceId" dem Schlüssel des XML-Katalogeintrags für Invoice.dtd entspricht, wird die URI des XML-Katalogeintrags (mit Informationen zur Position von Invoice.dtd) dazu verwendet, die DTD zu lokalisieren. Andernfalls wird die DOCTYPE-System-ID ("C:\mydtds\Invoice.dtd"), die direkt auf die Dateisystemposition der DTD verweist, zur Lokalisierung der DTD verwendet.

Hinweis: Sie können auch eine System-ID als Schlüssel in einem XML-Katalogeintrag verwenden. Wenn eine System-ID als Schlüssel verwendet wird, wird ein DOCTYPE-Tag wie der folgende in eine XML-Datei eingefügt:

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

Dabei ist MyDTD.dtd die System-ID, die dem Schlüssel eines XML-Katalogeintrags entspricht.

Zuordnung einer XML-Datei zu einem XML-Schema

Wenn eine XML-Datei einem XML-Schema zugeordnet wird, werden ein oder mehrere Positionsattribute in die XML-Datei eingefügt. Die Informationen in "schemaLocation" dienen als eine Art Hinweis für den XML-Prozessor. Die folgenden Beispiele zeigen "schemaLocation"-Attribute.

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

In Beispiel 1 verweist der Hinweis in "schemaLocation" ('C:\myschemas\PurchaseOrder.xsd') direkt auf die Dateisystemposition oder URI des XML-Schemas. In diesem Fall lokalisiert der XML-Prozessor die Schemadatei direkt.

In Beispiel 2 verweist der Hinweis in "schemaLocation" ('PO.xsd') auf einen XML-Katalogeintrag. PO.xsd entspricht dem Schlüssel des XML-Katalogeintrags für PurchaseOrder.xsd, und die URI des XML-Katalogeintrags (mit Informationen zur Position von PurchaseOrder.xsd) wird dazu verwendet, das XML-Schema zu lokalisieren.

In beiden Beispielen ist http://www.ibm.com im Tag xsi:schemaLocation eine URI, die den Namensbereich für das XML-Schema identifiziert.

Sie können auch einen Namensbereich als Schlüssel für einen XML-Katalogeintrag verwenden. Wenn ein Namensbereich als Schlüssel verwendet wird, wird ein "schemaLocation"-Tag wie der folgende in eine XML-Datei eingefügt:
<purchaseOrder xmlns:="www.ibm.com"
xsi:schemaLocation="http://www.ibm.com po/xsd/PurchaseOrder.xsd ">

Das Attribut "schemaLocation" verweist sowohl auf den Schlüssel als auch auf die tatsächliche Position des Schemas.

DTD oder XML-Schema befindet sich auf einem fernen Server

Für einige Funktionen im XML-Editor, wie z. B. die Prüfung und die Inhaltshilfe, ist es erforderlich, dass eine DTD oder ein XML-Schema zur Verfügung steht. Die Produktdokumentation enthält Informationen zur Verwendung für die Fälle, in denen sich die DTD oder das XML-Schema auf der lokalen Maschine befindet. In vielen Fällen kann sich die DTD oder das XML-Schema jedoch auf einem fernen Server befinden. Beispiel:

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

Normalerweise stellt dieser Fall kein Problem dar, da die DTD bzw. das XML-Schema vom fernen Server abgerufen werden kann. Wenn Sie jedoch hinter einer Firewall arbeiten und nicht über ein SOCKS-System verfügen, bietet die Workbench momentan keine Möglichkeit, einen SOCKS-Server zum Abrufen einer DTD oder eines XML-Schemas anzugeben. Wenn Sie kein SOCKS-System verwenden können, besteht die Ausweichlösung für dieses Problem darin, eine Kopie der DTD bzw. des XML-Schemas abzurufen (z. B. mit Hilfe eines Web-Browsers) und diese Kopie auf der lokalen Maschine zu speichern. Dann können Sie entweder eine lokale Kopie im selben Projekt wie die XML-Datei speichern oder mit Hilfe des XML-Katalogs der (lokalen) Position der DTD eine öffentliche ID zuordnen.

Hinweis: Wenn Sie einer XML-Datei ein XML-Schema oder eine DTD zugeordnet haben, das bzw. die sich an einer anderen Position im Netzwerk befindet, und Sie auf einer Maschine arbeiten, die nicht mit dem Netzwerk verbunden ist, können Sie die oben beschriebenen Schritte ausführen, um die Inhaltshilfe oder die Prüfungsfunktion für Ihre XML-Datei zu verwenden.

Vorteile von XML-Katalogeintragszuordnungen

Wenn Sie eine direkte Zuordnung zwischen einer XML-Datei und einem XML-Schema bzw. einer DTD erstellen, müssen Sie jedesmal, wenn Sie die Position des Schemas oder der DTD ändern, alle XML-Dateien, die darauf verweisen, ermitteln und mit der neuen DTD- bzw. Schemaposition aktualisieren. Wenn Sie einer XML-Datei jedoch einen XML-Schema- oder DTD-Schlüssel zuordnen, müssen Sie bei einer Änderung der Schema- oder DTD-Position lediglich den XML-Katalogeintrag aktualisieren, nicht jede einzelne XML-Datei.

Beispiel: Sie verwenden die DTD "Building.dtd", die fünf XML-Dateien zugeordnet ist: Office.xml, House.xml, Apartment.xml, Bank.xml und PostOffice.xml. Sie versetzen die DTD-Datei Building.dtd an eine neue Position. Bei einer direkten Zuordnung zwischen Building.dtd und allen XML-Dateien müssen Sie die <DOCTTYPE>-Deklaration in jeder XML-Datei so aktualisieren, dass sie auf die neue Position von Building.dtd verweist. Bei einer XML-Katalogzuordnung, bei der alle beteiligten XML-Dateien lediglich auf den Schlüssel von Building.dtd verweisen, müssen Sie nur die URI aktualisieren, um zu erreichen, dass alle XML-Dateien auf die neue Position von Building.dtd verweisen.

Aktualisieren eines Eintrags im XML-Katalog

Nach der Aktualisierung eines Eintrags im XML-Katalog müssen Sie möglicherweise die XML-Editorsicht aktualisieren, damit sie die neuen Informationen enthält. Klicken Sie hierzu auf die Schaltfläche Abhängigkeiten erneut laden in der Symbolleiste, Schaltfläche "Abhängigkeiten erneut laden" in der Symbolleiste sodass die Sicht mit den aktuellen XML-Katalogeinstellungen aktualisiert wird. Sie müssen die XML-Editorsicht nur dann aktualisieren, wenn Sie eine XML-Datei geöffnet haben, die auf den aktualisierten XML-Katalogeintrag verweist.

Weitere Informationen finden Sie in den zugehörigen Tasks.

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

Zugehörige Konzepte
XML-Editor
Zugehörige Tasks
Bearbeitung mit Integritätsbedingungen in DTDs oder XML-Schemata
DOCTYPE-Deklarationen bearbeiten
Einträge zum XML-Katalog hinzufügen
XML-Dateien mit den an DTDs und Schemata vorgenommenen Änderungen aktualisieren
Namensbereichsinformationen bearbeiten
XML-Verarbeitungsanweisungen bearbeiten
Bearbeitung in der Entwurfssicht
Bearbeitung in der Quellensicht