Ludzie mówią o adresach URL , URI i URN tak, jakby to były różne rzeczy, ale wyglądają tak samo gołym okiem.
Jakie są między nimi widoczne różnice?
( URIs ( URLs ) )
Ludzie mówią o adresach URL , URI i URN tak, jakby to były różne rzeczy, ale wyglądają tak samo gołym okiem.
Jakie są między nimi widoczne różnice?
( URIs ( URLs ) )
Odpowiedzi:
Od RFC 3986 :
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ć.
[
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”. I java.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.
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ą.
Z Wikipedii :
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.
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 constraint
Czy to oznacza, że adresy URL nie jednoznacznie identyfikują lokalizacji?
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.
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:user@example.com
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.
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.
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
.
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.
Nie wiem, ale nowoczesna przeglądarka internetowa implementuje schemat URI danych.
Nie. Zarówno względne, jak i bezwzględne adresy URL to adresy URL (i identyfikatory URI).
Nie. Oba adresy URL z parametrami zapytania i bez nich są adresami URL (i identyfikatorami URI).
Nie. Oba adresy URL z identyfikatorami fragmentów i bez nich są adresami URL (i identyfikatorami URI).
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.
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.
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.
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:user@example.com
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 )
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.
/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
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):
#posts
fragment identyfikator może być częścią adresu URL
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.
Jeśli jestem daleko od bazy - daj mi znać!
redirect_url
zamiast tego użyto interfejsu API Google redirect_uri
, czy ktoś naprawdę by się tym przejmował?
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:
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ą).
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ę.
[
i ]
ale nie URI.
Innym przykładem, którego lubię używać, gdy myślę o identyfikatorach URI, jest atrybut xmlns dokumentu XML:
<rootElement xmlns:myPrefix="com.mycompany.mynode">
<myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>
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/ ).
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.
URI, URL, URN
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:
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).
URI jest rodzajem superklasy adresów URL i URN. Wikipedia ma świetny artykuł na ich temat z linkami do odpowiedniego zestawu RFC.
Wikipedia poda tutaj wszystkie potrzebne informacje. Cytowanie z http://en.wikipedia.org/wiki/URI :
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.
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.
Zgodnie z RFC 3986 identyfikatory URI składają się z następujących elementów:
scheme://authority/path?query
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:
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.
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ń.
Zobacz ten dokument . Konkretnie,
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.
To naprawdę nie jest bardzo jasny termin.
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.
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. .)
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życie url:current()
daje identyfikator URI, który zgodnie z dokumentacją to: welcome / home
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: fred@mail.org , 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: 0E4FC272-5C02-11D9-B115-000A95B55BC8@stackoverflow.com 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.
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 dla authority
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 jakoscheme://authority/path?query#fragment
Ł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.
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).
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
Najlepsze (techniczne) podsumowanie imo to ten
IRI, URI, URL, URN i ich różnice od Jana Martina Keila:
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:
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]
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]
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].
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]
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 = ∅)
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.