Skip to main content

Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "IdAS XDI Mapping"

Line 2: Line 2:
 
This page documents the mapping between the [[Higgins Data Model]] (which is implemented by [[IdAS]]) and XDI. XDI ("XRI Data Interchange") is a data model and protocol for sharing, linking, and synchronizing data over the Internet ("structured web") and other networks using Extensible Resource Identifiers (XRIs). It is being developed by the [http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=xdi OASIS XDI Technical Committee].
 
This page documents the mapping between the [[Higgins Data Model]] (which is implemented by [[IdAS]]) and XDI. XDI ("XRI Data Interchange") is a data model and protocol for sharing, linking, and synchronizing data over the Internet ("structured web") and other networks using Extensible Resource Identifiers (XRIs). It is being developed by the [http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=xdi OASIS XDI Technical Committee].
  
This page consists of two parts: A list of theoretical mappings between Higgins Data Model concepts and XDI concepts, and a list of mappings between concrete IdAS operations and concrete XDI operations.
+
The [[IdAS XDI Engine]] exposes an IdAS Context by receiving XDI messages.
  
The [[IdAS XDI Engine]] maps the Higgins Data Model to XDI and maps XDI operations to IdAS operations.
+
The [[XDI Context Provider]] implements an IdAS Context by sending XDI messages. These message can be sent either to an XDI endpoint exposed by the [[IdAS XDI Engine]] or to a native XDI endpoint.
 
+
The [[XDI Context Provider]] maps XDI to the Higgins Data Model and maps IdAS operations to XDI operations.
+
  
 
== Mapping the Higgins Data Model to XDI ==
 
== Mapping the Higgins Data Model to XDI ==
Line 15: Line 13:
 
* An [[Entity]] maps to an XDI subject
 
* An [[Entity]] maps to an XDI subject
 
* An [[Attribute]] maps to an XDI predicate
 
* An [[Attribute]] maps to an XDI predicate
* A Simple Value of a single-valued [[Attribute]] maps to an XDI literal
+
* A Simple Value of an [[Attribute]] maps to an XDI inner graph with multiple XDI literals
* A Simple Value of a multi-valued [[Attribute]] maps to an XDI inner graph with multiple XDI literals
+
 
* A Complex Value maps to an XDI reference
 
* A Complex Value maps to an XDI reference
 
* A Higgins [[Relation]] maps to an XDI predicate
 
* A Higgins [[Relation]] maps to an XDI predicate
Line 27: Line 24:
 
This formula can be used to calculate a HIN:
 
This formula can be used to calculate a HIN:
  
hin = '$' + '!' + sha1(value)
+
HIN = '$' + '!' + sha1(value)
  
 
Examples:
 
Examples:
Line 78: Line 75:
 
<pre>
 
<pre>
 
=markus <-- one entity in the context -->
 
