(Logo Tech-invite)  

a Portal devoted to SIP and Security technologies

  (World Map)    
    Search Home Site Map Contact
 SIP/IMS Standardization
> IETF Standardization Process
> RFCs related to SIP (4 p.) o
> SIP-SIPPING-SIMPLE... I-Ds (22 p.) o
> Audio-Video Transport RFCs (2 p.)
> 3GPP Specifications (12 p.)
> OMA Specifications related to SIP
> TISPAN NGN Specifications (3 p.) o
> SIP Topics
> IMS Topics
 SIP/IMS Call Flows
> RFC3261's Example
> Basic -- RFC3665
> SIP PSTN -- RFC3666 (3 p.)
> SIP Service Examples (20 p.)
> IMS Signaling Flows (35 p.)
 SIP/IMS Architecture
> SIP Protocol Structure
> Dialogs & Routing
> UMTS Network Evolution
 Security
> PKIX-TLS-SMIME... Standards (20 p.) o
> Cryptography Basics
> ASN.1 for PKI Certificate & CRL Profile
> ASN.1 for CMS
> RFC3280's Certificate Examples (4)
> RFC4134's CMS-S/MIME Examples (14)
> RFC4474's SIP Authentication Service
> SSL/TLS Time-Diagrams
> IPSec Guides
 ABNF Grammars
> ABNF Notation & Rules
> URI Generic Syntax
> ABNF for SIP
> SIP Messages & URIs
> SIP Header Fields
> MIME Media Types
> ABNF for SDP
> ABNF for MSRP
> ABNF for MRCPv2
> ABNF for RTSP 2.0
> Internet Message Format
 DiffServ CoS Simulation
> IPVCoSS Simulator
> IP-VPN Case Study
  o (daily updated)

ABNF for URI Generic Syntax -- RFC 3986

A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. The URI generic syntax, as defined in RFC3986, is a superset of the syntax of all URI schemes. A parser of the generic URI syntax can parse any URI reference into its five major components. Once the scheme is determined, further scheme-specific parsing can be performed on the components.

(scheme) (column) (double-slash) (authority) (path) (question-mark) (query) (number-sign) (fragment)  
Top URI Reference Scheme Authority Path Query Fragment Characters

URI Reference

A URI-reference is either a URI or a relative reference. If the URI-reference's prefix does not match the syntax of a scheme followed by its colon separator, then the URI-reference is a relative reference.
URI-reference= URI   /   relative-ref
 
URI= scheme   ":" hier-part [ "?"   query ] [ "#"   fragment ]
 
absolute-URI= scheme   ":" hier-part [ "?"   query ]
 
relative-ref= relative-part [ "?"   query ] [ "#"   fragment ]
 
hier-part=     "//"   authority   path-abempty
/   path-absolute
/   path-rootless
/   path-empty
 
relative-part=     "//"   authority   path-abempty
/   path-absolute
/   path-noscheme
/   path-empty
 
Top URI Reference Scheme Authority Path Query Fragment Characters

Scheme

Each URI begins with a scheme name that refers to a specification for assigning identifiers within that scheme. The process for registration of new URI schemes is defined by RFC 4395.

