9 **Links** describe relationships between Arvados objects, and from objects to primitives.
11 Links are directional: each metadata object has a tail (the "subject" being described), class, name, properties, and head (the "object" that describes the "subject"). 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.
13 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.
17 See "links":{{site.baseurl}}/api/methods/links.html
21 Each link has, in addition to the usual "attributes of Arvados resources":{{site.baseurl}}/api/resources.html:
23 table(table table-bordered table-condensed).
24 |_. Attribute|_. Type|_. Description|
25 |tail_uuid|string|Object UUID at the tail (start, source, origin) of this link|
26 |link_class|string|Class (see below)|
27 |name|string|Link type (see below)|
28 |head_uuid|string|Object UUID at the head (end, destination, target) of this link|
29 |properties|hash|Additional information, expressed as a key→value hash. Key: string. Value: string, number, array, or hash.|
33 Some classes are pre-defined by convention and have standard meanings attached to names.
37 table(table table-bordered table-condensed).
38 |_. tail_type→head_type|_. name→head_uuid {properties}|_. Notes|
39 |→Collection |provided → _collection uuid_
40 {url→http://example.com/foo.tgz, retrieved_at→1352616640.000}||
41 |Job→Collection |provided → _collection uuid_||
42 |Specimen→Collection|provided → _collection uuid_||
43 |Human→Specimen |provided → _specimen uuid_||
44 |Human→Collection |provided → _collection uuid_||
48 table(table table-bordered table-condensed).
49 |_. tail_type→head_type|_. name→head_uuid {properties}|_. Notes|
50 |User→Group |can_manage → _group uuid_|Writable only by a user who can_manage this group|
51 |User→Group |can_read → _group uuid_ |Writable only by a user who can_manage this group.
52 Gives permission to read any object owned by this group.|
56 table(table table-bordered table-condensed).
57 |_. tail_type→head_type|_. name→head_uuid {properties}|_. Notes|
58 |User→Collection|wants → _collection uuid_ |Determines whether data can be deleted|
59 |User→Job |wants → _job uuid_ |Determines whether a job can be cancelled|
63 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.
65 table(table table-bordered table-condensed).
66 |_. tail_type→head_type|_. name→head_uuid {properties}|
67 |→Collection | _tag name_ → _collection uuid_|
68 |→Job | _tag name_ → _job uuid_|
72 table(table table-bordered table-condensed).
73 |_. tail_type→head_type|_. name→head_uuid {properties}|_. Notes|
74 |Human→Trait |measured → _trait uuid_ {value→1.83, unit→metre, measured_at→1352616640.000}||
78 table(table table-bordered table-condensed).
79 |_. tail_type→head_type|_. name→head_uuid {properties}|_. Notes|
80 |→Human |hu123456 → _human uuid_||