# 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 RFC 3986:n mukaan seuraava:

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

```

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

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

```

```

**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:

```

```

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ä (=).

```

```

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.

```

```

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.

```

```

## XML-nimiavaruudet

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

```

```

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:

* RFC 2396 – URI; alkuperäinen, vanhentunut määrittely
* RFC 3986 – URI; uusin, voimassa oleva määrittely
* RFC 7595 – menettely uuden URI-skeeman rekisteröimiseksi

## Katso myös

* Pysyvä tunniste
* Magnet-linkki

## Lähteet

## Aiheesta muualla

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