[[PageOutline]] = GENI API Identifiers = GENI identifies objects (be it a researcher, resource, clearinghouse, or aggregate manager) with a [http://en.wikipedia.org/wiki/Uniform_Resource_Name Uniform Resource Name (URN)]. ''' The format of a GENI URN is: urn:publicid:IDN+++.''' The format is adapted from the [http://www.protogeni.net/trac/protogeni/wiki/URNs ProtoGENI URN format] and the [http://testglobalnoc.grnoc.iu.edu/gmoc/file-bin/urn-proposal3.pdf GMOC GENI URN proposal]. All sections of the URN are mandatory. Note that additional '+' characters are allowed in the section. === Public Identifiers === GENI URNs are in the [http://www.faqs.org/rfcs/rfc3151.html URN namespace for Public Identifiers]. As such, each GENI URN is of the form: urn:publicid:{transcribed-public-identifier}. [http://www.faqs.org/rfcs/rfc3151.html RFC 3151] describes how public identifiers are transcribed to URNs (which involves collapsing whitespace and replacing certain characters with % encoded values). The public identifier section of a GENI URN must begin with "IDN ". When transcribed, this means that all GENI URNs begin with "urn:publicid:IDN+". To transcribe a public ID to a URN use the following rules: || From || Transcribe to || || leading and trailing whitespace || trim || || whitespace || collapse to a single '+' || || '//' || ':' || || '::' || ';' || || '+' || '%2B' || || ":' || '%3A' || || '/' || '%2F' || || ';' || '%3B' || || '!'' || '%27' || || '?' || '%3F' || || '#' || '%23' || || '%' || '%25 || Example translations: || ''Public ID'' || ''GENI URN'' || || IDN plc//princeton authority sa || urn:publicid:IDN+plc:princeton+authority+sa || || IDN gcf//gpo//gpolab user joe || urn:publicid:IDN+gcf:gpo:gpolab+user+joe || || IDN gcf//gpo//gpolab node switch 1 port 2|| urn:publicid:IDN+gcf:gpo:gpolab+node+switch+1+port+2 || === Examples and Usage === An example: urn:publicid:IDN+geni:gpo:gcf+user+joe In the GENI API, URNs are used to name slices (as seen as arguments in GENI API calls), to identify users, and to label resources. URNs are also used in GENI certificates (to bind public keys to identifiers) and in Credentials (to grant permissions to source identifiers on target identifiers). === Authority String === Authorities are resource namespaces. For instance, 'plc' is the overall PlanetLab namespace and 'plc.princeton' and 'plc.bbn' are specific namespaces for the Princeton and BBN PlanetLab sites. The authority string format is 'toplevelauthority:sub_authority1:...:sub_authority_n. Only entities with URNs of type 'authority' are allowed to sign credentials for a namespace (except in the case of delegation). For example, a ProtoGENI Clearinghouse with URN like protogeni.utah.... cannot issue a slice credential giving a user privileges on a PlanetLab slice (with urn plc.princeton....). Only PlanetLab can grant rights over PlanetLab slices. === Type === The string has not yet been completely specified. Existing types in use include user, authority, switch, node, sliver, ticket, and interface. Please try to use the available types unless they simply do not fit for you. In which case, please contact the GPO to inform them of your new type. ''Note: For ProtoGENI compatibility, slice credentials should be signed by an authority with name "sa", e.g., urn:publicid:IDN+gcf:gpo+authority+sa.'' === Name === The string can be any valid string constrained by the URN character set (e.g. no whitespace). {{{ #!comment === Transcribing a Public Identifier for URN formatting === || From || Transcribe to || || leading and trailing whitespace || trim || || whitespace || collapse to a single '+' || || '//' || ':' || || '::' || ';' || || '+' || '%2B' || || ":' || '%3A' || || '/' || '%2F' || || ';' || '%3B' || || '!'' || '%27' || || '?' || '%3F' || || '#' || '%23' || || '%' || '%25 || === FIXME === - pointers to spots in gcf codebase }}}