| TOC |
|
This document describes Universal Data Identifiers, which are in essence a set of conventions on the use of existing standards to reference data objects across a range of heterogeneous data sources and using an extensible set of network protocols. These data sources, called Contexts, and their contents, called Resources and their associated Attributes can be globally resolvable thus enabling objects to be interconnected to form a Global Graph.
This document describes the syntax of UDIs. A separate document describes the URI resolution process. See UDI Resolution (Sabadello, M., Trevithick, P., and D. Reed, “UDI Resolution,” .) [udi‑resolution] .
Copyright (c) 2008 Parity Communications, Inc. All rights reserved. This document is made available under the terms of the Eclipse Public License v1.0 as well as under the terms of the GNU General Public License v2.0. These licenses are available at: http://www.eclipse.org/legal/epl-v10.html, http://www.gnu.org/licenses/gpl-2.0.html
1.
Terminology
2.
Introduction
3.
Context UDIs
3.1.
Definition
3.2.
Types of Context UDIs
3.3.
Examples
4.
Resource UDIs
4.1.
Definition
4.2.
Types of Resource UDIs
4.3.
Examples
5.
Attribute UDIs
5.1.
Definition
5.2.
Types of Attribute UDIs
5.3.
Examples
6.
External ABNF rules
7.
Security Considerations
8.
References
8.1.
Normative References
8.2.
Non-Normative References
Appendix A.
Links
§
Authors' Addresses
| TOC |
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 (Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” March 1997.) [RFC2119] .
| TOC |
Universal Data Identifiers (UDIs) are pointers designed to address any data object available on the Internet from a range of heterogeneous data sources. These data objects as well as connections between them constitute a Global Graph.
UDIs include Context UDIs, Resource UDIs and Attribute UDIs.
A Context UDI is an absolute identifier that points to a Context in a Global Graph. A Context is a set of Resources. A Context could be an LDAP directory, a relational database, an RDF document, the Facebook social network, an XDI endpoint, etc.
A Resource UDI is an absolute or relative identifier that points to a Resource in a Context in a Global Graph. Resources can have Attributes.
An Attribute UDI is an absolute or relative identifier that points to an Attribute of a Resource in a Context in a Global Graph.
In order to obtain the information needed to fully identify a Context, a Resource or an Attribute a UDI points to, UDI Resolution is performed.
For more information on how to perform resolution on a UDI, see UDI Resolution (Sabadello, M., Trevithick, P., and D. Reed, “UDI Resolution,” .) [udi‑resolution] .
| TOC |

