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


UDI Resolution

Abstract

This document describes conventions on the use of existing standards to resolve UDIs in order to obtain metadata about Contexts, Resources and Attributes in a Global Graph.

Note

This document describes the UDI resolution process. A separate document describes UDI syntax. See Universal Data Identifiers (Sabadello, M., Trevithick, P., and D. Reed, “Universal Data Identifiers,” .) [udi‑syntax] .

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.  UDI XRDS service endpoints
4.  UDI Resolution on Context UDIs
    4.1.  UDI Resolution on Context UDIs in XRI form
    4.2.  UDI Resolution on Context UDIs in URI form without a fragment
    4.3.  Examples
        4.3.1.  Example: The Facebook social network (Context UDI in XRI form)
        4.3.2.  Example: LDAP directory (Context UDI in XRI form)
        4.3.3.  Example: XDI endpoint (Context UDI in XRI form)
        4.3.4.  Example: The Facebook social network (Context UDI in URI form without a fragment)
        4.3.5.  Example: LDAP directory (Context UDI in URI form without a fragment)
5.  UDI Resolution on absolute Resource UDIs
    5.1.  UDI Resolution on absolute Resource UDIs in XRI form
    5.2.  UDI Resolution on absolute Resource UDIs in URI form without a fragment
    5.3.  UDI Resolution on absolute Resource UDIs in URI form with a fragment
    5.4.  Examples
        5.4.1.  Example: The Facebook social network (Resource UDI in XRI form)
        5.4.2.  Example: LDAP directory (Resource UDI in XRI form)
        5.4.3.  Example: The Facebook social network (Resource UDI in URI form with a fragment)
        5.4.4.  Example: LDAP directory (Resource UDI in URI form with a fragment)
        5.4.5.  Example: Semantic Web Linked Data "303" Cool URI (Resource UDI in URI form without a fragment)
        5.4.6.  Example: Semantic Web Linked Data "Hash" Cool URI (Resource UDI in URI form with a fragment)
6.  UDI Resolution on absolute Attribute UDIs
    6.1.  UDI Resolution on absolute Attribute UDIs in XRI form
    6.2.  Examples
        6.2.1.  Example: The Facebook social network (Attribute UDI in XRI form)
        6.2.2.  Example: LDAP directory (Attribute UDI in XRI form)
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

UDI Resolution is defined as the process of obtaining the metadata necessary to completely identify the data object a UDI points to.

UDI Resolution is defined for all forms of Context UDIs, absolute Resource UDIs and absolute Attribute UDIs.

The logical input of UDI Resolution is a UDI without any additional information.

The logical output of UDI Resolution in general is the metadata necessary to completely identify the data object a UDI points to.

The logical output of UDI Resolution on Context UDIs in particular is Context Metadata, which consists of the following:

The logical output of UDI Resolution on absolute Resource UDIs in particular is Resource Metadata, which consists of the following:

The logical output of UDI Resolution on absolute Attribute UDIs in particular is Attribute Metadata, which consists of the following:



 TOC 

3.  UDI XRDS service endpoints

UDI Resolution in some cases makes use of a UDI XRDS service endpoint , which is a convention on the use of Service endpoints (SEPs) in XRDS documents. XRDS documents and service endpoints are fully defined in 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 UDI service endpoint contains all the information that constitutes the logical output of UDI Resolution on Context UDIs.

Example of a UDI service endpoint:

 <Service priority="10" xmlns:udi="http://eclipse.org/udi">

 	<Path select="true">$context$ldap</Path>

 	<Type select="true">$context$ldap</Type>
 	<Type>$context</Type>

 	<udi:Schema>http://www.company.com/schemas/ldap.owl</udi:Schema>

 	<udi:Metadata>

 		<udi:Setting Name="Connection" Type="htf:map">
 			<udi:Setting Name="ConnectionType" Type="xsd:string">LDAP</udi:Setting>
 			<udi:Setting Name="AddressList" Type="htf:list">
 				<udi:Setting Name="Address" Type="xsd:string">ldap://ldap.company.net:389</udi:Setting>
 			</udi:Setting>
 		</udi:Setting>

 	</udi:Metadata>

 </Service>



 TOC 

4.  UDI Resolution on Context UDIs

Context UDI



 TOC 

4.1.  UDI Resolution on Context UDIs in XRI form

