2011-01-31 11 views
24

Mam ograniczoną znajomość plików XML/Schema.Jak używać schematu na komputerze lokalnym w dokumencie XML

To powinno być dość proste pytanie. Jak określić lokalny plik dla lokalizacji schemaLocation?

<?xml version="1.0"?> 

<note 
    xmlns="http://www.w3schools.com" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.w3schools.com note.xsd"> 
    ... 
</note> 

Jest to próbka z www.w3.org i część, która określa schemat jest w schemaLocation. Próbowałem przeglądając dokumentację, ale jak określić lokalny plik?

Coś

xsi:schemaLocation="../relativepath/schemafolder not.xsd"> 

Dzięki

Odpowiedz

24

schemaLocation musi zawierać dwie wartości oddzielone spacją: przestrzeń nazw URI (nie zmienia) oraz adres URL schematu.

Więc w twoim przypadku

xsi:schemaLocation="http://www.w3schools.com ../relativepath/schemafolder/note.xsd"> 

Nie daj się nabrać na nazw URI będąc pozornie poprawny URL http, to tylko jeden z drobnych szaleństw ludzie XML wymyślone. :)

Właściwie można określić schematów dla kilku nazw w jednym schemaLocation:

xsi:schemaLocation="namespace1 schemaurl1 namespace2 schemaurl2 ..." 

(ja też radzę używać ścieżek względnych ostrożnie: choć są one bardzo przydatne podczas przenoszenia plików wokół, ale w dalszym ciągu sprawdzać poprawność za pomocą tego samego kodu (lub narzędzia), gdy wdrażasz kod weryfikacyjny w aplikacji, "katalog roboczy" może nie być tym, czego oczekiwałeś. Nie oznacza to, że nie powinieneś używać względnych ścieżek, aby być Świadom tego, gdy pojawi się dziwnie wyglądający wyjątek dotyczący nieznanego schematu.)

+0

Link nie musi być ważny ??? Nadal muszę coś tam wsadzić? Nawet jeśli nie jest w ogóle używany? – grobartn

+2

@grobartn To w ogóle nie jest link. Wygląda jak link, ale w rzeczywistości to tylko nazwa. Jest nazywany identyfikatorem URI przestrzeni nazw (nie adresem URL!) I nie ma nic wspólnego z łączeniem. Drugim argumentem schemaLocation jest adres URL (lub ścieżka) wskazujący na plik schematu. – biziclop

+2

@biziclop - URI przestrzeni nazw nie jest "tylko nazwą", musi to być poprawny identyfikator URI. Jednak masz rację, że używanie syntaktycznie poprawnych adresów URL HTTP (a adresy URL to tylko podzbiór identyfikatorów URI) wydaje się być strasznie mylące dla ludzi. Zawsze preferowałem podejście OASIS/ODF do korzystania z URN. –

Powiązane problemy