| TOC |
| TOC |
A Context UDI can be in one of the following forms:
A Context UDI in XRI form can be any XRI that can be resolved with XRI Resolution 2.0 (Wachob, G., Reed, D., Chasen, L., Tan, W., and S. Churchill, “Extensible Resource Identifier (XRI) Resolution Version 2.0,” .) [xri‑resolution‑V2.0‑cd‑03] .
A Context UDI in XRI form must conform to the following ABNF:
context-udi-xri = context-udi-qxri / context-udi-hxri context-udi-qxri = ( [ "xri://" ] context-udi-qxri2 ) / ( [ "xri:" ] context-udi-qxri3 ) context-udi-qxri2 = xri2-authority [ "/($context)" *xri2-subseg ] context-udi-qxri3 = xri3-authority [ "/$context" *xri3-subseg ] context-udi-hxri = hxri-proxy "/" (context-udi-qxri2 / context-udi-qxri3 ) hxri-proxy = ( "http://" / "https://" ) hxri-proxy-reg-name hxri-proxy-reg-name = "xri." ireg-name
A Context UDI in URI form without a fragment is considered to be an XRDS URI, as defined in section 6 of XRI Resolution 2.0 (Wachob, G., Reed, D., Chasen, L., Tan, W., and S. Churchill, “Extensible Resource Identifier (XRI) Resolution Version 2.0,” .) [xri‑resolution‑V2.0‑cd‑03] .
A Context UDI in URI form without a fragment must conform to the following ABNF:
context-udi-uri = context-udi-uri-file / context-udi-uri-http context-udi-uri-file = [ "file://" ] ipath-abempty descriptor-ext context-udi-uri-http = ( "http://" / "https://" ) iauthority ipath-abempty [ descriptor-ext ] [ "?" iquery ] descriptor-ext = ".xrds" / ".xdi"
| TOC |
Note: Examples marked with (*) are described in greater detail in UDI Resolution (Sabadello, M., Trevithick, P., and D. Reed, “UDI Resolution,” .) [udi‑resolution] .
Context UDIs: XRI form (XRI Syntax 2.0)
| Context UDI | Description | |
|---|---|---|
| =alice/($context) | This identifies Alice's default Context. | |
| =alice/($context)*($openid) | This identifies Alice's OpenID Context. | |
| =alice/($context)*($ldap) | This identifies Alice's LDAP Context (i.e. Alice is running her own LDAP directory). | |
| =!F83.62B1.44F.2813/($context) | This identifies Alice's default Context. Instead of a reassignable i-name a persistent i-number is used. | |
| =!F83.62B1.44F.2813/($context)*($openid) | This identifies Alice's OpenID Context. Instead of a reassignable i-name a persistent i-number is used. | |
| =!F83.62B1.44F.2813/($context)*($ldap) | This identifies Alice's LDAP Context (i.e. Alice is running her own LDAP directory). Instead of a reassignable i-name a persistent i-number is used. | |
| @company/($context) | This identifies a company's default Context. | |
| @company/($context)*($ldap) | This identifies a company's LDAP Context. | |
| @company/($context)*($xdi) | This identifies a company's XDI Context, i.e. the company has set up their own XDI endpoint for sharing data. | |
| @eclipse*contexts/($context)*(@facebook) | This identifies the Facebook social network as a whole. |
Context UDIs: XRI form (XRI Syntax 3.0)
| Context UDI | Description | |
|---|---|---|
| =alice/$context | This identifies Alice's default Context. | |
| =alice/$context$openid | This identifies Alice's OpenID Context. | |
| =alice/$context$ldap | This identifies Alice's LDAP Context (i.e. Alice is running her own LDAP directory). | |
| =!F83.62B1.44F.2813/$context | This identifies Alice's default Context. Instead of a reassignable i-name a persistent i-number is used. | |
| =!F83.62B1.44F.2813/$context$openid | This identifies Alice's OpenID Context. Instead of a reassignable i-name a persistent i-number is used. | |
| =!F83.62B1.44F.2813/$context$ldap | This identifies Alice's LDAP Context (i.e. Alice is running her own LDAP directory). Instead of a reassignable i-name a persistent i-number is used. | |
| @company/$context | This identifies a company's default Context. | |
| (*) | @company/$context$ldap | This identifies a company's LDAP Context. |
| (*) | @company/$context$xdi | This identifies a company's XDI Context, i.e. the company has set up their own XDI endpoint for sharing data. |
| (*) | @eclipse*contexts/$context@facebook | This identifies the Facebook social network as a whole. |
Context UDIs: URI form without a fragment
| Context UDI | Description | |
|---|---|---|
| file://system/config/ldap.xrds | This identifies an LDAP Context described by a local file. | |
| (*) | http://www.company.com/contexts/ldap.xrds | This identifies a company's LDAP Context. |
| (*) | http://eclipse.org/contexts/facebook.xrds | This identifies the Facebook social network as a whole. |
| TOC |

