URI

**URI** *(Uniform Resource Identifier)* on merkkijono, jolla kerrotaan tietyn tiedon paikka (**URL**) tai yksikäsitteinen nimi (**URN**). Erityisesti URIn erikoistapausta **URL:ää** *(Uniform Resource Locator)* käytetään osoittamaan WWW-sivuja.

## URI, URL ja URN

URI sisältää tietoverkossa sijaitsevan tiedon tunnisteen: se voi sisältää sijainnin, nimen tai molemmat. URL sisältää tiedon, jolla tieto voidaan hakea (tiedon **sijainti**).

Kaikki URL-tiedot ovat URI-tietoja, mutta kaikki URI-tiedot eivät ole URL-tietoja. URI voi sisältää myös skeemoja, joiden avulla voidaan vain yksikäsitteisesti nimetä tieto: URN ei sisällä tiedon sijaintia.

Yleinen URIn rakenne on :n mukaan seuraava:

```
URI = scheme:[//authority]path[?query][#fragment]
```

Vähintään *skeema* (*scheme*) ja *polku* (*path*) ovat sen pakolliset osat (URN).

**URL** (*Uniform Resource Locator*) sisältää tiedon hakemiseen tarvittavan tiedon kuten protokollan ja palvelimen:

```
https://fi.wikipedia.org/w/wiki.phtml?title=URI#URI_ja_URL
```


**URN** (*Uniform Resource Name*) on URI-skeema, jonka avulla ei voi löytää tietoa, vaan se yksikäsitteisesti nimeää jonkin tiedon (ei sisällä protokollaa tai palvelintietoa). 

Esimerkiksi seuraava URN-skeema nimeää kirjan ISBN-numeron avulla:

```
urn:ISBN:952-9842-34-1
```


## URL-skeemoja

* http – HTTP-protokolla
* https – HTTP-protokolla, joka on suojattu TLS-protokollalla
* ftp – tiedostonsiirto FTP-protokollalla
* mailto – sähköpostiosoite
* ldap – tiedon haku LDAP-hakemistosta
* file – tiedostot, jotka näkyvät paikallisen tietokoneen tiedostoavaruudessa
* news – Usenet-uutisryhmät
* gopher – gopher-palvelimessa olevat tiedot (melkein kadonneet)
* telnet – telnet-pääteyhteys
* ssh – SSH-yhteys
* git – Git-yhteys
* irc – IRC-yhteys

## HTTP-skeema

Tavallisin URI-skeema on *http*. Sen tarkempi rakenne on seuraavanlainen:

```
http://omistaja/polku?toiminto
```


Omistaja on tavallisesti DNS-nimi, mutta se voi olla myös IP-osoite. Polku on vinoviivoilla (/) tarkennettu tiedon sijaintipaikka omistajan sisällä. Useimmiten se kuvaa hakemistorakennetta, ja toiminto voi olla esimerkiksi lisätieto halusta muuttaa tietoa. Toiminto koostuu usein et-merkein (&) erotelluista muuttuja-arvopareista, joiden osat on eroteltu yhtäläisyysmerkillä (=).

```
http://www.example.com/tiedot.php?nimi=Matti+Meikalainen&osoite=Aleksanterinkatu+50A
```


Lopussa voi olla vielä ristikkomerkillä (#) erotettuna tiedon osan kuvaava tunniste. Tätä tietoa ei kuitenkaan lähetetä verkon ylitse, vaan käyttäjälle etsitään tiedosta kyseinen kohta paikallisesti.

Osana omistajaa voidaan myös kertoa HTTP-palvelimen käyttämän TCP-portin numero kaksoispisteen (:) jälkeen. Oletuksena porttinumero on 80, mutta se voi olla esimerkiksi 8080, jos samassa tietokoneessa halutaan käyttää useita palvelimia yhtä aikaa.

```
http://www.example.com:8080/
```


Tämä saattaa kuitenkin olla mahdotonta käytettäessä IPv6-osoitteita, jotka on jaettu kaksoispisteillä. Tällöin IP on ympäröitävä hakasulkein.

```
http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7334]:8080/
```


## XML-nimiavaruudet

XML-nimiavaruudet kuvataan URI-tyyppisesti merkkijonolla, joka yksikäsitteisesti määrittelee käytettävän nimiavaruuden. Se on tyypiltään kuten URL:

```
http://omistaja/tunnus
```


Se ei kuitenkaan välttämättä ole käyttökelpoinen WWW-sivuna. (On toki suositeltavaa, että URL:n takaa löytyy jonkinlainen kuvaus käytetystä nimiavaruudesta.) Koska tämä tunnus muistuttaa HTTP-skeeman mukaista URL:ää, mutta ei ole käytettävissä WWW-sivuna, se ei itse asiassa ole määritelmän mukainen URI.

## Standardointi
URI määritellään seuraavissa RFC-dokumenteissa:
*  – URI; alkuperäinen, vanhentunut määrittely
*  – URI; uusin, voimassa oleva määrittely
*  – menettely uuden URI-skeeman rekisteröimiseksi

## Katso myös
* Pysyvä tunniste
* Magnet-linkki

## Lähteet

## Aiheesta muualla

* Uniform Resource Identifier (URI) Schemes 
* URIs, URLs, and URNs: Clarifications and Recommendations 1.0