Når en XML-fil tilknyttes en DTD eller et XML-skema, er den underlagt de strukturregler, der er indeholdt i DTD'en eller XML-skemaet. For at blive betragtet som en gyldig XML-fil skal et dokument være ledsaget af en DTD (eller et XML-skema) og passe til alle erklæringer i DTD'en (eller XML-skemaet).
Der er to forskellige måder at tilknytte XML-filer til DTD'er eller XML-skemaer på.
<!DOCTYPE rodnavn PUBLIC "InvoiceId" "C:\mydtds\Invoice.dtd">
InvoiceId er den offentlige id på DTD-filen. Den bruges til at tilknytte XML-filen til en DTD-fil (i dette tilfælde er DTD-filen Invoice.dtd). Hvis den offentlige id svarer til nøglen for XML-katalogindgangen for Invoice.dtd, bruges URI'en for XML-katalogindgangen (som indeholder oplysninger om placeringen af Invoice.dtd) til at finde DTD'en. Ellers bruges den system-id for DOCTYPE ("C:\mydtds\Invoice.dtd"), som henviser direkte til filsystemplaceringen af DTD, til at finde DTD'en.
Bemærk: Du kan også bruge en system-id som nøgle i XML-katalogindgangen. Hvis du bruger en system-id som nøgle, indsættes der en DOCTYPE-kode i stil med følgende i en XML-fil:
<!DOCTYPE rodnavn SYSTEM "MyDTD.dtd">
hvor MyDTD.dtd er den system-id, der svarer til nøglen for en XML-katalogindgang.
Hvis en XML-fil tilknyttes til et XML-skema, indsættes der en eller flere skemaplaceringsattributter i XML-filen. Oplysningerne i schemaLocation fungerer som et "hint" til XML-processoren. Følgende eksempler viserschemaLocation-attributter.
<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"> ....
I Eksempel 1, henviser schemaLocation 'hint' ('C:\myschemas\PurchaseOrder.xsd') direkte til filsystemplaceringen eller URI'en for XML-skemaet. I dette tilfælde findes skemafilen direkte af XML-processoren.
I Eksempel 2 henviser schemaLocation 'hint' ('PO.xsd') til en XML-katalogindgang. PO.xsd svarer til nøglen i XML-katalogindgangen for PurchaseOrder.xsd, og URI'en for XML-katalogindgangen (som indeholder oplysninger om placeringen af PurchaseOrder.xsd) bruges til at finde XML-skemaet.
I begge eksempler er http://www.ibm.com i koden xsi:schemaLocation en URI, som identificerer navneområdet for XML-skemaet.
<purchaseOrder xmlns:="www.ibm.com" xsi:schemaLocation="http://www.ibm.com po/xsd/PurchaseOrder.xsd ">
Attributten schemaLocation peger på både nøglen for og den faktiske placering af skemaet.
DTD'en eller XML-skemaet er placeret på en ekstern server
Flere funktioner i XML-editoren, f.eks. validering og Indholdsassistance, kræver, at der er en DTD eller et XML-skema til rådighed. Produktdokumentationen indeholder anvisninger om brugen i tilfælde, hvor DTD'en eller XML-skemaet findes på den lokale maskine. I mange tilfælde er DTD'en eller XML-skemaet imidlertid placeret på en ekstern server, f.eks.:
<!DOCTYPE Catalog PUBLIC "abc/Catalog" "http://xyz.abc.org/dtds/catalog.dtd">
Normalt giver det ingen problemer, fordi DTD'en eller XML-skemaet kan hentes fra den eksterne server. Hvis du imidlertid er beskyttet af en firewall og ikke har et SOCKS-klargjort system, er der i øjeblikket ingen metoder på arbejdsbænken til at angive en Socks-server, når du vil hente en DTD eller et XML-skema. Hvis systemet ikke kan SOCKS-klargøres, kan du omgå problemet ved at hente en kopi af DTD'en eller XML-skemaet (f.eks. vha. en webbrowser) og gemme kopien på den lokale maskine. Herefter kan du enten placere en lokal kopi i samme projekt som XML-filen eller bruge XML-kataloget til at knytte en offentlig id til DTD'ernes (lokale) placering.
Bemærk: Hvis du har tilknyttet en XML-fil med et XML-skema eller en DTD, som er placeret et andet sted i netværket, og du arbejder på en maskine, som ikke er forbundet med netværket, kan du følge de tidligere beskrevne trin, hvis du vil bruge Indholdsassistance eller validere XML-filen.
Hvis du opretter en direkte tilknytning mellem en XML-fil og et XML-skema eller en DTD-fil, skal du, hver gang du ændrer placeringen på skemaet eller DTD'en, spore og opdatere alle de XML-filer, der indeholder henvisninger, så de angiver den nye placering på DTD'en eller skemaet. Hvis du derimod tilknytning en XML-fil til et XML-skema eller en DTD-nøgle, behøver du kun opdatere XML-katalogindgangen og ikke hver enkelt XML-fil, når du ændrer placeringen på skemaet eller DTD'en.
Eksempel: Du har en DTD, som hedder "Building.dtd", og som er tilknyttet med fem XML-filer - Office.xml, House.xml, Apartment.xml, Bank.xml og PostOffice.xml. Du flytter DTD-filen Building.dtd til en ny placering. Hvis du har en retningstilknytning mellem Building.dtd og alle XML-filerne, skal du opdatere <DOCTTYPE>-erklæringen i de enkelte XML-filer, så den afspejler den nye placering på Building.dtd. Hvis du derimod har en XML-katalogtilknytning, og alle XML-filerne blot refererer til nøglen for Building.dtd, skal du kun opdatere URI'en, hvorefter alle XML-filerne peger på den nye placering af Building.dtd.
Når du har opdateret en indgang i XML-kataloget, skal du evt. opfriske oversigten i XML-editor, så den indeholder de nye oplysninger.
Det gør du ved at klikke på værktøjslinjeknappen Genindlæs afhængigheder , hvorefter oversigten opdateres med de aktuelle XML-katalogindstillinger.
Du behøver kun opfriske XML-editoroversigten, når du har en åben XML-fil, som henviser til den XML-katalogindgang, du har opdateret.
Der er flere oplysninger under de relaterede opgaver.
(c) Copyright 2001, World Wide Web Consortium (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University).