UDI Resolution on Context UDIs in XRI form is performed using standard XRI Resolution with the following input parameters:

The result is a UDI service endpoint.

The logical output of UDI Resolution on a Context UDI in XRI form is defined as follows:



 TOC 

4.2.  UDI Resolution on Context UDIs in URI form without a fragment

As described in Universal Data Identifiers (Sabadello, M., Trevithick, P., and D. Reed, “Universal Data Identifiers,” .) [udi‑syntax] , 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] . UDI Resolution on Context UDIs in URI form without a fragment is performed using standard XRDS Discovery and XRDS service endpoint selection with the following input parameter:

The result is a UDI service endpoint.

The logical output of UDI Resolution on a Context UDI in XRI form is defined as follows:



 TOC 

4.3.  Examples



 TOC 

4.3.1.  Example: The Facebook social network (Context UDI in XRI form)

Example

Consider the following Context UDI in XRI form: @eclipse*contexts/$context@facebook . It absolutely identifies the Facebook social network as a whole.

A UDI Resolver performs UDI Resolution on the Context UDI.

The resulting UDI service endpoint looks like this:

 <Service priority="10" xmlns:udi="http://eclipse.org/udi">

 	<Path select="true">$context@facebook</Path>

 	<Type select="true">$context@facebook</Type>
 	<Type>$context</Type>

 	<udi:Schema>http://eclipse.org/schemas/facebook.owl</udi:Schema>

 </Service>

The logical output of UDI Resolution on the Context UDI @eclipse*contexts/$context@facebook is therefore as follows:



 TOC 

4.3.2.  Example: LDAP directory (Context UDI in XRI form)

Example

Consider the following Context UDI in XRI form: @company/$context$ldap . It absolutely identifies an LDAP directory at an example company.

A UDI Resolver performs UDI Resolution on the Context UDI.

The resulting UDI service endpoint looks like this:

 <Service priority="10" xmlns:udi="http://eclipse.org/udi">

 	<Path select="true">$context$ldap</Path>

 	<Type select="true">$context$ldap</Type>
 	<Type>$context</Type>

 	<udi:Schema>http://www.company.com/schemas/ldap.owl</udi:Schema>

 	<udi:Metadata>

 		<udi:Setting Name="Connection" Type="htf:map">
 			<udi:Setting Name="ConnectionType" Type="xsd:string">LDAP</udi:Setting>
 			<udi:Setting Name="AddressList" Type="htf:list">
 				<udi:Setting Name="Address" Type="xsd:string">ldap://ldap.company.net:389</udi:Setting>
 			</udi:Setting>
 		</udi:Setting>

 	</udi:Metadata>

 </Service>

The logical output of UDI Resolution on the Context UDI @company/$context$ldap is therefore as follows:



 TOC 

4.3.3.  Example: XDI endpoint (Context UDI in XRI form)

Example

Consider the following Context UDI in XRI form: @company/$context$xdi . It absolutely identifies an XDI endpoint at an example company.

A UDI Resolver performs UDI Resolution on the Context UDI.

The resulting UDI service endpoint looks like this:

 <Service priority="10" xmlns:udi="http://eclipse.org/udi">

 	<Path select="true">$context$xdi</Path>

 	<Type select="true">$context$xdi</Type>
 	<Type>$context</Type>

 	<URI>http://xdi.company.com/xdi-endpoint</URI>

 </Service>

The logical output of UDI Resolution on the Context UDI @company/$context$xdi is therefore as follows:



 TOC 

4.3.4.  Example: The Facebook social network (Context UDI in URI form without a fragment)

Example

Consider the following Context UDI in URI form without a fragment: http://eclipse.org/contexts/facebook.xrds . It absolutely identifies the Facebook social network as a whole.

A UDI Resolver performs UDI Resolution on the Context UDI.

The resulting UDI service endpoint looks like this:

 <Service priority="10" xmlns:udi="http://eclipse.org/udi">

 	<Path select="true">$context@facebook</Path>

 	<Type select="true">$context@facebook</Type>
 	<Type>$context</Type>

 	<udi:Schema>http://eclipse.org/schemas/facebook.owl</udi:Schema>

 </Service>

The logical output of UDI Resolution on the Context UDI http://eclipse.org/contexts/facebook.xrds is therefore as follows:



 TOC 

