Resource - Uniform resource identifier (URI)


A Uniform Resource Identifier (URI) is a string of characters that Identify a resource.

Because a resource can be created dynamically, an URI is also a request.


Type (URI, URL and URN)

URIs can be of the type:

  • names
  • locators
  • or both.
Type Description Goal Example
Names Uniform resource name (URN) To defines an item's identity A person's name
Locators Uniform resource locator (URL) To provide a method for finding an item person's street address



See Web - URL


The ISBN system for uniquely identifying books provides a typical example of the use of URNs. ISBN 0486275574 (urn:isbn:0-486-27557-4) cites, unambiguously, a specific edition of Shakespeare's play Romeo and Juliet.

To get this book, a location is needed: a URL address. A typical URL for this book on a Unix-like operating system would be a file path such as file:///home/username/RomeoAndJuliet.pdf, identifying the electronic book saved in a file on a local hard disk.




An opaque URI is an absolute URI whose scheme-specific part does not begin with a slash character ('/').

Opaque URIs are not subject to further parsing. Some examples of opaque URIs are:


A hierarchical URI is subject to further parsing according to the syntax

URI = scheme ":" (/|//) [authority] path [ "?" query ] [ "#" fragment ]


  • the characters ,, /,?, and # stand for themselves.
  • the scheme is required
  • the path is required but may be empty
  • /|// means that when authority is:
    • present, the path must either be empty or begin with a slash (/) character.
    • not present, the path cannot begin with two slash characters (//).



A URI is absolute if, and only if, it has a scheme component.

Absolute URI = URI without fragment identifier

An absolute hierarchical URI reference follows the pattern: ://?#

absolute-URI  = scheme ":" hier-part [ "?" query ]

More see Absolute URI


A URI that is not absolute is said to be relative

Relative URI references (which are always hierarchical) follow one of two patterns: ?# or //?#


An opaque URI follows this pattern: :#


Components of a parsed URL, which is the result of processing a URL through the URL parser





A query string is the part of a URI that defines key/value data.

See URL - Query String


Interpretation and Access

Interpretation is independent of access. “http://localhost/” has the same interpretation for every user of that reference, even though the network interface corresponding to “localhost” may be different for each end-user:

However, an action made on the basis of that reference will take place in relation to the end-user's context.

Global vs user context

An action intended to refer to a globally unique thing must use a URI that distinguishes that resource from all other things. URIs that identify in relation to the end-user's local context should only be used when the context itself is a defining aspect of the resource, such as when an on-line help manual refers to a file on the end-user's file system (e.g., "file:///etc/hosts").



Because an URL uses characters to delimit its component such as the /, ?, #, if you want to use this character in a URL as value, you need to encode them.

See What is URL encoding ? known also as Percent-encoding



You can create templates of URI and expand them to create URI with variables.

Documentation / Reference

Powered by ComboStrap