The scheme registry (http://www.iana.org/assignments/uri-schemes.html) maintains the mapping between scheme names and their specifications.
scheme= ALPHA   *( ALPHA   /   DIGIT   /   "+"   /   "-"   /   "." )
 
Examples: "sip", "sips", "tel", "http", https", "mailto", "pres", "ftp", "file", "rtsp", "msrp"
Top URI Reference Scheme Authority Path Query Fragment Characters

Authority

userinfohostport #
The authority component is preceded by a double slash ("//") and is terminated by the next slash ("/"), question mark ("?"), or number sign ("#") character, or by the end of the URI.
authority= [ userinfo "@" ]   host   [ ":"   port ]
 
  (userinfo) (at-sign) (host) (column2) (port)  
userinfo   Up
userinfo= *( unreserved   /   pct-encoded   /   sub-delims   /   ":" )
 
host   Up
host= IP-literal   /   IPv4address   /   reg-name
 
IP-literal= "["   ( IPv6address   /   IPvFuture )   "]"
 
IPvFuture= "v"   1*HEXDIG   "."   1*( unreserved   /   sub-delims   /   ":" )
 
IPv6address= 6( h16   ":" ) ls32
/ "::" 5( h16   ":" ) ls32
/ [ h16 ] "::" 4( h16   ":" ) ls32
/ [ *1( h16   ":" ) h16 ] "::" 3( h16   ":" ) ls32
/ [ *2( h16   ":" ) h16 ] "::" 2( h16   ":" ) ls32
/ [ *3( h16   ":" ) h16 ] "::" h16   ":" ls32
/ [ *4( h16   ":" ) h16 ] "::" ls32
/ [ *5( h16   ":" ) h16 ] "::" h16
/ [ *6( h16   ":" ) h16 ] "::"
 
h16= 1*4HEXDIG
ls32= ( h16   ":"   h16 )   /   IPv4address
 
IPv4address= dec-octet   "."   dec-octet   "."   dec-octet   "."   dec-octet
 
dec-octet=     DIGIT; 0-9
/   %x31-39   DIGIT; 10-99
/   "1"   2DIGIT ; 100-199
/   "2"   %x30-34   DIGIT ; 200-249
/   "25"   %x30-35 ; 250-255
 
reg-name= *( unreserved   /   pct-encoded   /   sub-delims )
 
port   Up
port= *DIGIT
 
Top URI Reference Scheme Authority Path Query Fragment Characters

Path

The path component contains data, usually organized in hierarchical form, that, along with data in the non-hierarchical query component, serves to identify a resource within the scope of the URI's scheme and naming authority (if any). The path is terminated by the first question mark ("?") or number sign ("#") character, or by the end of the URI.
path=     path-abempty ; begins with "/" or is empty
/   path-absolute ; begins with "/" but not "//"
/   path-noscheme ; begins with a non-colon segment
/   path-rootless ; begins with a segment
/   path-empty ; zero characters
 
path-abempty= *( "/"   segment )
path-absolute= "/"   [   segment-nz   *( "/"   segment )   ]
path-noscheme= segment-nz-nc   *( "/"   segment )
path-rootless= segment-nz   *( "/"   segment )
path-empty= 0<pchar>
 
segment= *pchar
segment-nz= 1*pchar
segment-nz-nc= 1*( unreserved   /   pct-encoded   /   sub-delims   /   "@" )  
; non-zero-length segment without any colon ":"

 
pchar= unreserved   /   pct-encoded   /   sub-delims   /   ":"   /   "@"
Top URI Reference Scheme Authority Path Query Fragment Characters

Query

The query component contains non-hierarchical data that, along with data in the path component, serves to identify a resource within the scope of the URI's scheme and naming authority (if any). The query component is indicated by the first question mark ("?") character and terminated by a number sign ("#") character or by the end of the URI.
query= *( pchar   /   "/"   /   "?" )
Top URI Reference Scheme Authority Path Query Fragment Characters

Fragment

The fragment identifier component of a URI allows indirect identification of a secondary resource by reference to a primary resource and additional identifying information. The identified secondary resource may be some portion or subset of the primary resource, some view on representations of the primary resource, or some other resource defined or described by those representations. A fragment identifier component is indicated by the presence of a number sign ("#") character and terminated by the end of the URI.
fragment= *( pchar   /   "/"   /   "?" )
 
Top URI Reference Scheme Authority Path Query Fragment Characters

Characters

A percent-encoding mechanism is used to represent a data octet in a component when that octet's corresponding character is outside the allowed set or is being used as a delimiter of, or within, the component.
pct-encoded= "%"   HEXDIG   HEXDIG
 
Characters that are allowed in a URI but do not have a reserved purpose are called unreserved. These include uppercase and lowercase letters, decimal digits, hyphen, period, underscore, and tilde.
unreserved= ALPHA   /   DIGIT   /   "-"   /   "."   /   "_"   /   "~"
 
URIs include components and subcomponents that are delimited by characters in the "reserved" set. These characters are called "reserved" because they may (or may not) be defined as delimiters by the generic syntax, by each scheme-specific syntax, or by the implementation-specific syntax of a URI's dereferencing algorithm. If data for a URI component would conflict with a reserved character's purpose as a delimiter, then the conflicting data must be percent-encoded before the URI is formed.
reserved= gen-delims   /   sub-delims
 
gen-delims= ":"   /   "/"   /   "?"   /   "#"   /   "["   /   "]"   /   "@"
 
sub-delims= "!"   /   "$"   /   "&"   /   "'"   /   "("   /   ")"   /   "*"   /   "+"   /   ","   /   ";"   /   "="
  
Last update: January 16, 2008 
  
(to top) © 2005-2008 Joël Repiquet, All Rights Reserved.