navmenu: Schema
title: Link
navorder: 12
----
+...
h1. Link
-Links encode connections between Arvados objects, and from objects to primitives. Each metadata object has a tail (subject), class, name, properties, and head (object or value).
+**Links** describe relationships between Arvados objects, and from objects to primitives.
-table(table table-bordered table-condensed).
-|tail (object)| _class, name_
-→
- _properties{}_ |head (object)|
+Links are directional: each metadata object has a tail (subject), class, name, properties, and head (object or value). A Link may describe a relationship between two objects in an Arvados database: e.g. a _permission_ link between a User and a Group defines the permissions that User has to read or modify the Group. Other Links simply represent metadata for a single object, e.g. the _identifier_ Link, in which the _name_ property represents a human-readable identifier for the object at the link's head.
+
+For links that don't make sense to share between API clients, a _link_class_ that begins with @client@ (like @client.my_app_id@ or @client.my_app_id.anythinghere@) should be used.
h2. Methods
Some classes are pre-defined by convention and have standard meanings attached to names.
+h3. provenance
+
table(table table-bordered table-condensed).
-|_. link_class|_. tail_type→head_type|_. name→head_uuid {properties}|_. Notes|
-|provenance|→Collection |provided → _collection uuid_
+|_. tail_type→head_type|_. name→head_uuid {properties}|_. Notes|
+|→Collection |provided → _collection uuid_
{url→http://example.com/foo.tgz, retrieved_at→1352616640.000}||
-|provenance|Job→Collection |provided → _collection uuid_||
-|provenance|Specimen→Collection|provided → _collection uuid_||
-|provenance|Human→Specimen |provided → _specimen uuid_||
-|provenance|Human→Collection |provided → _collection uuid_||
-|human_trait|Human→Trait |measured → _trait uuid_ {value→1.83, unit→metre, measured_at→1352616640.000}||
-|identifier|→Human |hu123456 → _human uuid_||
-|permission|User→Group |can_manage → _group uuid_|Writable only by a user who can_manage this group|
-|permission|User→Group |can_read → _group uuid_ |Writable only by a user who can_manage this group.
+|Job→Collection |provided → _collection uuid_||
+|Specimen→Collection|provided → _collection uuid_||
+|Human→Specimen |provided → _specimen uuid_||
+|Human→Collection |provided → _collection uuid_||
+
+h3. permission
+
+table(table table-bordered table-condensed).
+|_. tail_type→head_type|_. name→head_uuid {properties}|_. Notes|
+|User→Group |can_manage → _group uuid_|Writable only by a user who can_manage this group|
+|User→Group |can_read → _group uuid_ |Writable only by a user who can_manage this group.
Gives permission to read any object owned by this group.|
-|resources|User→Collection|wants → _collection uuid_ |Determines whether data can be deleted|
-|resources|User→Job |wants → _job uuid_ |Determines whether a job can be cancelled|
-For links that don't make sense to share between API clients, a link class like @client.my_app_id@ or @client.my_app_id.anythinghere@ should be used.
+h3. resources
+
+table(table table-bordered table-condensed).
+|_. tail_type→head_type|_. name→head_uuid {properties}|_. Notes|
+|User→Collection|wants → _collection uuid_ |Determines whether data can be deleted|
+|User→Job |wants → _job uuid_ |Determines whether a job can be cancelled|
+
+h3. tag
+
+A **tag** link describes an object using an unparsed plain text string. Tags can be used to annotate objects that are not editable, like collections and objects shared as read-only.
+
+table(table table-bordered table-condensed).
+|_. tail_type→head_type|_. name→head_uuid {properties}|
+|→Collection | _tag name_ → _collection uuid_|
+|→Job | _tag name_ → _job uuid_|
+
+h3. human_trait
+
+table(table table-bordered table-condensed).
+|_. tail_type→head_type|_. name→head_uuid {properties}|_. Notes|
+|Human→Trait |measured → _trait uuid_ {value→1.83, unit→metre, measured_at→1352616640.000}||
+
+h3. identifier
+
+table(table table-bordered table-condensed).
+|_. tail_type→head_type|_. name→head_uuid {properties}|_. Notes|
+|→Human |hu123456 → _human uuid_||
+