4.3.5.  Example: LDAP directory (Context UDI in URI form without a fragment)

Example

Consider the following Context UDI in URI form without a fragment: http://www.company.com/contexts/ldap.xrds . It absolutely identifies an LDAP directory at an example company.

A UDI Resolver performs UDI Resolution on the Context UDI.

The resulting UDI service endpoint looks like this:

 <Service priority="10" xmlns:udi="http://eclipse.org/udi">

 	<Path select="true">$context$ldap</Path>

 	<Type select="true">$context$ldap</Type>
 	<Type>$context</Type>

 	<udi:Schema>http://www.company.com/schemas/ldap.owl</udi:Schema>

 	<udi:Metadata>

 		<udi:Setting Name="Connection" Type="htf:map">
 			<udi:Setting Name="ConnectionType" Type="xsd:string">LDAP</udi:Setting>
 			<udi:Setting Name="AddressList" Type="htf:list">
 				<udi:Setting Name="Address" Type="xsd:string">ldap://ldap.company.net:389</udi:Setting>
 			</udi:Setting>
 		</udi:Setting>

 	</udi:Metadata>

 </Service>

The logical output of UDI Resolution on the Context UDI http://www.company.com/contexts/ldap.xrds is therefore as follows:



 TOC 

5.  UDI Resolution on absolute Resource UDIs

Resource UDI



 TOC 

5.1.  UDI Resolution on absolute Resource UDIs in XRI form

UDI Resolution on absolute Resource UDIs in XRI form is performed by splitting up the XRI at the last double slash (//).

The Context Metadata of the Context the Resource belongs to is obtained by performing standard XRI Resolution on the part of the XRI before the double slash (//) with the following input parameters:

The result is a UDI service endpoint.

The logical output of UDI Resolution on an absolute Resource UDI in XRI form is defined to be as follows:



 TOC 

5.2.  UDI Resolution on absolute Resource UDIs in URI form without a fragment

As described in Universal Data Identifiers (Sabadello, M., Trevithick, P., and D. Reed, “Universal Data Identifiers,” .) [udi‑syntax] , an absolute Resource UDI in URI form without a fragment is considered to be either a Semantic Web Linked Data "303" Cool URI, or an XRDS URI.

UDI Resolution on absolute Resource UDIs in URI form without a fragment is performed by following the processes described in section 4.1 of Cool URIs for the Semantic Web (Sauermann, L. and R. Cyganiak, “Cool URIs for the Semantic Web,” .) [CoolURIs] and 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] . The former process yields an RDF document, the latter an XRDS document.

In order to achieve compatibility with both processes, a UDI Resolver begins by issuing an HTTP GET on the Resource UDI after stripping off the fragment, with an Accept header set to both application/rdf+xml and application/xrds+xml . Depending on the Content-Type header returned by the web server in the HTTP response the UDI Resolver can determine which of the two processes to follow.

The result is either an RDF document or an XRDS document.

If the result is an RDF document, then the logical output of UDI Resolution on an absolute Resource UDI in URI form without a fragment is defined to be as follows:

If the result is an XRDS document, XRDS service endpoint selection is attempted with several sets of input parameters, until a UDI service endpoint is found:

  1. Input parameter set #1:
  2. Input parameter set #2:
  3. Input parameter set #3:
  4. Input parameter set #4:

If a UDI service endpoint is found, then the logical output of UDI Resolution on an absolute Resource UDI in URI form without a fragment is defined to be as follows:



 TOC 

5.3.  UDI Resolution on absolute Resource UDIs in URI form with a fragment

As described in Universal Data Identifiers (Sabadello, M., Trevithick, P., and D. Reed, “Universal Data Identifiers,” .) [udi‑syntax] , an absolute Resource UDI in URI form with a fragment is considered to be either a Semantic Web Linked Data "Hash" Cool URI, or an XRDS URI.

UDI Resolution on absolute Resource UDIs in URI form with a fragment is performed by following the processes described in section 4.2 of Cool URIs for the Semantic Web (Sauermann, L. and R. Cyganiak, “Cool URIs for the Semantic Web,” .) [CoolURIs] and 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] . The former process yields an RDF document, the latter an XRDS document.

