Jeśli plik XML jest powiązany z definicją DTD lub schematem XML, oznacza to, że spełnia on reguły strukturalne zawarte w tej definicji DTD lub schemacie XML. Aby dokument był poprawnym plikiem XML, musi mu towarzyszyć definicja DTD lub schemat XML, a także musi być zgodny ze wszystkimi deklaracjami w tej definicji DTD lub schemacie XML.
Istnieją dwa różne sposoby powiązania plików XML z definicjami DTD lub schematami XML.
<!DOCTYPE root-name PUBLIC "IdFaktury" "C:\mydtds\Invoice.dtd">
IdFaktury jest publicznym identyfikatorem pliku DTD. Służy on do powiązania pliku XML z plikiem DTD (w tym przypadku plikiem DTD jest Invoice.dtd). Jeśli publiczny identyfikator IdFaktury odpowiada kluczowi pozycji katalogu XML dla pliku Invoice.dtd, to do znalezienia definicji DTD używany jest identyfikator URI pozycji katalogu XML (która zawiera informacje dotyczące położenia pliku Invoice.dtd). W przeciwnym razie do znalezienia definicji DTD służy identyfikator systemowy DOCTYPE ("C:\mydtds\Invoice.dtd"), który odwołuje się bezpośrednio do położenia definicji DTD w systemie plików.
Uwaga: identyfikatora systemowego można także użyć jako klucza w pozycji katalogu XML. Jeśli jako klucza użyto identyfikatora systemowego, w pliku XML znajduje się znacznik DOCTYPE podobny do następującego:
<!DOCTYPE Root-name SYSTEM "MojDTD.dtd">
gdzie MojDTD.dtd jest identyfikatorem systemowym odpowiadającym kluczowi pozycji katalogu XML.
Jeśli plik XML jest powiązany ze schematem XML, w pliku XML znajduje się jeden lub więcej atrybutów położenia schematu. Informacje w atrybucie schemaLocation służą jako "wskazówka" dla procesora XML. Następujące przykłady przedstawiają użycie atrybutów 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"> ....
W Przykładzie 1 "wskazówka" schemaLocation ('C:\myschemas\PurchaseOrder.xsd') odnosi się bezpośrednio do położenia w systemie plików lub odsyłacza URI schematu XML. W tym przypadku plik schematu zostanie znaleziony bezpośrednio przez procesor XML.
W Przykładzie 2 "wskazówka" schemaLocation ('PO.xsd') odnosi się do pozycji katalogu XML. PO.xsd odpowiada kluczowi pozycji katalogu XML dla pliku PurchaseOrder.xsd, a do znalezienia schematu XML zostanie użyty identyfikator URI pozycji katalogu XML (zawierający informacje o położeniu pliku PurchaseOrder.xsd).
W obu przykładach adres http://www.ibm.com w znacznika xsi:schemaLocation jest identyfikatorem URI identyfikującym przestrzeń nazw dla schematu XML.
<purchaseOrder xmlns:="www.ibm.com" xsi:schemaLocation="http://www.ibm.com po/xsd/PurchaseOrder.xsd ">
Atrybut schemaLocation wskazuje zarówno na klucz, jak i na rzeczywiste położenie schematu.
Definicja DTD lub schemat XML znajduje się na serwerze zdalnym
Niektóre funkcje edytora XML, takie jak sprawdzanie poprawności i asystent treści, wymagają dostępności definicji DTD lub schematu XML. Dokumentacja produktu zawiera informacje o używaniu w przypadkach, gdy definicja DTD lub schemat XML znajduje się w komputerze lokalnym. Jednakże w wielu przypadkach definicja DTD lub schemat XML mogą znajdować się na serwerze zdalnym, na przykład:
<!DOCTYPE Catalog PUBLIC "abc/Catalog" "http://xyz.abc.org/dtds/catalog.dtd">
Zazwyczaj taki przypadek nie stanowi problemu, ponieważ definicję DTD lub schemat XML można pobrać z serwera zdalnego. Jeśli jednak użytkownik znajduje się za firewallem i nie ma systemu obsługującego protokół SOCKS, środowisko robocze nie udostępnia obecnie sposobu określenia serwera socks, za pomocą którego można pobrać definicję DTD lub schemat XML. W przypadku braku możliwości zainstalowania obsługi protokołu SOCKS w systemie obejściem problemu byłoby pobranie kopii definicji DTD lub schematu XML (na przykład za pomocą przeglądarki WWW) i zapisanie go na komputerze lokalnym. Następnie można umieścić go w tym samym projekcie co plik XML lub za pomocą katalogu XML powiązać identyfikator publiczny z (lokalnym) położeniem definicji DTD.
Uwaga: jeśli plik XML jest powiązany ze schematem XML lub definicją DTD znajdującymi się w innym miejscu w sieci, a komputer jest odłączony od sieci, w celu użycia asystenta treści lub sprawdzenia poprawności pliku XML można wykonać czynności opisane powyżej.
W przypadku tworzenia bezpośredniego powiązania między plikiem XML a schematem XML lub plikiem DTD za każdym razem, gdy zmienia się położenie schematu lub pliku DTD, należy określić nowe położenie pliku DTD lub schematu we wszystkich odwołujących się do niego plikach XML. Jednakże w przypadku powiązania pliku XML z kluczem schematu XML lub pliku DTD po zmianie jego położenia wystarczy zaktualizować pozycję katalogu XML zamiast każdego pliku XML oddzielnie.
Na przykład istnieje plik DTD o nazwie "Building.dtd", który jest powiązany z pięcioma plikami XML - Office.xml, House.xml, Apartment.xml, Bank.xml i PostOffice.xml. Użytkownik przenosi plik DTD Building.dtd w nowe miejsce. W przypadku bezpośredniego powiązania między plikiem Building.dtd a wszystkimi plikami XML konieczne będzie zaktualizowanie deklaracji <DOCTTYPE> w każdym pliku XML, aby wskazywała na nowe położenie pliku Building.dtd. Jeśli jednak istnieje powiązanie katalogu XML, a wszystkie pliki XML odwołują się tylko do klucza pliku Building.dtd, to wystarczy tylko zaktualizować identyfikator URI, a wszystkie pliki XML będą wskazywać nowe położenie pliku Building.dtd.
Po
zaktualizowaniu pozycji w katalogu XML może zajść potrzeba odświeżenia
widoku edytora XML, aby korzystał z nowych informacji. W tym celu kliknij
przycisk Przeładuj zależności na pasku narzędzi
, a widok zostanie zaktualizowany przy użyciu
bieżących ustawień katalogu XML. Wystarczy tylko odświeżyć widok edytora
XML, w którym otwarty jest plik XML odwołujący się do zaktualizowanej
pozycji katalogu XML.
Więcej informacji na ten temat zawierają opisy czynności pokrewnych.
(c) Copyright 2001, World Wide Web Consortium (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University).