TOC 
DraftM. Sabadello
 P. Trevithick
 D. Reed
 Parity Communications Inc.
 May 2008


Universal Data Identifiers

Abstract

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.

Note

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

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



Table of Contents

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 

1.  Terminology

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 

2.  Introduction

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 

3.  Context UDIs

Context UDI



 TOC 

3.1.  Definition



 TOC 

3.2.  Types of Context UDIs

A Context UDI can be in one of the following forms:

  1. XRI form
  2. URI form without a fragment

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 

3.3.  Examples

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 UDIDescription
  =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 UDIDescription
  =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 UDIDescription
  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 

4.  Resource UDIs

Resource UDI


 TOC 

4.1.  Definition



 TOC 

4.2.  Types of Resource UDIs

Absolute Resource UDIs can be in one of the following forms:

  1. XRI form
  2. URI form without a fragment
  3. URI form with a fragment

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 

4.3.  Examples

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 UDIDescription
  =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 UDIDescription
  =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 UDIDescription
(*) http://www.acme.com/id/alice This identifies an RDF resource representing Alice.

Resource UDIs: URI Form without a fragment (XRDS URI)

Resource UDIDescription
  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 UDIDescription
(*) http://www.acme.com/about#alice This identifies an RDF resource representing Alice.

Resource UDIs: URI Form with a fragment (XRDS URI)

Resource UDIDescription
(*) 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 

5.  Attribute UDIs

Attribute UDI


 TOC 

5.1.  Definition



 TOC 

5.2.  Types of Attribute UDIs

Attribute UDIs can be in one of the following forms:

  1. XRI form

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 

5.3.  Examples

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 UDIDescription
  @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 UDIDescription
(*) @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 

6.  External ABNF rules

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 

7.  Security Considerations



 TOC 

8.  References



 TOC 

8.1. Normative References

[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 

8.2. Non-Normative References

[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 

Appendix A.  Links

Higgins Project



 TOC 

Authors' Addresses

  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