In order to achieve compatibility with both processes, a UDI Resolver begins by issuing an HTTP GET on the Resource UDI after stripping off the fragment, with an Accept header set to both application/rdf+xml and application/xrds+xml . Depending on the Content-Type header returned by the web server in the HTTP response the UDI Resolver can determine which of the two processes to follow.

The result is either an RDF document or an XRDS document.

If the result is an RDF document, then the logical output of UDI Resolution on an absolute Resource UDI in URI form with a fragment is defined to be as follows:

If the result is an XRDS document, XRDS service endpoint selection with the following input parameter is attempted:

If a UDI service endpoint is found, then the logical output of UDI Resolution on an absolute Resource UDI in URI form with a fragment is defined to be as follows:



 TOC 

5.4.  Examples



 TOC 

5.4.1.  Example: The Facebook social network (Resource UDI in XRI form)

Example

Consider the following absolute Resource UDI in XRI form: @eclipse*contexts/$context@facebook//2735653823 . It absolutely identifies the user with account ID 2735653823 in the Facebook social network.

A UDI Resolver performs UDI Resolution on the absolute Resource UDI.

The resulting UDI service endpoint looks like this:

 <Service priority="10" xmlns:udi="http://eclipse.org/udi">

 	<Path select="true">$context@facebook</Path>

 	<Type select="true">$context@facebook</Type>
 	<Type>$context</Type>

 	<udi:Schema>http://eclipse.org/schemas/facebook.owl</udi:Schema>

 </Service>

The logical output of UDI Resolution on the absolute Resource UDI @eclipse*contexts/$context@facebook//2735653823 is therefore as follows:



 TOC 

5.4.2.  Example: LDAP directory (Resource UDI in XRI form)

Example

Consider the following absolute Resource UDI in XRI form: @company/$context$ldap//uid%3Dbob,dc%3Dacme,dc%3Dcom . It absolutely identifies the user "Bob" in an LDAP directory at an example company.

A UDI Resolver performs UDI Resolution on the absolute Resource UDI.

The resulting UDI service endpoint looks like this:

 <Service priority="10" xmlns:udi="http://eclipse.org/udi">

 	<Path select="true">$context$ldap</Path>

 	<Type select="true">$context$ldap</Type>
 	<Type>$context</Type>

 	<udi:Schema>http://www.company.com/schemas/ldap.owl</udi:Schema>

 	<udi:Metadata>

 		<udi:Setting Name="Connection" Type="htf:map">
 			<udi:Setting Name="ConnectionType" Type="xsd:string">LDAP</udi:Setting>
 			<udi:Setting Name="AddressList" Type="htf:list">
 				<udi:Setting Name="Address" Type="xsd:string">ldap://ldap.company.net:389</udi:Setting>
 			</udi:Setting>
 		</udi:Setting>

 	</udi:Metadata>

 </Service>

The logical output of UDI Resolution on the absolute Resource UDI @company/$context$ldap//uid%3Dbob,dc%3Dacme,dc%3Dcom is therefore as follows:



 TOC 

5.4.3.  Example: The Facebook social network (Resource UDI in URI form with a fragment)

Example

Consider the following absolute Resource UDI in XRI form: http://eclipse.org/contexts/facebook.xrds#2735653823 . It absolutely identifies the user with account ID 2735653823 in the Facebook social network.

A UDI Resolver performs UDI Resolution on the absolute Resource UDI.

The resulting UDI service endpoint looks like this:

 <Service priority="10" xmlns:udi="http://eclipse.org/udi">

 	<Path select="true">$context@facebook</Path>

 	<Type select="true">$context@facebook</Type>
 	<Type>$context</Type>

 	<udi:Schema>http://eclipse.org/schemas/facebook.owl</udi:Schema>

 </Service>

The logical output of UDI Resolution on the absolute Resource UDI http://eclipse.org/contexts/facebook.xrds#2735653823 is therefore as follows:



 TOC 

5.4.4.  Example: LDAP directory (Resource UDI in URI form with a fragment)

Example

Consider the following absolute Resource UDI in URI form with a fragment: http://www.company.com/contexts/ldap.xrds#uid=bob,dc=acme,dc=com . It absolutely identifies the user "Bob" in an LDAP directory at an example company.

A UDI Resolver performs UDI Resolution on the absolute Resource UDI.

