Nadal wydaje się, że istnieje wiele nieporozumień dotyczących URI vs. Przydałoby się każdemu zobaczyć praktyczne przykłady adresów URL, które nie są adresami URI, przykłady adresów URI, które nie są adresami URL, oraz przykładów, które są adresami URL i URI.
Dennis
30
Kathy: „Czy to twój pies?” Bob: „Bardziej właściwe byłoby nazywanie go psem”. Kathy: „Nie, on jest psem. Pan jest pedantem”.
Identyfikator URI można dodatkowo sklasyfikować jako lokalizator, nazwę lub jedno i drugie. Termin „jednolity lokalizator zasobów” (URL) odnosi się do podzbioru identyfikatorów URI, który oprócz identyfikacji zasobu, zapewnia sposób lokalizacji zasobu poprzez opis jego podstawowego mechanizmu dostępu (np. „Lokalizacja” sieci). Termin „jednolita nazwa zasobu” (URN) był używany w przeszłości w odniesieniu do obu identyfikatorów URI w ramach schematu „urn” [RFC2141] , które muszą pozostać globalnie unikalne i trwałe, nawet gdy zasób przestanie istnieć lub stanie się niedostępny, oraz do dowolnego innego identyfikatora URI o właściwościach nazwy.
Więc wszystkie adresy URL są identyfikatorami URI (właściwie niezupełnie - patrz poniżej), a wszystkie URN są identyfikatorami URI - ale URN i adresy URL są różne, więc nie można powiedzieć, że wszystkie URI są adresami URL.
EDYCJA: Wcześniej myślałem, że wszystkie adresy URL są poprawnymi identyfikatorami URI, ale zgodnie z komentarzami:
Nie „wszystkie adresy URL są identyfikatorami URI”. To zależy od interpretacji RFC. Na przykład w Javie analizator składni URI nie lubi [lub jest ]tak, ponieważ specyfikacja mówi „nie powinien”, a nie „nie powinien”.
Tak więc, niestety, to jeszcze bardziej zabrudza wody.
Jeśli jeszcze nie przeczytałeś odpowiedzi Rogera Pate'a , radzę to zrobić.
Tylko identyfikatory URI ze schematem urn: są identyfikatorami URN. URI może być klasycznym adresem URL, URN lub po prostu URI, który nie zaczyna się od „urn:” i nie odnosi się do lokalizacji zasobu.
Mark Cidade
18
Nie „ wszystkie adresy URL są identyfikatorami URI ”. To zależy od interpretacji RFC. Na przykład w Javie analizator składni URI nie lubi [lub jest ]tak, ponieważ specyfikacja mówi „nie powinien”, a nie „nie powinien”.
Adam Gent
5
@AdamGent: RFC 3986 1.1.3: „Identyfikator URI można dodatkowo sklasyfikować jako lokalizator, nazwę lub oba.” Tak więc, jeśli URL jest specjalnym rodzajem URI, oznacza to, że każdy URL jest URI. Prawda?
Hubert
14
@AdamGent: To brzmi jak dziwactwo związane z implementacją Java, a nie normatywne. Sam java.net.URIdokument mówi „każdy adres URL jest identyfikatorem URI, mówiąc abstrakcyjnie, ale nie każdy identyfikator URI jest adresem URL”. I java.net.URLrobi dziwne rzeczy, takie jak sprawdzanie równości adresów URL przez przekształcanie nazw hostów na adresy IP (co wydaje się sprzeczne z RFC 3986 sec 6 w pierwszej kolejności i psuje wirtualne hosty). Myślę, że to po prostu oznacza, że Java Standard Library ma pewne niespójne zachowanie klas.
Andrew Janke,
3
@JonSkeet Może wystarczy rozróżnić standardy od wdrożeń? Np. „Formalnie, zgodnie z RFC, wszystkie adresy URL są identyfikatorami URI. (Fragment RFC). Ale istniejące implementacje mogą nie pasować dokładnie do specyfikacji, być może ze względu na interoperacyjność, i mogą używać adresów URL, które nie są prawidłowe dla RFC. A ponieważ jest to skomplikowany obszar , niektóre osoby i dokumenty mogą używać „URL”, co oznacza coś innego niż określona przez RFC ”. Tak jakby większość procedur sprawdzania poprawności wiadomości e-mail nie pasowała do definicji RFC.
Andrew Janke,
3839
URI s zidentyfikować i URL s zlokalizować ; jednak lokalizatory są również identyfikatorami , więc każdy adres URL jest również identyfikatorem URI, ale istnieją identyfikatory URI, które nie są adresami URL.
Przykłady
Roger Pate
To jest moje imię, które jest identyfikatorem. Jest jak identyfikator URI, ale nie może być adresem URL, ponieważ nie mówi nic o mojej lokalizacji ani o tym, jak się ze mną skontaktować. W tym przypadku zdarza się również, że identyfikuje co najmniej 5 innych osób w samych Stanach Zjednoczonych.
4914 West Bay Street, Nassau, Bahamy
Jest to lokalizator, który jest identyfikatorem tej fizycznej lokalizacji. Jest to zarówno adres URL, jak i identyfikator URI (ponieważ wszystkie adresy URL są identyfikatorami URI), a także pośrednio identyfikuje mnie jako „rezydenta…”. W tym przypadku jednoznacznie mnie identyfikuje, ale zmieniłoby się to, jeśli dostanę współlokatora.
Mówię „lubię”, ponieważ te przykłady nie są zgodne z wymaganą składnią.
W informatyce Uniform Resource Locator (URL) to podzbiór Uniform Resource Identifier (URI), który określa, gdzie dostępny jest zidentyfikowany zasób i mechanizm jego odzyskiwania. W popularnym użyciu oraz w wielu dokumentach technicznych i dyskusjach ustnych jest często niepoprawnie używany jako synonim URI , ... [podkreślenie moje]
Z powodu tego powszechnego zamieszania wiele produktów i dokumentacji nieprawidłowo używa jednego terminu zamiast drugiego, przypisuje własne rozróżnienie lub używa ich synonimicznie.
URN
Moje imię, Roger Pate, może być jak URN (Uniform Resource Name), z wyjątkiem tych, które są znacznie bardziej regulowane i mają być unikalne zarówno w czasie, jak i przestrzeni.
Ponieważ obecnie udostępniam tę nazwę innym osobom, nie jest ona unikalna na całym świecie i nie byłaby odpowiednia jako URN. Jednak nawet jeśli żadna inna rodzina nie użyła tego imienia, jestem nazwany na cześć mojego dziadka ze strony ojca, więc nadal nie będzie wyjątkowy w czasie. I nawet jeśli tak nie było, możliwość nazwania moich potomków po mnie czyni to nieodpowiednim jako URN.
URN różnią się od adresów URL tym sztywnym ograniczeniem unikalności, nawet jeśli oba mają wspólną składnię URI.
URNs are different from URLs in this rigid uniqueness constraintCzy to oznacza, że adresy URL nie jednoznacznie identyfikują lokalizacji?
eugene
30
Odpowiedź Rogera zapewnia dobre pragmatyczne rady. Aby uzyskać oficjalną odpowiedź, idę do W3C, który opublikował „ URI, adresy URL i URN: wyjaśnienia i zalecenia ” w 2001 roku. W skrócie, W3C mówi, że współczesny pogląd jest taki, że wszystko jest URI. URL jest pojęciem nieformalnym, a nie formalnym. A zamieszanie sięga „klasycznego widoku”, który próbował sztywno rozróżnić kategorie URI (których URL był jedną kategorią).
netjeff
5
..a Uniform Resource Locator (URL) .. określa, gdzie dostępny jest zidentyfikowany zasób i mechanizm jego odzyskiwania . Innymi słowy, nie ma czegoś takiego jak „względny” adres URL?
Arne,
9
Czy „earth128: Edward-de-Leau / 6000000000569063853” (unikalny me przez wiele multiwersów) to URN, URL lub URI?
edelwater
6
@edelwater: Przypuszczam, że to jest uri, ponieważ tylko identyfikuje cię, ale nie mówi nic o tym, jak się do ciebie dostać, chyba że masz na myśli, że earth128 jest jakimś medium podróży międzyplanetarnych :)
/other/link.html (Względny adres URL, przydatny tylko w kontekście innego adresu URL)
Adresy URL zawsze zaczynają się od protokołu ( http) i zwykle zawierają informacje, takie jak nazwa hosta sieciowego ( example.com) i często ścieżka dokumentu ( /foo/mypage.html). Adresy URL mogą mieć parametry zapytania i identyfikatory fragmentów.
Identyfikuje zasób za pomocą unikalnej i trwałej nazwy, ale niekoniecznie mówi, jak go zlokalizować w Internecie. Zwykle zaczyna się od przedrostka urn: Na przykład:
urn:isbn:0451450523 do identyfikacji książki według numeru ISBN.
urn:publishing:book - Przestrzeń nazw XML, która identyfikuje dokument jako typ książki.
URN mogą identyfikować pomysły i koncepcje. Nie ograniczają się one do identyfikacji dokumentów. Kiedy URN reprezentuje dokument, może zostać przetłumaczony na adres URL przez „resolver”. Dokument można następnie pobrać z adresu URL.
URC - jednolite cytowanie zasobów
Wskazuje na metadane dotyczące dokumentu, a nie na sam dokument. Przykładem URC jest taki, który wskazuje na kod źródłowy HTML strony, taki jak:view-source:http://example.com/
Zamiast lokalizować je w Internecie lub nazywać, dane można umieścić bezpośrednio w URI. Przykładem może być data:,Hello%20World.
Często Zadawane Pytania
Słyszałem, że nie powinienem już podawać adresu URL, dlaczego?
Specyfikacja W3 dla HTML mówi, że hreftag zakotwiczenia może zawierać identyfikator URI, a nie tylko adres URL. Powinieneś być w stanie podać URN, taki jak <a href="urn:isbn:0451450523">. Twoja przeglądarka rozpozna następnie ten URN na adres URL i pobierze książkę dla Ciebie.
Czy jakieś przeglądarki rzeczywiście wiedzą, jak pobierać dokumenty przez URN?
Nie wiem, ale nowoczesna przeglądarka internetowa implementuje schemat URI danych.
Czy różnica między URL a URI ma coś wspólnego z tym, czy jest względna czy bezwzględna?
Nie. Zarówno względne, jak i bezwzględne adresy URL to adresy URL (i identyfikatory URI).
Czy różnica między URL a URI ma coś wspólnego z tym, czy ma parametry zapytania?
Nie. Oba adresy URL z parametrami zapytania i bez nich są adresami URL (i identyfikatorami URI).
Czy różnica między URL a URI ma coś wspólnego z tym, czy ma identyfikator fragmentu?
Nie. Oba adresy URL z identyfikatorami fragmentów i bez nich są adresami URL (i identyfikatorami URI).
Czy różnica między URL a URI ma coś wspólnego z dozwolonymi znakami?
Nie. Adresy URL są zdefiniowane jako ścisły podzbiór identyfikatorów URI. Jeśli analizator składni zezwala na znak w adresie URL, ale nie w identyfikatorze URI, w analizatorze występuje błąd. Specyfikacje szczegółowo opisują, które znaki są dozwolone w jakich częściach adresów URL i URI. Niektóre znaki mogą być dozwolone tylko w niektórych częściach adresu URL, ale same znaki nie stanowią różnicy między adresami URL i identyfikatorami URI.
Ale czy W3C nie mówi teraz, że adresy URL i URI są tym samym?
Tak. W3C zdało sobie sprawę, że jest w tym mnóstwo zamieszania. Wydali dokument wyjaśniający URI, który mówi, że teraz można używać zamiennie terminów URL i URI (czyli URI). Nie jest już przydatne ścisłe dzielenie identyfikatorów URI na różne typy, takie jak URL, URN i URC.
Czy identyfikator URI może być zarówno adresem URL, jak i URN?
Definicja URN jest teraz luźniejsza niż to, co powiedziałem powyżej. Najnowszy RFC URI mówi, że każdy URI może teraz być URN (niezależnie od tego, czy rozpoczyna się urn:) tak długo, jak to ma „właściwości nazwy.” To znaczy: Jest globalnie wyjątkowy i trwały, nawet gdy zasób przestaje istnieć lub staje się niedostępny. Przykład: identyfikatory URI używane w typach dokumentów HTML, takich jak http://www.w3.org/TR/html4/strict.dtd. Ten identyfikator URI nadal będzie nazywać przejściowy typ HTML4, nawet jeśli strona w witrynie w3.org zostanie usunięta.
Patrz sekcja 1.1 RFC - „Jednorodność zapewnia kilka korzyści. Umożliwia stosowanie różnych typów identyfikatorów zasobów w tym samym kontekście, nawet jeśli mechanizmy używane do uzyskiwania dostępu do tych zasobów mogą się różnić. Umożliwia jednolitą interpretację semantyczną wspólnych konwencji składniowych w różnych typach identyfikatorów zasobów ... ”
Ta odpowiedź jest znacznie łatwiejsza do zrozumienia. Widzę wyraźnie zdjęcia prawdziwego przykładu adresów URL i URN. I aby każdy mógł przeczytać więcej na ten temat ... danielmiessler.com/study/url-uri
vee
253
Podsumowując: identyfikator URI identyfikuje, adres URL identyfikuje i lokalizuje.
Zastanów się nad konkretną edycją sztuki Szekspira Romeo i Julia , której kopię cyfrową masz w sieci domowej.
Możesz zidentyfikować tekst jako urn:isbn:0-486-27557-4.
Byłby to identyfikator URI, a dokładniej URN *, ponieważ nazywa on tekst .
Możesz również zidentyfikować tekst jako file://hostname/sharename/RomeoAndJuliet.pdf.
Byłby to również identyfikator URI, a dokładniej adres URL, ponieważ lokalizuje tekst .
Warto zanotować faktyczny URN (aby zobaczyć, jak to się ma do adresu URL): urn: isbn: 0-486-27557-4
Michael Brewer-Davis
2
@Michael - Rozumiem, że ISBN 0486275574nazwa również tekst, a zatem kwalifikuje się jako URN. Wybieram format, który moim zdaniem będzie bardziej znany czytelnikom.
Greg
2
Czy miałoby więc sens stwierdzenie, że skrót (np. SHA1) pliku może być URN dla tego pliku?
johnsimer
@ johnsimer Nie myśl tak, ponieważ możesz mieć kopię jednego pliku na tym samym komputerze, co spowoduje powstanie tego samego skrótu, a zatem nie jest unikalny.
Dennis98
141
To są bardzo dobrze napisane, ale wyczerpujące odpowiedzi. Oto różnica w zakresie CodeIgniter :
Krótko mówiąc, URL to pełny sposób na identyfikację dowolnego zasobu w dowolnym miejscu i może mieć różne protokoły, takie jak FTP, HTTP, SCP itp.
Identyfikator URI jest zasobem w bieżącej domenie, więc potrzebuje mniej informacji do znalezienia.
W każdym przypadku, gdy CodeIgniter używa słowa URL lub URI, jest to różnica, o której mówią, chociaż w wielkim schemacie internetowym nie jest w 100% poprawna.
Ta odpowiedź może być nadmiernie uproszczona, ale spójrz na kontekst jego pytania. Bardziej pomocne będzie mu to, że będzie się wahał w sprawie przestrzeni nazw XML!
Phil Sturgeon,
140
Ta odpowiedź jest nie tylko błędna, ale i aktywnie wprowadzająca w błąd. Oba przykłady to adresy URL. A ponieważ każdy adres URL jest również identyfikatorem URI, oznacza to, że oba przykłady są identyfikatorami URI. W celu wykazania różnicy między identyfikatorami URI i adresami URL jest to całkowicie bezużyteczne.
Jörg W Mittag
12
Jest to różnica, jeśli chodzi o CodeIgniter. W każdym przypadku używają słowa URL lub URI, to jest różnica, o której mówią. Dlatego w wielkim schemacie sieci nie jest w 100% poprawny, ale w zakresie pytania PO (różnica w CodeIgniter), ta odpowiedź jest całkowicie poprawna.
Phil Sturgeon
12
To jest źle. @ JörgWMittag jest głównie na punkcie. Adresy URL są identyfikatorami URI i są „w pełni kwalifikowane”; więc „URL” w tej odpowiedzi to oba. Ale /some/page.htmlto nie jest identyfikator URI. Jest to „krewny-referen”, który jest rodzajem „referencji URI”. W połączeniu z podstawowym kontekstem URI można go rozwiązać na URI, ale sam nie jest URI. Patrz sekcja 4.1 RFC 3986 . CodeIgniter prawdopodobnie używa niewłaściwych terminów i należy to przywołać; Q (obecnie edytowany) nie jest w ramce jako specyficzny dla CodeIgniter.
Andrew Janke,
37
Dla przyszłych ludzi, którzy czytają te komentarze i są tak samo zdezorientowani jak ja: Ta odpowiedź nie została opublikowana na to pytanie. To pytanie nigdy nie miało nic wspólnego z CodeIgniter. Było zduplikowane pytanie, w którym wyraźnie wymieniono CodeIgniter, które zostało zamknięte i wszystkie odpowiedzi zostały przeniesione na to pytanie. Ta odpowiedź była jedną z tych, które zostały przeniesione ze starego zamkniętego pytania na to chronione pytanie. Mimo to ta odpowiedź jest myląca. Głosowałem za tym - inni powinni zrobić to samo, ponieważ w nowym domu jest źle. Autor powinien go usunąć lub połączenie zostanie cofnięte.
ArtOfWarfare
92
Przede wszystkim uwolnij swój umysł od zamieszania i uprość to, a zrozumiesz.
URI => Uniform Resource Identifier
Identyfikuje pełny adres zasobu, tj. Lokalizację, nazwę lub jedno i drugie.
Uważam, że druga ilustracja jest niepoprawna. Zgodnie ze specyfikacją url.spec.whatwg.org/#url-writing Adres URL musi być zapisany jako względny lub bezwzględny adres URL, opcjonalnie po nim „#” i fragment. Więc,#posts fragment identyfikator może być częścią adresu URL
ruvim
7
Dwie ilustracje są ze sobą sprzeczne.
patapouf_ai
53
Jest to jeden z najbardziej zagmatwanych i być może nieistotnych tematów, które spotkałem jako profesjonalista w sieci.
Jak rozumiem, identyfikator URI to opis czegoś, zgodny z przyjętym formatem, który może zdefiniować zarówno jedną, jak i unikalną nazwę (identyfikację) czegoś i jego lokalizację.
Istnieją dwa podstawowe podzbiory - adresy URL, które określają lokalizację (szczególnie dla przeglądarki próbującej wyszukać stronę) i URN, które określają unikalną nazwę czegoś.
Myślę, że URN są podobne do GUID. Są to po prostu znormalizowana metodologia zapewniająca unikalne nazwy rzeczy. Podobnie jak w deklaratywnej przestrzeni nazw, która używa nazwy firmy - to nie jest tak, że na serwerze znajduje się jakiś zasób odpowiadający temu wierszowi tekstu - po prostu jednoznacznie coś identyfikuje.
Staram się również całkowicie unikać terminu URI i dyskutuję o rzeczach tylko pod względem adresu URL lub URN, ponieważ powoduje to wiele zamieszania. Pytanie, na które powinniśmy naprawdę odpowiedzieć, to nie tyle semantyka, ale jak rozpoznać, kiedy spotykamy się z terminami, czy istnieje w nich jakakolwiek praktyczna różnica, która zmieni podejście do sytuacji programistycznej. Na przykład, jeśli ktoś poprawi mnie w rozmowie i powie: „och, to nie jest adres URL, to identyfikator URI”, wiem, że jest pełny. Jeśli ktoś powie „używamy URN do zdefiniowania zasobu”, bardziej prawdopodobne jest, że zrozumiem, że nazywamy go tylko w sposób unikalny, a nie lokalizujemy na serwerze.
Nie, myślę, że masz rację. Semantyka URI vs. URL vs. URL vs. URI-ref itp. Są bezużyteczne dla większości programistów, tylko dlatego, że napędzają bezsensowną (nieproduktywną, nieistotną dla podejmowania decyzji) debatę. Gdyby redirect_urlzamiast tego użyto interfejsu API Google redirect_uri, czy ktoś naprawdę by się tym przejmował?
53
Tożsamość = nazwa z lokalizacją
Każdy URL ( U niform R esource L ocator) jest identyfikatorem URI ( U niform R esource I dentifier ), mówiąc abstrakcyjnie, ale każdy URI nie jest adresem URL. Istnieje inna podkategoria URI to URN ( U niform R esource N ame), który jest nazwany zasób, ale nie określają, jak je znaleźć, jak mailto, nowości, ISBN jest URI. Źródło
URNA:
Format URN: urn:[namespace identifier]:[namespace specific string]
Analogia:
Aby dotrzeć do osoby: Prowadzenie pojazdu (protokół inne SMS, e-mail, telefon), Adres (nazwa hosta inny numer telefonu, emailid) i nazwa osoby (nazwa obiektu ze ścieżką względną).
Adresy URL nie są prawdziwym podzbiorem URI. Można dokonać vaid URL ze znakami [i ]ale nie URI.
Adam Gent
4
Nawiasy kwadratowe nie są poprawne w URI ani adresach URL. Zobacz to pytanie, które zawiera wiele odniesień do specyfikacji: Czy w adresach URL dozwolone są nawiasy kwadratowe? . Kiedy nawiasy kwadratowe pojawiają się w którymkolwiek z nich, należy je zakodować.
Stephen Ostermiller
35
Innym przykładem, którego lubię używać, gdy myślę o identyfikatorach URI, jest atrybut xmlns dokumentu XML:
W tym przypadku com.mycompany.mynode byłby identyfikatorem URI, który jednoznacznie identyfikuje przestrzeń nazw „myPrefix” dla wszystkich elementów, które używają jej w moim dokumencie XML. To NIE jest adres URL, ponieważ służy tylko do identyfikacji, a nie do lokalizowania czegoś jako takiego.
Ze względu na trudności z wyraźnym rozróżnieniem URI i URL, o ile pamiętam, W3C nie robi już różnicy między URI a URL ( http://www.w3.org/Addressing/ ).
Może tęskniłem za tą częścią, ale nie widzę żadnego odniesienia w podanym linku do nich usuwającym rozróżnienie między adresem URL a URI, tylko potwierdzającym zamieszanie i chcącym, aby specyfikacje, które nieprawidłowo odwołują się do adresu URL, zostały zaktualizowane, aby odwoływały się do URI.
Tim Gautier,
27
Oni są tym samym . Identyfikator URI to uogólnienie adresu URL. Pierwotnie URI miały być podzielone na adresy URL (adresy) i URN (nazwy), ale potem istniała niewielka różnica między URL a URI, a URI HTTP były używane jako przestrzenie nazw, mimo że tak naprawdę nie zlokalizowały żadnych zasobów.
Myślałem, że jest na odwrót. Adres URL odnosi się do konkretnego obiektu, a identyfikator URI może odnosić się do tego, pojęcia lub czegokolwiek innego.
Chris Charabaruk
4
Adres URL lokalizuje zasób i jest rodzajem identyfikatora URI, który identyfikuje zasób.
Mark Cidade
To prawda, że są one tym samym, ponieważ definicja adresu URL zmieniła się z czasem. Adresy URL były kiedyś szczególnym typem identyfikatora URI, ale z powodu zamieszania, które spowodowało, W3C przedefiniował adres URL tak, aby oznaczał URI.
Uniform Resource Identifier (URI) to zwarta sekwencja znaków identyfikująca zasób abstrakcyjny lub fizyczny.
Identyfikator URI można dodatkowo sklasyfikować jako lokalizator, nazwę lub jedno i drugie. Termin „Uniform Resource Locator” (URL) odnosi się do podzbioru identyfikatorów URI, który oprócz identyfikacji zasobu, umożliwia także lokalizację zasobu poprzez opis jego podstawowego mechanizmu dostępu (np. „Lokalizacji” sieci).
Adres URL to identyfikator URI, który oprócz identyfikacji zasobu zapewnia środki do działania lub uzyskania reprezentacji zasobu poprzez opisanie jego podstawowego mechanizmu dostępu lub „lokalizacji” sieci.
Adres URL to specjalizacja URI, która określa lokalizację sieciową konkretnego zasobu. W przeciwieństwie do URN, adres URL określa, w jaki sposób można uzyskać zasób. Używamy adresów URL na co dzień w formie http://example.comitp. Ale adres URL nie musi być adresem URL HTTP, może byćftp://example.com itd.
URI
Identyfikator URI identyfikuje zasób według lokalizacji, nazwy lub obu. Najczęściej większość z nas używa identyfikatorów URI, które określają lokalizację zasobu. Moim zdaniem fakt, że URI może identyfikować zasoby zarówno według nazwy, jak i lokalizacji, spowodował wiele zamieszania. Identyfikator URI ma dwie specjalizacje zwane URL i URN.
Różnica między adresem URL a identyfikatorem URI
Identyfikator URI jest identyfikatorem niektórych zasobów, ale adres URL zawiera szczegółowe informacje na temat uzyskania tego zasobu. Identyfikator URI jest adresem URL i, jak zauważył jeden z komentatorów, obecnie uważa się za niewłaściwe używanie adresu URL podczas opisywania aplikacji. Zasadniczo, jeśli adres URL opisuje zarówno lokalizację, jak i nazwę zasobu, terminem używanym jest URI. Ponieważ zazwyczaj tak jest w przypadku większości z nas na co dzień, identyfikator URI jest poprawnym terminem.
Nie uczy mnie to niczego, co nie jest objęte innymi odpowiedziami, które mają co najmniej 6 lat, i które są znacznie bardziej kompletne i faktycznie próbują wyjaśnić, jak odróżnić URI od adresów URL.
ccjmne
2
Należy zauważyć, że obraz jest diagramem Venna, nawet jeśli nie wygląda jak typowy. Widziałem, jak ludzie próbują interpretować to jako „części adresu URL”. Ten diagram nie mówi, że identyfikatory URI zaczynają się od adresu URL, a kończą na URN.
Stephen Ostermiller
14
Identyfikator URI identyfikuje zasób według lokalizacji, nazwy lub obu. Najczęściej większość z nas używa identyfikatorów URI, które określają lokalizację zasobu. Moim zdaniem fakt, że URI może identyfikować zasoby zarówno według nazwy, jak i lokalizacji, spowodował wiele zamieszania. Identyfikator URI ma dwie specjalizacje zwane URL i URN.
Adres URL to specjalizacja URI, która określa lokalizację sieciową konkretnego zasobu. W przeciwieństwie do URN, adres URL określa, w jaki sposób można uzyskać zasób. Używamy adresów URL na co dzień w postaci http://stackoverflow.com itp. Ale adres URL nie musi być adresem URL HTTP, może być ftp://example.comitd.
URL jest rodzajem identyfikatora URI, który identyfikuje zasób poprzez reprezentację jego podstawowego mechanizmu dostępu (np. jego „lokalizacji” w sieci), a nie za pomocą niektórych innych atrybutów.
Po przeczytaniu postów znajduję kilka bardzo istotnych komentarzy. Krótko mówiąc, zamieszanie między definicjami adresu URL i URI opiera się częściowo na tym, która definicja zależy od tego, a także na nieformalnym użyciu słowa URI w rozwoju oprogramowania.
Z definicji URL jest podzbiorem URI [RFC2396]. URI zawiera URN i adres URL. Zarówno URI, jak i URL mają swoją własną specyficzną składnię, która nadaje im status URI lub URL. URN służą do jednoznacznej identyfikacji zasobu, a adres URL do lokalizacji zasobu. Pamiętaj, że zasób może mieć więcej niż jeden adres URL, ale tylko jedną URN. [RFC2611]
Jako programiści i programiści stron internetowych prawie zawsze będziemy zajmować się adresami URL, a zatem URI. Teraz adres URL jest specjalnie zdefiniowany, aby mieć wszystkie schematy części: część specyficzna dla schematu, jak na przykład https://stackoverflow.com/questions . To jest adres URL i jest to także identyfikator URI. Teraz rozważ względny link osadzony na stronie, taki jak ../index.html. To nie jest już adres URL z definicji. Jest to nadal tak zwane „odniesienie URI” [RFC2396].
Uważam, że kiedy słowo URI jest używane w odniesieniu do ścieżek względnych, tak naprawdę myśli się o „referencji URI”. Tak więc nieformalnie systemy oprogramowania używają identyfikatora URI w odniesieniu do względnej ścieżki i adresu URL adresu bezwzględnego. W tym sensie ścieżka względna nie jest już adresem URL, ale nadal identyfikatorem URI.
URN: unikalna nazwa zasobu, tj. „What” (np. Urn: issn: 1234-5678). To ma być wyjątkowe ... ponieważ w dwóch różnych dokumentach nie można mieć tej samej urny. Trochę jak „uuid”
URI: może być albo URN, albo URL. Ta rozmyta definicja wynika z RFC 3986 wyprodukowanego przez W3C i IETF.
Definicja URI zmieniła się na przestrzeni lat, więc większość ludzi ma wątpliwości. Możesz jednak teraz pocieszyć się faktem, że możesz odnieść się do http://somesite.com/something jako URL lub URI ... i będziesz miał rację (przynajmniej na razie. .)
Możesz zobaczyć wyraźny przykład przy użyciu tej url::current()metody. Jeśli masz ten adres URL : http://example.com/kohana/index.php/welcome/home.html?query=stringwówczas użycie url:current()daje identyfikator URI, który zgodnie z dokumentacją to: welcome / home
Ta odpowiedź jest zła. Identyfikator URI nie jest częścią adresu URL. Raczej adresy URL są rodzajem URI. Co więcej, link w tej odpowiedzi jest zepsuty (i nie mogę znaleźć odpowiedniego zamiennika.)
Stephen Ostermiller
8
Identyfikatory URI wynikały z potrzeby identyfikacji zasobów w Internecie oraz innych zasobów internetowych, takich jak elektroniczne skrzynki pocztowe, w jednolity i spójny sposób. Można więc wprowadzić nowy typ widżetu: identyfikatory URI do identyfikacji zasobów widżetu lub użyć tel: identyfikatorów URI do posiadania łączy internetowych, które wywołują połączenia telefoniczne po ich wywołaniu.
Niektóre identyfikatory URI zawierają informacje umożliwiające zlokalizowanie zasobu (takie jak nazwa hosta DNS i ścieżka na tym komputerze), a niektóre są używane jako czyste nazwy zasobów. URL jest zarezerwowana dla identyfikatorów, które są lokalizatory zasobów , w tym „http” adresów URL, takich jak http://stackoverflow.com , który identyfikuje stronę internetową danej ścieżki na hoście. Innym przykładem są adresy URL „mailto”, takie jak mailto: [email protected] , które identyfikują skrzynkę pocztową pod danym adresem.
URN to URI, które są używane jako czyste nazwy zasobów, a nie lokalizatory. Na przykład identyfikator URI: mid: [email protected] to identyfikator URN, który identyfikuje wiadomość e-mail zawierającą go w polu „Identyfikator wiadomości”. Identyfikator URI służy do odróżnienia tej wiadomości od dowolnej innej wiadomości e-mail. Ale sam nie podaje adresu wiadomości w żadnym sklepie.
Nawet jeśli StackOverflow pozwoli mi na hiperłącze do schematu s3://protokołu , nie pomoże ci to w zlokalizowaniu zasobu. Ponieważ Identyfikuje się zasobów , rys. 1 jest prawidłowym identyfikatorem URI. Jest to również poprawny URN, ponieważ Amazon wymaga, aby segment (ich termin dla authorityczęści URI) był unikalny w centrach danych. Jest pomocny w zlokalizowaniu go, ale nie wskazuje centrum danych. Dlatego nie działa jako adres URL.
Czym zatem różnią się URI, URL i URN w tym przypadku?
Ta odpowiedź jest myląca. Cytat z Wikipedii „Uniform Resource Name (URN) działa jak nazwisko osoby, podczas gdy Uniform Resource Locator (URL) przypomina adres tej osoby. Innymi słowy: URN określa tożsamość elementu, a URL zapewnia metodę wyszukiwania to." Również URN i adresy URL są identyfikatorami URI.
Najczęstszym identyfikatorem URI jest Uniform Resource Locator (URL), który identyfikuje adres domeny internetowej. Innym, nie tak powszechnym typem URI jest Universal Resource Name (URN).
Jednolity identyfikator zasobu (URI) reprezentuje coś dużego. Można podzielić identyfikatory URI / identyfikatory URI można sklasyfikować jako lokalizatory (jednolite lokalizatory zasobów - adres URL) lub jako nazwy (jednolita nazwa zasobu - URN), albo jedno i drugie. Zasadniczo URN działa jak nazwisko osoby, a adres URL przedstawia adres tej osoby. Krótko mówiąc, URN określa tożsamość elementu, podczas gdy adres URL określa metodę jego znalezienia, w końcu enkapsulując te dwa pojęcia, jest URI
Każdy, kto ma do czynienia z siecią semantyczną, często spotyka się z terminami IRI , URI , URL i URN . Niemniej jednak często zauważam, że istnieje pewne zamieszanie co do ich dokładnego znaczenia. I oczywiście inni też to zauważyli (patrz np. RFC3305 lub wyszukiwanie w Google). Szczerze mówiąc, na początku byłem nawet zdezorientowany. Ale tak naprawdę problem nie jest tak skomplikowany. Rzućmy okiem na definicje wymienionych terminów, aby zobaczyć, jakie są różnice:
URI
Uniform Resource Identifier jest zwarty ciąg znaków, który identyfikuje abstrakcyjnego lub fizycznego zasobu. Zestaw znaków jest ograniczony do US-ASCII z wyłączeniem niektórych znaków zastrzeżonych. Znaki spoza zestawu dozwolonych znaków mogą być reprezentowane przy użyciu kodowania procentowego. Identyfikator URI może być używany jako lokalizator, nazwa lub oba. Jeśli identyfikator URI jest lokalizatorem, opisuje podstawowy mechanizm dostępu do zasobu. Jeśli identyfikator URI jest nazwą, identyfikuje zasób, nadając mu unikalną nazwę. Dokładne specyfikacje składni i semantyki identyfikatora URI zależą od zastosowanego schematu zdefiniowanego przez znaki przed pierwszym dwukropkiem. [RFC3986]
URNA
Uniform Resource Name jest URI w urnie schemacie służyć jako trwałe, niezależne od lokalizacji, identyfikatora zasobów. Historycznie termin ten odnosił się również do dowolnego identyfikatora URI. [RFC3986] URN składa się z identyfikatora przestrzeni nazw (NID) i łańcucha specyficznego dla przestrzeni nazw (NSS): urn :: Składnia i semantyka NSS jest specyficzna dla każdego NID. Oprócz zarejestrowanych NID-ów istnieje jeszcze kilka NID-ów, które nie przeszły oficjalnego procesu rejestracji. [RFC2141]
URL
Uniform Resource Locator jest URI, że dodatkowo do identyfikacji zasobów, zapewnia środki lokalizacji zasobów opisując pierwszorzędowy mechanizm dostępu [RFC3986]. Ponieważ nie ma dokładnej definicji adresu URL za pomocą zestawu schematów, „URL jest użytecznym, ale nieformalnym pojęciem”, zwykle odnoszącym się do podzbioru URI, które nie zawierają URN [RFC3305].
IRI
Internationalized Resource Identifier jest zdefiniowana podobnie do URI, ale zestaw znaków jest przedłużony do Uniwersalny kodowanego zestawu znaków. Dlatego może zawierać dowolne znaki łacińskie i inne niż łacińskie, z wyjątkiem znaków zastrzeżonych. Zamiast rozszerzać definicję URI, wprowadzono termin IRI, aby umożliwić wyraźne rozróżnienie i uniknąć niezgodności. IRI mają zastąpić identyfikatory URI w identyfikacji zasobów w sytuacjach, w których obsługiwany jest uniwersalny kodowany zestaw znaków. Z definicji każdy URI jest IRI. Ponadto istnieje zdefiniowane przypuszczalne odwzorowanie IRI na URI: Każdy IRI może być odwzorowany na dokładnie jeden URI, ale różne IRI mogą być mapowane na ten sam URI. Dlatego konwersja z URI do IRI może nie dawać pierwotnego IRI. [RFC3987]
Podsumowując możemy powiedzieć:
IRI is a superset of URI (IRI ⊃ URI)
URI is a superset of URL (URI ⊃ URL)
URI is a superset of URN (URI ⊃ URN)
URL and URN are disjoint (URL ∩ URN = ∅)
Wnioski dotyczące problemów z siecią semantyczną
RDF wyraźnie pozwala na używanie IRI do nazwania jednostek [RFC3987]. Oznacza to, że możemy używać prawie każdej postaci w nazwach jednostek. Z drugiej strony często mamy do czynienia z oprogramowaniem wczesnego stanu. Dlatego nie jest prawdopodobne, że wystąpią problemy przy użyciu znaków innych niż ASCII. Dlatego sugeruję, aby unikać nazw innych niż URI dla encji i zalecam używanie http URI [LINKED-DATA]. Krótko mówiąc: używaj adresów URL tylko do nazwania swoich podmiotów. Oczywiście możemy odnosić się do istniejących podmiotów nazwanych przez URN. Powinniśmy jednak unikać tworzenia nowych tego rodzaju identyfikatorów.
( URIs ( URLs ) )
Odpowiedzi:
Od RFC 3986 :
Więc wszystkie adresy URL są identyfikatorami URI (właściwie niezupełnie - patrz poniżej), a wszystkie URN są identyfikatorami URI - ale URN i adresy URL są różne, więc nie można powiedzieć, że wszystkie URI są adresami URL.
EDYCJA: Wcześniej myślałem, że wszystkie adresy URL są poprawnymi identyfikatorami URI, ale zgodnie z komentarzami:
Tak więc, niestety, to jeszcze bardziej zabrudza wody.
Jeśli jeszcze nie przeczytałeś odpowiedzi Rogera Pate'a , radzę to zrobić.
źródło
[
lub jest]
tak, ponieważ specyfikacja mówi „nie powinien”, a nie „nie powinien”.java.net.URI
dokument mówi „każdy adres URL jest identyfikatorem URI, mówiąc abstrakcyjnie, ale nie każdy identyfikator URI jest adresem URL”. Ijava.net.URL
robi dziwne rzeczy, takie jak sprawdzanie równości adresów URL przez przekształcanie nazw hostów na adresy IP (co wydaje się sprzeczne z RFC 3986 sec 6 w pierwszej kolejności i psuje wirtualne hosty). Myślę, że to po prostu oznacza, że Java Standard Library ma pewne niespójne zachowanie klas.URI s zidentyfikować i URL s zlokalizować ; jednak lokalizatory są również identyfikatorami , więc każdy adres URL jest również identyfikatorem URI, ale istnieją identyfikatory URI, które nie są adresami URL.
Przykłady
To jest moje imię, które jest identyfikatorem. Jest jak identyfikator URI, ale nie może być adresem URL, ponieważ nie mówi nic o mojej lokalizacji ani o tym, jak się ze mną skontaktować. W tym przypadku zdarza się również, że identyfikuje co najmniej 5 innych osób w samych Stanach Zjednoczonych.
Jest to lokalizator, który jest identyfikatorem tej fizycznej lokalizacji. Jest to zarówno adres URL, jak i identyfikator URI (ponieważ wszystkie adresy URL są identyfikatorami URI), a także pośrednio identyfikuje mnie jako „rezydenta…”. W tym przypadku jednoznacznie mnie identyfikuje, ale zmieniłoby się to, jeśli dostanę współlokatora.
Mówię „lubię”, ponieważ te przykłady nie są zgodne z wymaganą składnią.
Popularne zamieszanie
Z Wikipedii :
Z powodu tego powszechnego zamieszania wiele produktów i dokumentacji nieprawidłowo używa jednego terminu zamiast drugiego, przypisuje własne rozróżnienie lub używa ich synonimicznie.
URN
Moje imię, Roger Pate, może być jak URN (Uniform Resource Name), z wyjątkiem tych, które są znacznie bardziej regulowane i mają być unikalne zarówno w czasie, jak i przestrzeni.
Ponieważ obecnie udostępniam tę nazwę innym osobom, nie jest ona unikalna na całym świecie i nie byłaby odpowiednia jako URN. Jednak nawet jeśli żadna inna rodzina nie użyła tego imienia, jestem nazwany na cześć mojego dziadka ze strony ojca, więc nadal nie będzie wyjątkowy w czasie. I nawet jeśli tak nie było, możliwość nazwania moich potomków po mnie czyni to nieodpowiednim jako URN.
URN różnią się od adresów URL tym sztywnym ograniczeniem unikalności, nawet jeśli oba mają wspólną składnię URI.
źródło
URNs are different from URLs in this rigid uniqueness constraint
Czy to oznacza, że adresy URL nie jednoznacznie identyfikują lokalizacji?URI - jednolity identyfikator zasobu
Identyfikatory URI są standardem do identyfikowania dokumentów za pomocą krótkiego ciągu cyfr, liter i symboli. Są one zdefiniowane w RFC 3986 - Uniform Resource Identifier (URI): Generic Składnia . Adresy URL, URN i URC są wszystkimi typami URI.
URL - jednolity lokalizator zasobów
Zawiera informacje o tym, jak pobrać zasób z jego lokalizacji. Na przykład:
http://example.com/mypage.html
ftp://example.com/download.zip
mailto:[email protected]
file:///home/user/file.txt
tel:1-888-555-5555
http://example.com/resource?foo=bar#fragment
/other/link.html
(Względny adres URL, przydatny tylko w kontekście innego adresu URL)Adresy URL zawsze zaczynają się od protokołu (
http
) i zwykle zawierają informacje, takie jak nazwa hosta sieciowego (example.com
) i często ścieżka dokumentu (/foo/mypage.html
). Adresy URL mogą mieć parametry zapytania i identyfikatory fragmentów.URN - jednolita nazwa zasobu
Identyfikuje zasób za pomocą unikalnej i trwałej nazwy, ale niekoniecznie mówi, jak go zlokalizować w Internecie. Zwykle zaczyna się od przedrostka
urn:
Na przykład:urn:isbn:0451450523
do identyfikacji książki według numeru ISBN.urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66
globalnie unikalny identyfikatorurn:publishing:book
- Przestrzeń nazw XML, która identyfikuje dokument jako typ książki.URN mogą identyfikować pomysły i koncepcje. Nie ograniczają się one do identyfikacji dokumentów. Kiedy URN reprezentuje dokument, może zostać przetłumaczony na adres URL przez „resolver”. Dokument można następnie pobrać z adresu URL.
URC - jednolite cytowanie zasobów
Wskazuje na metadane dotyczące dokumentu, a nie na sam dokument. Przykładem URC jest taki, który wskazuje na kod źródłowy HTML strony, taki jak:
view-source:http://example.com/
URI danych
Zamiast lokalizować je w Internecie lub nazywać, dane można umieścić bezpośrednio w URI. Przykładem może być
data:,Hello%20World
.Często Zadawane Pytania
Słyszałem, że nie powinienem już podawać adresu URL, dlaczego?
Specyfikacja W3 dla HTML mówi, że
href
tag zakotwiczenia może zawierać identyfikator URI, a nie tylko adres URL. Powinieneś być w stanie podać URN, taki jak<a href="urn:isbn:0451450523">
. Twoja przeglądarka rozpozna następnie ten URN na adres URL i pobierze książkę dla Ciebie.Czy jakieś przeglądarki rzeczywiście wiedzą, jak pobierać dokumenty przez URN?
Nie wiem, ale nowoczesna przeglądarka internetowa implementuje schemat URI danych.
Czy różnica między URL a URI ma coś wspólnego z tym, czy jest względna czy bezwzględna?
Nie. Zarówno względne, jak i bezwzględne adresy URL to adresy URL (i identyfikatory URI).
Czy różnica między URL a URI ma coś wspólnego z tym, czy ma parametry zapytania?
Nie. Oba adresy URL z parametrami zapytania i bez nich są adresami URL (i identyfikatorami URI).
Czy różnica między URL a URI ma coś wspólnego z tym, czy ma identyfikator fragmentu?
Nie. Oba adresy URL z identyfikatorami fragmentów i bez nich są adresami URL (i identyfikatorami URI).
Czy różnica między URL a URI ma coś wspólnego z dozwolonymi znakami?
Nie. Adresy URL są zdefiniowane jako ścisły podzbiór identyfikatorów URI. Jeśli analizator składni zezwala na znak w adresie URL, ale nie w identyfikatorze URI, w analizatorze występuje błąd. Specyfikacje szczegółowo opisują, które znaki są dozwolone w jakich częściach adresów URL i URI. Niektóre znaki mogą być dozwolone tylko w niektórych częściach adresu URL, ale same znaki nie stanowią różnicy między adresami URL i identyfikatorami URI.
Ale czy W3C nie mówi teraz, że adresy URL i URI są tym samym?
Tak. W3C zdało sobie sprawę, że jest w tym mnóstwo zamieszania. Wydali dokument wyjaśniający URI, który mówi, że teraz można używać zamiennie terminów URL i URI (czyli URI). Nie jest już przydatne ścisłe dzielenie identyfikatorów URI na różne typy, takie jak URL, URN i URC.
Czy identyfikator URI może być zarówno adresem URL, jak i URN?
Definicja URN jest teraz luźniejsza niż to, co powiedziałem powyżej. Najnowszy RFC URI mówi, że każdy URI może teraz być URN (niezależnie od tego, czy rozpoczyna się
urn:
) tak długo, jak to ma „właściwości nazwy.” To znaczy: Jest globalnie wyjątkowy i trwały, nawet gdy zasób przestaje istnieć lub staje się niedostępny. Przykład: identyfikatory URI używane w typach dokumentów HTML, takich jakhttp://www.w3.org/TR/html4/strict.dtd
. Ten identyfikator URI nadal będzie nazywać przejściowy typ HTML4, nawet jeśli strona w witrynie w3.org zostanie usunięta.źródło
file://
przedrostek. Chociaż przeglądarki zazwyczaj obsługują ścieżki plików w formacie innym niż URL. Mozilla publikuje swoje przypadki testowe dla adresów URL plików .mailto:[email protected]
jako adres URL, ale inna odpowiedź poniżej mówi, że jest to URN? Który jest poprawny? Czy to zarówno URN, jak i URL?Podsumowując: identyfikator URI identyfikuje, adres URL identyfikuje i lokalizuje.
Zastanów się nad konkretną edycją sztuki Szekspira Romeo i Julia , której kopię cyfrową masz w sieci domowej.
Możesz zidentyfikować tekst jako
urn:isbn:0-486-27557-4
.Byłby to identyfikator URI, a dokładniej URN *, ponieważ nazywa on tekst .
Możesz również zidentyfikować tekst jako
file://hostname/sharename/RomeoAndJuliet.pdf
.Byłby to również identyfikator URI, a dokładniej adres URL, ponieważ lokalizuje tekst .
* Jednolita nazwa zasobu
(Uwaga: mój przykład pochodzi z Wikipedii )
źródło
ISBN 0486275574
nazwa również tekst, a zatem kwalifikuje się jako URN. Wybieram format, który moim zdaniem będzie bardziej znany czytelnikom.To są bardzo dobrze napisane, ale wyczerpujące odpowiedzi. Oto różnica w zakresie CodeIgniter :
URL - http://example.com/some/page.html
URI - /some/page.html
Krótko mówiąc, URL to pełny sposób na identyfikację dowolnego zasobu w dowolnym miejscu i może mieć różne protokoły, takie jak FTP, HTTP, SCP itp.
Identyfikator URI jest zasobem w bieżącej domenie, więc potrzebuje mniej informacji do znalezienia.
W każdym przypadku, gdy CodeIgniter używa słowa URL lub URI, jest to różnica, o której mówią, chociaż w wielkim schemacie internetowym nie jest w 100% poprawna.
źródło
/some/page.html
to nie jest identyfikator URI. Jest to „krewny-referen”, który jest rodzajem „referencji URI”. W połączeniu z podstawowym kontekstem URI można go rozwiązać na URI, ale sam nie jest URI. Patrz sekcja 4.1 RFC 3986 . CodeIgniter prawdopodobnie używa niewłaściwych terminów i należy to przywołać; Q (obecnie edytowany) nie jest w ramce jako specyficzny dla CodeIgniter.Przede wszystkim uwolnij swój umysł od zamieszania i uprość to, a zrozumiesz.
URI => Uniform Resource Identifier Identyfikuje pełny adres zasobu, tj. Lokalizację, nazwę lub jedno i drugie.
URL => Uniform Resource Locator Identyfikuje lokalizację zasobu.
URN => Jednolita nazwa zasobu Identyfikuje nazwę zasobu
Przykład
Mamy adres https://www.google.com/folder/page.html gdzie,
URI (Uniform Resource Identifier) => https://www.google.com/folder/page.html
URL (Uniform Resource Locator) => https://www.google.com/
URN (Uniform Resource Name) => /folder/page.html
URI => (URL + URN) lub tylko adres URL lub tylko URN
źródło
Mały dodatek do już opublikowanych odpowiedzi, oto schemat Venna podsumowujący teorię (z pięknego wyjaśnienia Prateka Joshi ):
I przykład (również ze strony Prateek):
źródło
#posts
fragment identyfikator może być częścią adresu URLJest to jeden z najbardziej zagmatwanych i być może nieistotnych tematów, które spotkałem jako profesjonalista w sieci.
Jak rozumiem, identyfikator URI to opis czegoś, zgodny z przyjętym formatem, który może zdefiniować zarówno jedną, jak i unikalną nazwę (identyfikację) czegoś i jego lokalizację.
Istnieją dwa podstawowe podzbiory - adresy URL, które określają lokalizację (szczególnie dla przeglądarki próbującej wyszukać stronę) i URN, które określają unikalną nazwę czegoś.
Myślę, że URN są podobne do GUID. Są to po prostu znormalizowana metodologia zapewniająca unikalne nazwy rzeczy. Podobnie jak w deklaratywnej przestrzeni nazw, która używa nazwy firmy - to nie jest tak, że na serwerze znajduje się jakiś zasób odpowiadający temu wierszowi tekstu - po prostu jednoznacznie coś identyfikuje.
Staram się również całkowicie unikać terminu URI i dyskutuję o rzeczach tylko pod względem adresu URL lub URN, ponieważ powoduje to wiele zamieszania. Pytanie, na które powinniśmy naprawdę odpowiedzieć, to nie tyle semantyka, ale jak rozpoznać, kiedy spotykamy się z terminami, czy istnieje w nich jakakolwiek praktyczna różnica, która zmieni podejście do sytuacji programistycznej. Na przykład, jeśli ktoś poprawi mnie w rozmowie i powie: „och, to nie jest adres URL, to identyfikator URI”, wiem, że jest pełny. Jeśli ktoś powie „używamy URN do zdefiniowania zasobu”, bardziej prawdopodobne jest, że zrozumiem, że nazywamy go tylko w sposób unikalny, a nie lokalizujemy na serwerze.
Jeśli jestem daleko od bazy - daj mi znać!
źródło
redirect_url
zamiast tego użyto interfejsu API Googleredirect_uri
, czy ktoś naprawdę by się tym przejmował?Każdy URL ( U niform R esource L ocator) jest identyfikatorem URI ( U niform R esource I dentifier ), mówiąc abstrakcyjnie, ale każdy URI nie jest adresem URL. Istnieje inna podkategoria URI to URN ( U niform R esource N ame), który jest nazwany zasób, ale nie określają, jak je znaleźć, jak mailto, nowości, ISBN jest URI. Źródło
URNA:
urn:[namespace identifier]:[namespace specific string]
arn:partition:service:region:account-id:resource
URL:
[scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
Analogia:
Aby dotrzeć do osoby: Prowadzenie pojazdu (protokół inne SMS, e-mail, telefon), Adres (nazwa hosta inny numer telefonu, emailid) i nazwa osoby (nazwa obiektu ze ścieżką względną).
źródło
URI => http://en.wikipedia.org/wiki/Uniform_Resource_Identifier
Adresy URL są podzbiorem identyfikatorów URI (które również zawierają URN).
Zasadniczo identyfikator URI to ogólny identyfikator, w którym adres URL określa lokalizację, a nazwa URN określa nazwę.
źródło
[
i]
ale nie URI.Innym przykładem, którego lubię używać, gdy myślę o identyfikatorach URI, jest atrybut xmlns dokumentu XML:
W tym przypadku com.mycompany.mynode byłby identyfikatorem URI, który jednoznacznie identyfikuje przestrzeń nazw „myPrefix” dla wszystkich elementów, które używają jej w moim dokumencie XML. To NIE jest adres URL, ponieważ służy tylko do identyfikacji, a nie do lokalizowania czegoś jako takiego.
źródło
Ze względu na trudności z wyraźnym rozróżnieniem URI i URL, o ile pamiętam, W3C nie robi już różnicy między URI a URL ( http://www.w3.org/Addressing/ ).
źródło
Oni są tym samym . Identyfikator URI to uogólnienie adresu URL. Pierwotnie URI miały być podzielone na adresy URL (adresy) i URN (nazwy), ale potem istniała niewielka różnica między URL a URI, a URI HTTP były używane jako przestrzenie nazw, mimo że tak naprawdę nie zlokalizowały żadnych zasobów.
źródło
Jak pokazuje powyższy obraz, w grę wchodzą trzy różne elementy. Zwykle najlepiej jest udać się do źródła, omawiając takie sprawy, więc oto ćwiczenie Tim Berners-Lee i in. glin. w RFC 3986: Jednolity identyfikator zasobu (URI): Ogólna składnia:
źródło
URI jest rodzajem superklasy adresów URL i URN. Wikipedia ma świetny artykuł na ich temat z linkami do odpowiedniego zestawu RFC.
źródło
Wikipedia poda tutaj wszystkie potrzebne informacje. Cytowanie z http://en.wikipedia.org/wiki/URI :
źródło
URL
Adres URL to specjalizacja URI, która określa lokalizację sieciową konkretnego zasobu. W przeciwieństwie do URN, adres URL określa, w jaki sposób można uzyskać zasób. Używamy adresów URL na co dzień w formie
http://example.com
itp. Ale adres URL nie musi być adresem URL HTTP, może byćftp://example.com
itd.URI
Identyfikator URI identyfikuje zasób według lokalizacji, nazwy lub obu. Najczęściej większość z nas używa identyfikatorów URI, które określają lokalizację zasobu. Moim zdaniem fakt, że URI może identyfikować zasoby zarówno według nazwy, jak i lokalizacji, spowodował wiele zamieszania. Identyfikator URI ma dwie specjalizacje zwane URL i URN.
Różnica między adresem URL a identyfikatorem URI
Identyfikator URI jest identyfikatorem niektórych zasobów, ale adres URL zawiera szczegółowe informacje na temat uzyskania tego zasobu. Identyfikator URI jest adresem URL i, jak zauważył jeden z komentatorów, obecnie uważa się za niewłaściwe używanie adresu URL podczas opisywania aplikacji. Zasadniczo, jeśli adres URL opisuje zarówno lokalizację, jak i nazwę zasobu, terminem używanym jest URI. Ponieważ zazwyczaj tak jest w przypadku większości z nas na co dzień, identyfikator URI jest poprawnym terminem.
źródło
Zgodnie z RFC 3986 identyfikatory URI składają się z następujących elementów:
Identyfikator URI opisuje protokół dostępu do zasobu ( ścieżki ) lub aplikacji ( zapytania ) na serwerze ( autorytecie ).
Wszystkie adresy URL są identyfikatorami URI, a wszystkie URN są identyfikatorami URI, ale wszystkie identyfikatory URI nie są adresami URL.
Proszę odnieść się po więcej szczegółów:
źródło
Identyfikator URI identyfikuje zasób według lokalizacji, nazwy lub obu. Najczęściej większość z nas używa identyfikatorów URI, które określają lokalizację zasobu. Moim zdaniem fakt, że URI może identyfikować zasoby zarówno według nazwy, jak i lokalizacji, spowodował wiele zamieszania. Identyfikator URI ma dwie specjalizacje zwane URL i URN.
Adres URL to specjalizacja URI, która określa lokalizację sieciową konkretnego zasobu. W przeciwieństwie do URN, adres URL określa, w jaki sposób można uzyskać zasób. Używamy adresów URL na co dzień w postaci http://stackoverflow.com itp. Ale adres URL nie musi być adresem URL HTTP, może być
ftp://example.com
itd.źródło
Chociaż terminy URI i URL są ściśle zdefiniowane, wiele osób używa tych terminów do innych celów niż te, dla których zostały zdefiniowane.
Weźmy na przykład Apache. Jeśli serwer Apache zażąda http://example.com/foo , będziesz mieć ustawione następujące zmienne środowiskowe:
REDIRECT_URL
:/foo
REQUEST_URI
:/foo
Po włączeniu mod_rewrite będziesz mieć również te zmienne:
REDIRECT_SCRIPT_URL
:/foo
REDIRECT_SCRIPT_URI
:http://example.com/foo
SCRIPT_URL
:/foo
SCRIPT_URI
:http://example.com/foo
Może to być przyczyną niektórych nieporozumień.
źródło
Zobacz ten dokument . Konkretnie,
To naprawdę nie jest bardzo jasny termin.
źródło
Po przeczytaniu postów znajduję kilka bardzo istotnych komentarzy. Krótko mówiąc, zamieszanie między definicjami adresu URL i URI opiera się częściowo na tym, która definicja zależy od tego, a także na nieformalnym użyciu słowa URI w rozwoju oprogramowania.
Z definicji URL jest podzbiorem URI [RFC2396]. URI zawiera URN i adres URL. Zarówno URI, jak i URL mają swoją własną specyficzną składnię, która nadaje im status URI lub URL. URN służą do jednoznacznej identyfikacji zasobu, a adres URL do lokalizacji zasobu. Pamiętaj, że zasób może mieć więcej niż jeden adres URL, ale tylko jedną URN. [RFC2611]
Jako programiści i programiści stron internetowych prawie zawsze będziemy zajmować się adresami URL, a zatem URI. Teraz adres URL jest specjalnie zdefiniowany, aby mieć wszystkie schematy części: część specyficzna dla schematu, jak na przykład https://stackoverflow.com/questions . To jest adres URL i jest to także identyfikator URI. Teraz rozważ względny link osadzony na stronie, taki jak ../index.html. To nie jest już adres URL z definicji. Jest to nadal tak zwane „odniesienie URI” [RFC2396].
Uważam, że kiedy słowo URI jest używane w odniesieniu do ścieżek względnych, tak naprawdę myśli się o „referencji URI”. Tak więc nieformalnie systemy oprogramowania używają identyfikatora URI w odniesieniu do względnej ścieżki i adresu URL adresu bezwzględnego. W tym sensie ścieżka względna nie jest już adresem URL, ale nadal identyfikatorem URI.
źródło
Oto moje uproszczenie:
URN: unikalna nazwa zasobu, tj. „What” (np. Urn: issn: 1234-5678). To ma być wyjątkowe ... ponieważ w dwóch różnych dokumentach nie można mieć tej samej urny. Trochę jak „uuid”
URL: „gdzie”, aby go znaleźć (np. Https://google.com/pub?issnid=1234-5678 .. lub ftp://somesite.com/doc8.pdf )
URI: może być albo URN, albo URL. Ta rozmyta definicja wynika z RFC 3986 wyprodukowanego przez W3C i IETF.
Definicja URI zmieniła się na przestrzeni lat, więc większość ludzi ma wątpliwości. Możesz jednak teraz pocieszyć się faktem, że możesz odnieść się do http://somesite.com/something jako URL lub URI ... i będziesz miał rację (przynajmniej na razie. .)
źródło
Zastanawiałem się nad tym samym i znalazłem to: http://docs.kohanaphp.com/helpers/url .
Możesz zobaczyć wyraźny przykład przy użyciu tej
url::current()
metody. Jeśli masz ten adres URL :http://example.com/kohana/index.php/welcome/home.html?query=string
wówczas użycieurl:current()
daje identyfikator URI, który zgodnie z dokumentacją to: welcome / homeźródło
Identyfikatory URI wynikały z potrzeby identyfikacji zasobów w Internecie oraz innych zasobów internetowych, takich jak elektroniczne skrzynki pocztowe, w jednolity i spójny sposób. Można więc wprowadzić nowy typ widżetu: identyfikatory URI do identyfikacji zasobów widżetu lub użyć tel: identyfikatorów URI do posiadania łączy internetowych, które wywołują połączenia telefoniczne po ich wywołaniu.
Niektóre identyfikatory URI zawierają informacje umożliwiające zlokalizowanie zasobu (takie jak nazwa hosta DNS i ścieżka na tym komputerze), a niektóre są używane jako czyste nazwy zasobów. URL jest zarezerwowana dla identyfikatorów, które są lokalizatory zasobów , w tym „http” adresów URL, takich jak http://stackoverflow.com , który identyfikuje stronę internetową danej ścieżki na hoście. Innym przykładem są adresy URL „mailto”, takie jak mailto: [email protected] , które identyfikują skrzynkę pocztową pod danym adresem.
URN to URI, które są używane jako czyste nazwy zasobów, a nie lokalizatory. Na przykład identyfikator URI: mid: [email protected] to identyfikator URN, który identyfikuje wiadomość e-mail zawierającą go w polu „Identyfikator wiadomości”. Identyfikator URI służy do odróżnienia tej wiadomości od dowolnej innej wiadomości e-mail. Ale sam nie podaje adresu wiadomości w żadnym sklepie.
źródło
Aby odpowiedzieć na to pytanie, opieram się na odpowiedzi, którą zmodyfikowałem na inne pytanie . Dobrym przykładem identyfikatora URI jest sposób identyfikacji zasobu Amazon S3. Weźmy:
s3://www-example-com/index.html
[Figa. 1]który utworzyłem jako kopię w pamięci podręcznej
http://www.example.com/index.html
[Figa. 2]w centrum danych Amazon S3-US-West-2 .
Nawet jeśli StackOverflow pozwoli mi na hiperłącze do schematu
s3://
protokołu, nie pomoże ci to w zlokalizowaniu zasobu. Ponieważ Identyfikuje się zasobów , rys. 1 jest prawidłowym identyfikatorem URI. Jest to również poprawny URN, ponieważ Amazon wymaga, aby segment (ich termin dlaauthority
części URI) był unikalny w centrach danych. Jest pomocny w zlokalizowaniu go, ale nie wskazuje centrum danych. Dlatego nie działa jako adres URL.Czym zatem różnią się URI, URL i URN w tym przypadku?
UWAGA: RFC 3986 definiuje URI jako
scheme://authority/path?query#fragment
źródło
Łatwy do wyjaśnienia:
Załóżmy, co następuje
URI to twoje imię
URL to Twój adres z Twoim imieniem i nazwiskiem w celu komunikowania się z Tobą.
nazywam się Loyola
Loyola to URI
mój adres to TN, Chennai 600001.
TN, Chennai 600 001, Loyola to URL
Nadzieję, że rozumiesz,
Teraz zobaczmy dokładny przykład
http://www.google.com/fistpage.html
powyżej możesz komunikować się ze stroną o nazwie firstpage.html ( URI ), korzystając z następującego http://www.google.com/fistpage.html ( URL ).
Dlatego URI jest podzbiorem adresu URL, ale nie odwrotnie.
źródło
Identyfikator URI (Uniform Resource Identifier) to ciąg znaków identyfikujący zasób internetowy.
Najczęstszym identyfikatorem URI jest Uniform Resource Locator (URL), który identyfikuje adres domeny internetowej. Innym, nie tak powszechnym typem URI jest Universal Resource Name (URN).
źródło
Znalazłem:
Jednolity identyfikator zasobu (URI) reprezentuje coś dużego. Można podzielić identyfikatory URI / identyfikatory URI można sklasyfikować jako lokalizatory (jednolite lokalizatory zasobów - adres URL) lub jako nazwy (jednolita nazwa zasobu - URN), albo jedno i drugie. Zasadniczo URN działa jak nazwisko osoby, a adres URL przedstawia adres tej osoby. Krótko mówiąc, URN określa tożsamość elementu, podczas gdy adres URL określa metodę jego znalezienia, w końcu enkapsulując te dwa pojęcia, jest URI
źródło
Najlepsze (techniczne) podsumowanie imo to ten
IRI, URI, URL, URN i ich różnice od Jana Martina Keila:
IRI, URI, URL, URN i ich różnice
Każdy, kto ma do czynienia z siecią semantyczną, często spotyka się z terminami IRI , URI , URL i URN . Niemniej jednak często zauważam, że istnieje pewne zamieszanie co do ich dokładnego znaczenia. I oczywiście inni też to zauważyli (patrz np. RFC3305 lub wyszukiwanie w Google). Szczerze mówiąc, na początku byłem nawet zdezorientowany. Ale tak naprawdę problem nie jest tak skomplikowany. Rzućmy okiem na definicje wymienionych terminów, aby zobaczyć, jakie są różnice:
URI
Uniform Resource Identifier jest zwarty ciąg znaków, który identyfikuje abstrakcyjnego lub fizycznego zasobu. Zestaw znaków jest ograniczony do US-ASCII z wyłączeniem niektórych znaków zastrzeżonych. Znaki spoza zestawu dozwolonych znaków mogą być reprezentowane przy użyciu kodowania procentowego. Identyfikator URI może być używany jako lokalizator, nazwa lub oba. Jeśli identyfikator URI jest lokalizatorem, opisuje podstawowy mechanizm dostępu do zasobu. Jeśli identyfikator URI jest nazwą, identyfikuje zasób, nadając mu unikalną nazwę. Dokładne specyfikacje składni i semantyki identyfikatora URI zależą od zastosowanego schematu zdefiniowanego przez znaki przed pierwszym dwukropkiem. [RFC3986]
URNA
Uniform Resource Name jest URI w urnie schemacie służyć jako trwałe, niezależne od lokalizacji, identyfikatora zasobów. Historycznie termin ten odnosił się również do dowolnego identyfikatora URI. [RFC3986] URN składa się z identyfikatora przestrzeni nazw (NID) i łańcucha specyficznego dla przestrzeni nazw (NSS): urn :: Składnia i semantyka NSS jest specyficzna dla każdego NID. Oprócz zarejestrowanych NID-ów istnieje jeszcze kilka NID-ów, które nie przeszły oficjalnego procesu rejestracji. [RFC2141]
URL
Uniform Resource Locator jest URI, że dodatkowo do identyfikacji zasobów, zapewnia środki lokalizacji zasobów opisując pierwszorzędowy mechanizm dostępu [RFC3986]. Ponieważ nie ma dokładnej definicji adresu URL za pomocą zestawu schematów, „URL jest użytecznym, ale nieformalnym pojęciem”, zwykle odnoszącym się do podzbioru URI, które nie zawierają URN [RFC3305].
IRI
Internationalized Resource Identifier jest zdefiniowana podobnie do URI, ale zestaw znaków jest przedłużony do Uniwersalny kodowanego zestawu znaków. Dlatego może zawierać dowolne znaki łacińskie i inne niż łacińskie, z wyjątkiem znaków zastrzeżonych. Zamiast rozszerzać definicję URI, wprowadzono termin IRI, aby umożliwić wyraźne rozróżnienie i uniknąć niezgodności. IRI mają zastąpić identyfikatory URI w identyfikacji zasobów w sytuacjach, w których obsługiwany jest uniwersalny kodowany zestaw znaków. Z definicji każdy URI jest IRI. Ponadto istnieje zdefiniowane przypuszczalne odwzorowanie IRI na URI: Każdy IRI może być odwzorowany na dokładnie jeden URI, ale różne IRI mogą być mapowane na ten sam URI. Dlatego konwersja z URI do IRI może nie dawać pierwotnego IRI. [RFC3987]
Podsumowując możemy powiedzieć:
Wnioski dotyczące problemów z siecią semantyczną
RDF wyraźnie pozwala na używanie IRI do nazwania jednostek [RFC3987]. Oznacza to, że możemy używać prawie każdej postaci w nazwach jednostek. Z drugiej strony często mamy do czynienia z oprogramowaniem wczesnego stanu. Dlatego nie jest prawdopodobne, że wystąpią problemy przy użyciu znaków innych niż ASCII. Dlatego sugeruję, aby unikać nazw innych niż URI dla encji i zalecam używanie http URI [LINKED-DATA]. Krótko mówiąc: używaj adresów URL tylko do nazwania swoich podmiotów. Oczywiście możemy odnosić się do istniejących podmiotów nazwanych przez URN. Powinniśmy jednak unikać tworzenia nowych tego rodzaju identyfikatorów.
źródło