Table of Contents
Introduction
It is useful for research to have access to historical information, such as which artist was previously believed to be the creator of a work, or previous valuations of an object. The majority of use cases, however, are to get the current information. The assignment of attributes model allows for this additional information to be associated, without making every property a list of historical values.
This pattern is also used for context-specific assertions, such as when an object is given a label or description for the purposes of an exhibition or other event. This exhibition label does not replace the owning museum's title, but is useful for historical comparison and research purposes.
Assignment of Attributes
The AttributeAssignment
class is an Activity
, carried out by curators or researchers rather than by artists, that assigns information to resources in the model. This can be used to assign any property or relationship on any resource that can be the subject of such a property. The general Activity properties of carried_out_by
, timespan
and took_place_at
are also available for when and where the assignment happened, and who made it. The timespan
is the moment when the assignment took place, rather than the length of time that the assignment was held to be true by some audience.
The value of the assignment is given using assigned
, and it can be any resource or value. The resource that the value is assigned to is given using the assigned_to
property, and the relationship between them is given using classified_as
. Thus an AttributeAssignment
can assign an Actor
to a Production
with the carried_out_by
relationship, or a Name
to an Actor
with the identified_by
relationship.
The example below demonstrates associating a previous title with an object.
{ "@context": "https://linked.art/ns/v1/linked-art.json", "id": "https://linked.art/example/activity/8", "type": "AttributeAssignment", "classified_as": "identified_by", "timespan": { "id": "https://linked.art/example/time/6", "type": "TimeSpan", "begin_of_the_begin": "1804-05-19", "end_of_the_end": "1804-05-19" }, "assigned": { "id": "https://linked.art/example/name/16", "type": "Name", "content": "Previous Painting Title" }, "assigned_to": { "id": "https://linked.art/example/object/10", "type": "ManMadeObject", "label": "Current Painting Title", "classified_as": [ { "id": "http://vocab.getty.edu/aat/300033618", "type": "Type", "label": "Painting" }, { "id": "http://vocab.getty.edu/aat/300133025", "type": "Type", "label": "Artwork" } ] }, "carried_out_by": [ { "id": "https://linked.art/example/person/15", "type": "Person", "label": "Painting Curator" } ] }
JSON-LD (Raw) | JSON-LD (Playground) | Turtle (Raw) | Turtle (Styled)
"Style Of" Attribution
There is a common special case of wanting to assign not an individual (e.g. Rembrandt) or a group with specific identity (Workshop of Rembrandt) to the production of an object, but simply to say that it was produced as if it had been produced by some other actor. This is traditionally recorded as being "in the style of" a known artist. It is not correct to say that Rembrandt carried out the production, but a search for objects attributed (loosely speaking) to Rembrandt should discover this object. The assessment of "style of" attribution is a judgement decision that might be changed later as new evidence of the actual creator comes to light.
The approach taken for this case is to use an AttributeAssignment
that associates a Production activity that is influenced_by
the artist and classified_as
being in the "style of" (aat:300404285). This prevent systems from mistakenly infering that the actor carried_out
the production, but is consistent with the overall pattern.
This would also apply to cases where there is a "workshop of", "studio of", "circle of" and similar attributions in which there is doubt that there really was such a group, and thus there is reluctance to give that hypothetical group an identity. Instead of using the "style of" aat concept, it would use "workshop of" (aat:300404274), or other attribution qualifiers from AAT.
{ "@context": "https://linked.art/ns/v1/linked-art.json", "id": "https://linked.art/example/activity/9", "type": "AttributeAssignment", "assigned": { "id": "https://linked.art/example/activity/10", "type": "Production", "classified_as": [ { "id": "http://vocab.getty.edu/aat/300404285", "type": "Type", "label": "Style Of" } ], "influenced_by": [ { "id": "https://linked.art/example/person/16", "type": "Person", "label": "Well Known Artist" } ] }, "classified_as": "produced_by", "assigned_to": { "id": "https://linked.art/example/object/11", "type": "ManMadeObject", "label": "Example Painting", "classified_as": [ { "id": "http://vocab.getty.edu/aat/300033618", "type": "Type", "label": "Painting" }, { "id": "http://vocab.getty.edu/aat/300133025", "type": "Type", "label": "Artwork" } ] }, "carried_out_by": [ { "id": "https://linked.art/example/person/17", "type": "Person", "label": "Painting Curator" } ] }
JSON-LD (Raw) | JSON-LD (Playground) | Turtle (Raw) | Turtle (Styled)
Context Specific Assertions
The basic pattern for making an assertion within some context is to reuse the AttributeAssignment
activity, and have it be part of some larger activity. A good example of this is the assignment of a particular title to a work during an Exhibition. This could equally be part of the larger cataloging activity of an organization, an art dealer taking inventory, or similar.
There are two relationships to note with this pattern. The first is that the broader activity has a part
which is the AttributeAssignment
. This gives some basic temporal context for the assignment. There is also in many cases a set of objects or other resources that provide additional context. In the Exhibition case, the set of objects and their labels in the exhibit is involved
in the provision of the Name
of the individual object.
{ "@context": "https://linked.art/ns/v1/linked-art.json", "id": "https://linked.art/example/activity/11", "type": "Activity", "label": "Example Exhibition", "classified_as": [ { "id": "http://vocab.getty.edu/aat/300054766", "type": "Type", "label": "Exhibiting" } ], "used_specific_object": [ {"id": "https://linked.art/example/set/4","type": "Aggregation"} ], "part": [ { "id": "https://linked.art/example/activity/12", "type": "AttributeAssignment", "classified_as": "identified_by", "involved": [ {"id": "https://linked.art/example/set/4","type": "Aggregation"} ], "assigned": { "id": "https://linked.art/example/name/17", "type": "Name", "content": "Exhibition Specific Name" }, "assigned_to": { "id": "https://linked.art/example/object/12", "type": "ManMadeObject", "label": "Real Painting Name", "classified_as": [ { "id": "http://vocab.getty.edu/aat/300033618", "type": "Type", "label": "Painting" }, { "id": "http://vocab.getty.edu/aat/300133025", "type": "Type", "label": "Artwork" } ] }, "carried_out_by": [ { "id": "https://linked.art/example/person/18", "type": "Person", "label": "A. Curator" } ] } ] }
JSON-LD (Raw) | JSON-LD (Playground) | Turtle (Raw) | Turtle (Styled)
Proxies
If there are many AttributeAssignment
s per object, the actor that carried out the assignment is not important to include in the dataset, and there is a collection or Aggregation
of resources that provides context, then there is a more concise form of the above assertions using Proxy
resources.
Instead of turning the assignment into an activity, instead we can associate the information directly with a Proxy
for the resource that is in the context of the Aggregation
. Any number of assertions can be managed by a single Proxy resource, and it is possible to go from the AttributeAssignment pattern to the Proxy pattern and back again without human intervention. There is only one Proxy per combination of an Aggregation
and a particular resource that it aggregates
.
The equivalent form of the above example would be:
{ "@context": "https://linked.art/ns/v1/linked-art.json", "id": "https://linked.art/example/activity/13", "type": "Activity", "label": "Example Exhibition", "classified_as": [ { "id": "http://vocab.getty.edu/aat/300054766", "type": "Type", "label": "Exhibiting" } ], "used_specific_object": [ { "id": "https://linked.art/example/set/5", "type": "Aggregation", "aggregates": [ { "id": "https://linked.art/example/object/13", "type": "ManMadeObject", "label": "Real Painting Name", "classified_as": [ { "id": "http://vocab.getty.edu/aat/300033618", "type": "Type", "label": "Painting" }, { "id": "http://vocab.getty.edu/aat/300133025", "type": "Type", "label": "Artwork" } ] } ], "proxies": [ { "id": "https://linked.art/example/Proxy/2", "type": "Proxy", "identified_by": [ { "id": "https://linked.art/example/name/18", "type": "Name", "content": "Exhibition Specific Name" } ], "proxyIn": {"id": "https://linked.art/example/set/5","type": "Aggregation"}, "proxyFor": { "id": "https://linked.art/example/object/13", "type": "ManMadeObject", "label": "Real Painting Name" } } ] } ] }
JSON-LD (Raw) | JSON-LD (Playground) | Turtle (Raw) | Turtle (Styled)
The algorithm to go from a set of AttributeAssignments to a set of Proxies is:
proxyFors = {} for aa in top_activity.part: if aa.type == "AttributeAssignment" and aa.involved and aa.involved.type == "Aggregation": p = proxyFors.get(aa.assigned_to, None) if not p: p = Proxy() p.proxyFor = aa.assigned_to p.proxyIn = aa.involved proxyFors[aa.assigned_to] = p setattr(p, aa.classified_as, aa.assigned)
Inferred Data
Some assertions, or even entire resources, are computationally inferred from other data rather than being evidenced in primary source literature or history. It is useful to tag these resources as such, so that they can be treated appropriately when it comes to research making use of them: if the underlying data has errors, these errors will have been propogated to this resource.
The way that this can be signalled in the data is to add the "computer-generated" concept aat:300202389 to the resource in the classified_as
field.
{ "@context": "https://linked.art/ns/v1/linked-art.json", "id": "https://linked.art/example/activity/14", "type": "Activity", "label": "Inferred Activity", "classified_as": [ { "id": "http://vocab.getty.edu/aat/300202389", "type": "Type", "label": "Computer Generated" } ], "carried_out_by": [ { "id": "https://linked.art/example/actor/2", "type": "Actor", "label": "Performer of inferred activity" } ] }
JSON-LD (Raw) | JSON-LD (Playground) | Turtle (Raw) | Turtle (Styled)