=markus <-- one entity in the context -->
+(http://www.example.com/name) <-- single-valued attribute -->
+
+(http://www.example.com/name)
"Markus"
+
/
+(http://www.example.com/location) <-- single-valued attribute -->
+
$!da649486d19f8cc02350447179637cba604eff46
"Vienna"
+
+(http://www.example.com/name)
+(http://www.example.com/email) <-- multi-valued attribute -->
+
"Markus"
 +
+(http://www.example.com/location)
 +
/
 +
$!8b6cea61d247482e9e7f1e7efb1db432a69bbcb2
 +
+(http://www.example.com/location)
 +
"Vienna"
 +
+(http://www.example.com/email)
 
/
 
/
 
$!546de0b559ddcdb45983fd901f8d665ecc795e6e
 
$!546de0b559ddcdb45983fd901f8d665ecc795e6e
Line 126: Line 129:
 
=markus
 
=markus
 
+(http://www.example.com/name)
 
+(http://www.example.com/name)
"Markus"
+
/
 +
$!da649486d19f8cc02350447179637cba604eff46
 +
+(http://www.example.com/name)
 +
"Markus"
 
+(http://www.example.com/location)
 
+(http://www.example.com/location)
"Vienna"
+
/
 +
$!8b6cea61d247482e9e7f1e7efb1db432a69bbcb2
 +
+(http://www.example.com/location)
 +
"Vienna"
 
+(http://www.example.com/email)
 
+(http://www.example.com/email)
 
/
 
/
Line 169: Line 178:
 
=markus
 
=markus
 
+(http://www.example.com/name)
 
+(http://www.example.com/name)
"Markus"
+
/
 +
$!da649486d19f8cc02350447179637cba604eff46
 +
+(http://www.example.com/name)
 +
"Markus"
 
</pre>
 
</pre>
  
Line 227: Line 239:
  
 
=== Remove a Value from an Attribute ===
 
=== Remove a Value from an Attribute ===
 
==== Multi-valued attribute ====
 
  
 
[[IdAS]] calls:
 
[[IdAS]] calls:
Line 260: Line 270:
  
 
=== Change a Value of an Attribute ===
 
=== Change a Value of an Attribute ===
 
==== Multi-valued attribute ====
 
  
 
[[IdAS]] calls:
 
[[IdAS]] calls:
Line 291: Line 299:
 
+(http://www.example.com/email)
 
+(http://www.example.com/email)
 
"markus@changedemail.com"
 
"markus@changedemail.com"
</pre>
 
 
Reply from the XDI endpoint: (none)
 
 
==== Single-valued attribute ====
 
 
[[IdAS]] calls:
 
 
<pre>
 
IEntity entity = context.getEntity("=markus");
 
IAttribute attribute = entity.getAttribute(new URI("http://www.example.com/name"));
 
Iterator<IAttributeValue> values = (Iterator<IAttributeValue>) attribute.getValues();
 
IAttributeValue value = values.next(); // current value is "Markus"
 
((ITypedValue) value).setData("M.S.");
 
</pre>
 
 
Message sent by the [[XDI Context Provider]] to <url>:
 
 
<pre>
 
=sender
 
$mod
 
/
 
=markus
 
+(http://www.example.com/name)
 
"M.S."
 
</pre>
 
 
HTTP REST:
 
 
<pre>
 
POST on <url>/=markus/%2B(http://www.example.com/name)
 
HTTP body contains "M.S." (without the quotes)
 
 
</pre>
 
</pre>
  
Line 328: Line 304:
  
 
=== Add a Value to an Attribute ===
 
=== Add a Value to an Attribute ===
 
==== Multi-valued attribute ====
 
  
 
[[IdAS]] calls:
 
[[IdAS]] calls:

Revision as of 08:46, 9 August 2008

{{#eclipseproject:technology.higgins}} This page documents the mapping between the Higgins Data Model (which is implemented by IdAS) and XDI. XDI ("XRI Data Interchange") is a data model and protocol for sharing, linking, and synchronizing data over the Internet ("structured web") and other networks using Extensible Resource Identifiers (XRIs). It is being developed by the OASIS XDI Technical Committee.

The IdAS XDI Engine exposes an IdAS Context by receiving XDI messages.

The XDI Context Provider implements an IdAS Context by sending XDI messages. These message can be sent either to an XDI endpoint exposed by the IdAS XDI Engine or to a native XDI endpoint.

Mapping the Higgins Data Model to XDI

Since the Higgins Data Model is based on RDF/OWL, and since XDI is also (conceptually) based on RDF, the basic mapping is straight-forward. However, some attention has to be paid to details.

Roughly speaking, a Higgins context can be mapped to an XDI graph using the following rules:

  • An Entity maps to an XDI subject
  • An Attribute maps to an XDI predicate
  • A Simple Value of an Attribute maps to an XDI inner graph with multiple XDI literals
  • A Complex Value maps to an XDI reference
  • A Higgins Relation maps to an XDI predicate
  • A Higgins Correlation maps to the special $is XDI predicate

Hash I-Numbers

On several occasions in this mapping, it is necessary to refer to individual Simple Values of a multi-valued Attribute. Since Simple Values in Higgins IdAS do not have persistent identifiers, a mechanism called "Hash I-Number" (HIN) is used. A HIN is an i-number that is deterministically calculated from a value, therefore acting as an index of that value in the multi-valued Attribute.

This formula can be used to calculate a HIN:

HIN = '$' + '!' + sha1(value)

Examples:

  • "Sergey" becomes $!11cac773045ffc189fa2e3ed232843d363d019c6
  • "Markus" becomes $!da649486d19f8cc02350447179637cba604eff46
  • "markus.sabadello@gmail.com" becomes $!546de0b559ddcdb45983fd901f8d665ecc795e6e
  • "msabadello@parityinc.net" becomes $!710e4214a22c1840fc7a829b1c3fd32375e9efca
  • "markus@changedemail.com" $!6ea54708b267b24988beca6adc34c4e79ed0a0b5
  • "markus@newemail.com" becomes $!83d3033bdaf1ad79b805cbf56df1d5c56c36d71e

Mapping Higgins IdAS operation to XDI operations

Using IdAS, a Higgins context can be opened, and operations can be performed on it. The equivalent in XDI is XDI messages (which contain XDI operations).

XDI messages have "senders". A sender is an XRI that identifies the subject (the Higgins Entity) that performs the operation. This sender XRI is provided to the XDI Context Provider when the Context is opened, i.e. as part of the Authentication Materials.

The following sub-sections each list the following:

  • A typical IdAS operation (the sub-section name).
  • The IdAS calls that perform the operation.
  • An XDI message produced by the XDI Context Provider (the first XDI example in the sub-section).
  • An XDI result document produced by the XDI Engine or a native XDI endpoint (the second XDI example in the sub-section).

All XDI examples are in the X3 Simple serialization format. See X3Format for more information about X3 serialization formats.

The following sections assume that a context is exposed as XDI at the URL <url>.

List all Entities in the Context

IdAS calls:

Iterator<Entity> entities = context.getEntities(null);

Message sent by the XDI Context Provider to <url>:

=sender
	$get

HTTP REST:

GET on <url>

Reply from the XDI endpoint:

=markus	<-- one entity in the context -->
	+(http://www.example.com/name)
		/
			$!da649486d19f8cc02350447179637cba604eff46
				+(http://www.example.com/name)
					"Markus"
	+(http://www.example.com/location)
		/
			$!8b6cea61d247482e9e7f1e7efb1db432a69bbcb2
				+(http://www.example.com/location)
					"Vienna"
	+(http://www.example.com/email)
		/
			$!546de0b559ddcdb45983fd901f8d665ecc795e6e
				+(http://www.example.com/email)
					"markus.sabadello@gmail.com"
			$!710e4214a22c1840fc7a829b1c3fd32375e9efca
				+(http://www.example.com/email)
					"msabadello@parityinc.net"
=sergey	<-- another entity in the context -->
	+(http://www.example.com/name)
		/
			$!11cac773045ffc189fa2e3ed232843d363d019c6
				+(http://www.example.com/name)
					"Sergey"

Get one Entity from the Context

IdAS calls:

IEntity entity = context.getEntity("=markus");

Message sent by the XDI Context Provider to <url>:

=sender
	$get
		/
			=markus

HTTP REST:

GET on <url>/=markus

Reply from the XDI endpoint:

=markus
	+(http://www.example.com/name)
		/
			$!da649486d19f8cc02350447179637cba604eff46
				+(http://www.example.com/name)
					"Markus"
	+(http://www.example.com/location)
		/
			$!8b6cea61d247482e9e7f1e7efb1db432a69bbcb2
				+(http://www.example.com/location)
					"Vienna"
	+(http://www.example.com/email)
		/
			$!546de0b559ddcdb45983fd901f8d665ecc795e6e
				+(http://www.example.com/email)
					"markus.sabadello@gmail.com"
			$!710e4214a22c1840fc7a829b1c3fd32375e9efca
				+(http://www.example.com/email)
					"msabadello@parityinc.net"

Get one Attribute from an Entity

IdAS calls:

IEntity entity = context.getEntity("=markus");
IAttribute attribute = entity.getAttribute("http://www.example.com/someAttributeId");

Message sent by the XDI Context Provider to <url>:

=sender
	$get
		/
			=markus
				+(http://www.example.com/name)

HTTP REST:

GET on <url>/=markus/%2B(http://www.example.com/name)

Reply from the XDI endpoint:

=markus
	+(http://www.example.com/name)
		/
			$!da649486d19f8cc02350447179637cba604eff46
				+(http://www.example.com/name)
					"Markus"

Remove an Entity from the Context

IdAS calls:

IEntity entity = context.getEntity("=markus");
entity.remove();

Message sent by the XDI Context Provider to <url>:

=sender
	$del
		/
			=markus

HTTP REST:

DELETE on <url>/=markus

Reply from the XDI endpoint: (none)

Remove an Attribute from an Entity

IdAS calls:

IEntity entity = context.getEntity("=markus");
IAttribute attribute = entity.getAttribute(new URI("http://www.example.com/name"));
attribute.remove();

Message sent by the XDI Context Provider to <url>:

=sender
	$del
		/
			=markus
				+(http://www.example.com/name)

HTTP REST:

DELETE on <url>/=markus/%2B(http://www.example.com/name)

Reply from the XDI endpoint: (none)

Remove a Value from an Attribute

IdAS calls:

IEntity entity = context.getEntity("=markus");
IAttribute attribute = entity.getAttribute(new URI("http://www.example.com/email"));
IAttributeValue value = attribute.getValues().next().next();	// value is "msabadello@parityinc.net"
value.remove();

Message sent by the XDI Context Provider to <url>:

=sender
	$del
		/
			=markus
				+(http://www.example.com/email)
					/
						$!710e4214a22c1840fc7a829b1c3fd32375e9efca	<-- HIN of msabadello@parityinc.net -->

HTTP REST:

DELETE on <url>/=markus/%2B(http://www.example.com/email)//$!710e4214a22c1840fc7a829b1c3fd32375e9efca

Reply from the XDI endpoint: (none)

Change a Value of an Attribute

IdAS calls:

IEntity entity = context.getEntity("=markus");
IAttribute attribute = entity.getAttribute(new URI("http://www.example.com/email"));
Iterator<IAttributeValue> values = (Iterator<IAttributeValue>) attribute.getValues();
IAttributeValue value = values.next();	// current value is "markus.sabadello@gmail.com"
((ITypedValue) value).setData("markus@changedemail.com");

Message sent by the XDI Context Provider to <url>:

=sender
	$del
		/
			=markus
				+(http://www.example.com/email)
					/
						$!546de0b559ddcdb45983fd901f8d665ecc795e6e	<-- HIN of markus.sabadello@gmail.com -->
	$add
		/
			=markus
				+(http://www.example.com/email)
					/
						$!6ea54708b267b24988beca6adc34c4e79ed0a0b5	<-- HIN of markus@changedemail.com -->
							+(http://www.example.com/email)
								"markus@changedemail.com"

Reply from the XDI endpoint: (none)

Add a Value to an Attribute

IdAS calls:

IEntity entity = context.getEntity("=markus");
IAttribute attribute = entity.getAttribute(new URI("http://www.example.com/email"));
attribute.addSimpleValue(new URI(""), "markus@newemail.com");

Message sent by the XDI Context Provider to <url>:

=sender
	$add
		/
			=markus
				+(http://www.example.com/email)
					/
						$!690e082dc615d636abdaae2b066bdbf7e2b70057
							+(http://www.example.com/email)
								"markus@newemail.com"

HTTP REST:

PUT on <url>/=markus/%2B(http://www.example.com/email)
HTTP body contains "markus.sabadello@gmail.com" (without the quotes)

Reply from the XDI endpoint: (none)

Get the schema of the Context

IdAS calls:

String schema = IContext.getSchema();

TODO

Get Context Relations and Context Correlations

IdAS calls:

IContext.getRelationships() 

TODO

Authorization

Authorization support in IdAS maps to XDI link contracts.

TODO

Notifications

Notification support in IdAS maps to XDI links contracts.

TODO

Filters

Filter support in IdAS maps to XDI queries.

TODO

Links

  • Higgins Home
  • The XDI RDF Model is the current OASIS TC proposal for an RDF-based data model and addressing format for XDI. This document includes the proposed XDI RDF schema and a number of examples of XDI documents. (Note that it does not yet include the proposed XDI messaging format, which uses XDI documents as message envelopes for other XDI documents.)
  • OASIS XDI TC Wiki
  • Wikipedia page on XDI

Back to the top