Powiązania plików XML z definicjami DTD i schematami XML

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.

  1. Powiązanie bezpośrednie - Plik XML zawiera nazwę definicji DTD w swojej deklaracji DOCTYPE (na przykład <!DOCTYPE root-element SYSTEM "plik_dtd.dtd" >, gdzie plik_dtd.dtd jest nazwą pliku DTD) lub zawiera ścieżkę do schematu XML w atrybucie schemaLocation elementu głównego pliku XML (na przykład <xsi:schemaLocation="http://www.ibm.com/schemat.xsd">, gdzie schemat.xsd jest nazwą schematu XML).
  2. Pozycja katalogu XML - Pliki definicji DTD oraz schematu XML mogą zostać zarejestrowane w katalogu XML, a następnie powiązane z reprezentującym je kluczem. Dzięki temu będzie można odwołać się do klucza pliku definicji DTD lub schematu XML z poziomu pliku XML i nie będzie konieczne bezpośrednie odwoływanie się do tych plików. Pozycja katalogu XML składa się z dwóch części - klucza (reprezentującego definicję DTD lub schemat XML) oraz identyfikatora URI (zawierającego informacje o położeniu definicji DTD lub schematu XML).

Jak działa powiązanie

Powiązanie pliku XML z definicją DTD
Jeśli plik XML jest powiązany z definicją DTD, w pliku XML znajduje się znacznik DOCTYPE podobny do następującego:
<!DOCTYPE root-name PUBLIC "IdFaktury" "C:\definicje_DTD\Faktura.dtd">

IdFaktury jest identyfikatorem publicznym pliku DTD. Służy on do wiązania pliku XML z plikiem DTD (w tym przypadku plikiem DTD jest plik Faktura.dtd). Jeśli identyfikator publiczny IdFaktury odpowiada kluczowi pozycji katalogu XML dla pliku Faktura.dtd, to do określenia położenia definicji DTD używany jest identyfikator URI pozycji katalogu XML zawierającej informację o położeniu pliku Faktura.dtd. W przeciwnym razie położenie definicji DTD jest określane przy użyciu systemowego identyfikatora deklaracji DOCTYPE („C:\definicje_DTD\Faktura.dtd”), który odwołuje się bezpośrednio do położenia definicji DTD w systemie plików.

Uwaga: Identyfikator systemowy może również zostać użyty jako klucz 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
"plik_DTD.dtd"> 

gdzie plik_DTD.dtd jest identyfikatorem systemowym odpowiadającym kluczowi pozycji katalogu XML.

Powiązanie pliku XML ze schematem 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. Poniżej przedstawiono przykłady wykorzystania atrybutów schemaLocation:

Przykład 1
<purchaseOrder xmlns="http://www.ibm.com"
xsi:schemaLocation="http://www.ibm.com C:\myschemas\PurchaseOrder.xsd">
<shipTo country="US">
...
Przykład 2
<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 znaczniku xsi:schemaLocation jest identyfikatorem URI identyfikującym przestrzeń nazw dla schematu XML.

Przestrzeni nazw można także użyć jako klucza pozycji katalogu XML. Jeśli jako klucza użyto przestrzeni nazw, w pliku XML znajduje się znacznik schemaLocation podobny do następującego:
<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 aktywna obsługa 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: W przypadku gdy dany plik XML jest powiązany ze schematem XML lub definicją DTD, która znajduje się w innym miejscu w sieci, a używany komputer jest odłączony od sieci, można wykonać opisane wcześniej kroki w celu użycia aktywnej obsługi treści lub sprawdzenia poprawności pliku XML.

Zalety powiązań pozycji katalogu XML

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.

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 oraz 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 <DOCTYPE> 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.

Aktualizacja pozycji w katalogu XML

Po zaktualizowaniu pozycji w katalogu XML może zajść potrzeba odświeżenia widoku edytora XML, aby korzystał z nowych informacji. W tym celu należy kliknąć przycisk Przeładuj zależności na pasku narzędzi 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.

Pojęcia pokrewne
Edytor XML
Czynności pokrewne
Edytowanie z ograniczeniami definicji DTD lub schematów XML
Edytowanie deklaracji DOCTYPE
Dodawanie pozycji do katalogu XML
Aktualizowanie plików XML z uwzględnieniem zmian w definicjach DTD i schematach XML
Edytowanie informacji o przestrzeni nazw
Edytowanie instrukcji przetwarzania XML
Edytowanie w widoku Projekt
Edytowanie w widoku Źródło