The resulting UDI service endpoint looks like this:

 <Service priority="10" xmlns:udi="http://eclipse.org/udi">

 	<Path select="true">$context$ldap</Path>

 	<Type select="true">$context$ldap</Type>
 	<Type>$context</Type>

 	<udi:Schema>http://www.company.com/schemas/ldap.owl</udi:Schema>

 	<udi:Metadata>

 		<udi:Setting Name="Connection" Type="htf:map">
 			<udi:Setting Name="ConnectionType" Type="xsd:string">LDAP</udi:Setting>
 			<udi:Setting Name="AddressList" Type="htf:list">
 				<udi:Setting Name="Address" Type="xsd:string">ldap://ldap.company.net:389</udi:Setting>
 			</udi:Setting>
 		</udi:Setting>

 	</udi:Metadata>

 </Service>

The logical output of UDI Resolution on the absolute Resource UDI http://www.company.com/contexts/ldap.xrds#uid=bob,dc=acme,dc=com is therefore as follows:



 TOC 

5.4.5.  Example: Semantic Web Linked Data "303" Cool URI (Resource UDI in URI form without a fragment)

Example

Consider the following absolute Resource UDI in URI form with a fragment: http://www.acme.com/id/alice . It absolutely identifies a resource in an RDF document at an example company. Note: This example is taken from section 4.1 of Cool URIs for the Semantic Web (Sauermann, L. and R. Cyganiak, “Cool URIs for the Semantic Web,” .) [CoolURIs] .

A UDI Resolver performs UDI Resolution on the absolute Resource UDI.

The web server issues a 303 Redirect HTTP response to the following URI:

 http://www.acme.com/data/alice

The logical output of UDI Resolution on the absolute Resource UDI http://www.acme.com/id/alice is therefore as follows:



 TOC 

5.4.6.  Example: Semantic Web Linked Data "Hash" Cool URI (Resource UDI in URI form with a fragment)

Example

Consider the following absolute Resource UDI in URI form with a fragment: http://www.acme.com/about#alice . It absolutely identifies a resource in an RDF document at an example company. Note: This example is taken from section 4.2 of Cool URIs for the Semantic Web (Sauermann, L. and R. Cyganiak, “Cool URIs for the Semantic Web,” .) [CoolURIs] .

A UDI Resolver performs UDI Resolution on the absolute Resource UDI.

The logical output of UDI Resolution on the absolute Resource UDI http://www.acme.com/about#alice is therefore as follows:



 TOC 

6.  UDI Resolution on absolute Attribute UDIs

Attribute UDI



 TOC 

6.1.  UDI Resolution on absolute Attribute UDIs in XRI form

UDI Resolution on absolute Attribute UDIs in XRI form is performed by splitting up the XRI at the last single slash (/).

The logical output of UDI Resolution on an absolute Attribute UDI in XRI form is defined to be as follows:



 TOC 

6.2.  Examples



 TOC 

6.2.1.  Example: The Facebook social network (Attribute UDI in XRI form)

Example

Consider the following absolute Attribute UDI in XRI form: @eclipse*contexts/$context@facebook//2735653823/email . It absolutely identifies the "email" attribute of the user with account ID 2735653823 in the Facebook social network.

A UDI Resolver performs UDI Resolution on the absolute Attribute UDI.

The logical output of UDI Resolution on the absolute Attribute UDI @eclipse*contexts/$context@facebook//2735653823/email is therefore as follows:



 TOC 

6.2.2.  Example: LDAP directory (Attribute UDI in XRI form)

Example

Consider the following absolute Attribute UDI in XRI form: @company/$context$ldap//uid%3Dbob,dc%3Dacme,dc%3Dcom/givenName . It absolutely identifies the "givenName" attribute of the user "Bob" in an LDAP directory at an example company.

A UDI Resolver performs UDI Resolution on the absolute Attribute UDI.

The logical output of UDI Resolution on the absolute Attribute UDI @company/$context$ldap//uid%3Dbob,dc%3Dacme,dc%3Dcom/givenName is therefore as follows:



 TOC 

7.  Security Considerations

It is important to note that XRDS documents are public. Therefore the service endpoints described in this document should contain only non-critical information to identify a Context. In many cases additional information such as credentials is needed to open a Context.

These authentication materials must be provided by the user or a client application in a way that is outside the scope of this document.



 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).
[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

[udi-syntax] Sabadello, M., Trevithick, P., and D. Reed, “Universal Data Identifiers.”


 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