| TOC |
| TOC |
Absolute Resource UDIs can be in one of the following forms:
An absolute Resource UDI in XRI form includes within itself a Context UDI in XRI form, which points to the Context the Resource belongs to. It must include a double-slash (//), which separates the Context UDI from the relative Resource UDI.
An absolute Resource UDI in XRI form must conform to the following ABNF:
resource-udi-xri = resource-udi-xri2 / resource-udi-xri3 resource-udi-xri2 = context-udi-xri2 "//" xri2-segment resource-udi-xri3 = context-udi-xri3 "//" xri3-segment
An absolute Resource UDI in URI form without a fragment is considered to be either a Semantic Web Linked Data "303" Cool URI, as described in section 4.1 of Cool URIs for the Semantic Web (Sauermann, L. and R. Cyganiak, “Cool URIs for the Semantic Web,” .) [CoolURIs] , or an XRDS URI, as described in section 6 of XRI Resolution 2.0 (Wachob, G., Reed, D., Chasen, L., Tan, W., and S. Churchill, “Extensible Resource Identifier (XRI) Resolution Version 2.0,” .) [xri‑resolution‑V2.0‑cd‑03] .
An absolute Resource UDI in URI form without a fragment must conform to the following ABNF:
resource-udi-uri-without-fragment = [ scheme ] iauthority ipath-abempty [ "?" iquery ]
An absolute Resource UDI in URI form with a fragment is considered to be either a Semantic Web Linked Data "Hash" Cool URI, as described in section 4.2 of Cool URIs for the Semantic Web (Sauermann, L. and R. Cyganiak, “Cool URIs for the Semantic Web,” .) [CoolURIs] , or an XRDS URI, as described in section 6 of XRI Resolution 2.0 (Wachob, G., Reed, D., Chasen, L., Tan, W., and S. Churchill, “Extensible Resource Identifier (XRI) Resolution Version 2.0,” .) [xri‑resolution‑V2.0‑cd‑03] .
An absolute Resource UDI in URI form with a fragment must conform to the following ABNF:
resource-udi-uri-with-fragment = [ scheme ] iauthority ipath-abempty [ "?" iquery ] "#" ifragment
| TOC |
Note: Examples marked with (*) are described in greater detail in UDI Resolution (Sabadello, M., Trevithick, P., and D. Reed, “UDI Resolution,” .) [udi‑resolution] .
Resource UDIs: XRI form (XRI Syntax 2.0)
| Resource UDI | Description | |
|---|---|---|
| =alice/($context)*($ldap)//uid%3Dalice | This identifies Alice in her own LDAP directory. | |
| @company/($context)*($ldap)//uid%3Dbob,dc%3Dacme,dc%3Dcom | This identifies Bob in a company's LDAP directory. | |
| =!F83.62B1.44F.2813/($context)*($ldap)//uid%3Dalice | This identifies Alice in her own LDAP directory. Instead of a reassignable i-name a persistent i-number is used. | |
| @!7E8.127B.2EBA.1190/($context)*($ldap)//uid%3Dbob,dc%3Dacme,dc%3Dcom | This identifies Bob in a company's LDAP directory. Instead of a reassignable i-name a persistent i-number is used. | |
| @eclipse*contexts/($context)*(@facebook)//2735653823 | This identifies a user with account number 2735653823 in the Facebook social network. |
Resource UDIs: XRI form (XRI Syntax 3.0)
| Resource UDI | Description | |
|---|---|---|
| =alice/$context$ldap//uid%3Dalice | This identifies Alice in her own LDAP directory. | |
| (*) | @company/$context$ldap//uid%3Dbob,dc%3Dacme,dc%3Dcom | This identifies Bob in a company's LDAP directory. |
| =!F83.62B1.44F.2813/$context$ldap//uid%3Dalice | This identifies Alice in her own LDAP directory. Instead of a reassignable i-name a persistent i-number is used. | |
| @!7E8.127B.2EBA.1190/$context$ldap//uid%3Dbob,dc%3Dacme,dc%3Dcom | This identifies Bob in a company's LDAP directory. Instead of a reassignable i-name a persistent i-number is used. | |
| (*) | @eclipse*contexts/$context@facebook//2735653823 | This identifies a user with account number 2735653823 in the Facebook social network. |
Resource UDIs: URI Form without a fragment (Semantic Web Linked Data "303" Cool URI)
| Resource UDI | Description | |
|---|---|---|
| (*) | http://www.acme.com/id/alice | This identifies an RDF resource representing Alice. |
Resource UDIs: URI Form without a fragment (XRDS URI)
| Resource UDI | Description | |
|---|---|---|
| http://alice.myopenid.com | This identifies Alice in her own OpenID context. |
Resource UDIs: URI Form with a fragment (Semantic Web Linked Data "Hash" Cool URI)
| Resource UDI | Description | |
|---|---|---|
| (*) | http://www.acme.com/about#alice | This identifies an RDF resource representing Alice. |
Resource UDIs: URI Form with a fragment (XRDS URI)
| Resource UDI | Description | |
|---|---|---|
| (*) | http://www.company.com/contexts/ldap.xrds#uid=bob,dc=acme,dc=com | This identifies Bob in a company's LDAP directory. |
| (*) | http://eclipse.org/contexts/facebook.xrds#2735653823 | This identifies a user with account number 2735653823 in the Facebook social network. |
| file://system/config/ldap.xrds#uid=alice,dc=acme,dc=com | This identifies Alice in an LDAP directory described by a local file. |
| TOC |

| TOC |
| TOC |
Attribute UDIs can be in one of the following forms:
An absolute Attribute UDI in XRI form includes within itself a Resource UDI in XRI form, which points to the Resource the Attribute belongs to. The absolute Attribute UDI in XRI form must include a double slash (//), which separates the Context UDI from the relative Resource UDI, as well as a single slash (/), which separates the relative Resource UDI from the relative Attribute UDI.
An absolute Attribute UDI in XRI form must conform to the following ABNF:
attribute-udi-xri = attribute-udi-xri2 / attribute-udi-xri3 attribute-udi-xri2 = resource-udi-xri2 "/" xri2-segment attribute-udi-xri3 = resource-udi-xri3 "/" xri3-segment
| TOC |
Note: Examples marked with (*) are described in greater detail in UDI Resolution (Sabadello, M., Trevithick, P., and D. Reed, “UDI Resolution,” .) [udi‑resolution] .
Attribute UDIs: XRI form (XRI Syntax 2.0)
| Attribute UDI | Description | |
|---|---|---|
| @company/($context)*($ldap)//uid%3Dbob,dc%3Dacme,dc%3Dcom/givenName | This identifies Bob's givenName attribute in a company's LDAP directory. | |
| @eclipse*contexts/($context)*(@facebook)//2735653823/email | This identifies the email attribute of a user with account number 2735653823 in the Facebook social network. | |
| =alice/($context)*($rdf)//(http://www.acme.com/about#alice)/(http://xmlns.com/foaf/0.1/knows) | This identifies Alice's foaf:knows attribute in her own RDF context. |
Attribute UDIs: XRI form (XRI Syntax 3.0)
| Attribute UDI | Description | |
|---|---|---|
| (*) | @company/$context$ldap//uid%3Dbob,dc%3Dacme,dc%3Dcom)/givenName | This identifies Bob's givenName attribute in a company's LDAP directory. |
| (*) | @eclipse*contexts/$context@facebook//2735653823/email | This identifies the email attribute of a user with account number 2735653823 in the Facebook social network. |
| =alice/$context$rdf//(http://www.acme.com/about#alice)/(http://xmlns.com/foaf/0.1/knows) | This identifies Alice's foaf:knows attribute in her own RDF context. |
| TOC |
All ABNF rules not defined in this document are defined in the ABNF for XRI Syntax 2.0 (Reed, D., “ABNF for XRI Syntax 2.0,” .) [Xri2dot0Abnf] (which includes the IRI ABNF from RFC 3987 (Duerst, M. and M. Suignard, “Internationalized Resource Identifiers (IRIs),” January 2005.) [RFC3987] ) except:
| TOC |
| TOC |
| TOC |
| [CoolURIs] | Sauermann, L. and R. Cyganiak, “Cool URIs for the Semantic Web.” |
| [RFC2119] | Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” BCP 14, RFC 2119, March 1997 (TXT, HTML, XML). |
| [RFC3987] | Duerst, M. and M. Suignard, “Internationalized Resource Identifiers (IRIs),” RFC 3987, January 2005 (TXT). |
| [xri-resolution-V2.0-cd-03] | Wachob, G., Reed, D., Chasen, L., Tan, W., and S. Churchill, “Extensible Resource Identifier (XRI) Resolution Version 2.0.” |
| TOC |
| [Xri2dot0Abnf] | Reed, D., “ABNF for XRI Syntax 2.0.” |
| [XriThreeSyntaxAbnf] | Reed, D., “Proposed ABNF for XRI Syntax 3.0.” |
| [udi-resolution] | Sabadello, M., Trevithick, P., and D. Reed, “UDI Resolution.” |
| TOC |
| TOC |
| Markus Sabadello | |
| Parity Communications Inc. | |
| Email: | msabadello@parity.com |
| Paul Trevithick | |
| Parity Communications Inc. | |
| Email: | paul@parity.com |
| Drummond Reed | |
| Parity Communications Inc. | |
| Email: | drummond.reed@parity.com |