Extensions, Relationships and Assertions

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.

The use of context specific assertions or other attribute assignments should be kept to a minimum if possible. The data structure is significantly more complex than other patterns, which reduces the likelihood of implementation and increases the difficult of search queries. This pattern should only be used if there is no other way to express the knowledge, and it is important to capture with all of the details.

Assignment of Attributes

The AttributeAssignment class is an Activity, carried out by curators or researchers rather than by artists or collectors, 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 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 (the thing being assigned) is given using assigned, and it can be a reference to any resource or entity. It cannot be a string or numeric value. The resource that the value is assigned to is given using the assigned_to property on the AttributeAssignment or on the entity being attributed using the attributed_by property. The relationship between them is given using assigned_property. 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 title with an object by a curator.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/object/17",
  "type": "HumanMadeObject",
  "_label": "Painting",
  "classified_as": [
    {
      "id": "http://vocab.getty.edu/aat/300033618",
      "type": "Type",
      "_label": "Painting",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300435443",
          "type": "Type",
          "_label": "Type of Work"
        }
      ]
    },
    {
      "id": "http://vocab.getty.edu/aat/300133025",
      "type": "Type",
      "_label": "Artwork"
    }
  ],
  "attributed_by": [
    {
      "type": "AttributeAssignment",
      "timespan": {
        "type": "TimeSpan",
        "begin_of_the_begin": "1980-05-19",
        "end_of_the_end": "1980-05-19"
      },
      "carried_out_by": [
        {
          "type": "Person",
          "_label": "Painting Curator"
        }
      ],
      "assigned_property": "identified_by",
      "assigned": [
        {
          "type": "Name",
          "content": "Assigned Painting Title"
        }
      ]
    }
  ]
}

graph TD classDef object stroke:black,fill:#E1BA9C,rx:20px,ry:20px; classDef actor stroke:black,fill:#FFBDCA,rx:20px,ry:20px; classDef type stroke:red,fill:#FAB565,rx:20px,ry:20px; classDef name stroke:orange,fill:#FEF3BA,rx:20px,ry:20px; classDef dims stroke:black,fill:#c6c6c6,rx:20px,ry:20px; classDef infoobj stroke:#907010,fill:#fffa40,rx:20px,ry:20px classDef timespan stroke:blue,fill:#ddfffe,rx:20px,ry:20px classDef place stroke:#3a7a3a,fill:#aff090,rx:20px,ry:20px classDef event stroke:#1010FF,fill:#96e0f6,rx:20px,ry:20px classDef literal stroke:black,fill:#f0f0e0; classDef classstyle stroke:black,fill:white; O1(object17) class O1 object; O1-- type -->O1_0[HumanMadeObject] class O1_0 classstyle; O1-- _label -->O1_4("''Painting''") class O1_4 literal; O2(aat:300033618) class O2 type; O2-- type -->O2_0[Type] class O2_0 classstyle; O2-- _label -->O2_3("''Painting''") class O2_3 literal; O3(aat:300435443) class O3 type; O3-- type -->O3_0[Type] class O3_0 classstyle; O3-- _label -->O3_3("''Type of Work''") class O3_3 literal; O2-- classified_as -->O3 O1-- classified_as -->O2 O4(aat:300133025) class O4 type; O4-- type -->O4_0[Type] class O4_0 classstyle; O4-- _label -->O4_3("''Artwork''") class O4_3 literal; O1-- classified_as -->O4 O5( _ ) class O5 event; O5-- type -->O5_0[AttributeAssignment] class O5_0 classstyle; O6( _ ) class O6 timespan; O6-- type -->O6_0[TimeSpan] class O6_0 classstyle; O6-- begin_of_the_begin -->O6_2("''1980-05-19''") class O6_2 literal; O6-- end_of_the_end -->O6_3("''1980-05-19''") class O6_3 literal; O5-- timespan -->O6 O7( _ ) class O7 actor; O7-- type -->O7_0[Person] class O7_0 classstyle; O7-- _label -->O7_2("''Painting Curator''") class O7_2 literal; O5-- carried_out_by -->O7 O5-- assigned_property -->O5_4("''identified_by''") class O5_4 literal; O8( _ ) class O8 name; O8-- type -->O8_0[Name] class O8_0 classstyle; O8-- content -->O8_2("''Assigned Painting Title''") class O8_2 literal; O5-- assigned -->O8 O1-- attributed_by -->O5
Other Representations: 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" or "in the manner 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 "circle of" or "follower of" and similar attributions in which there is doubt that there was an actual coherent group, and thus there is reluctance to give that hypothetical group an identity. Instead of using the "style of" AAT concept, it would use another attribution qualifiers.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/object/18",
  "type": "HumanMadeObject",
  "_label": "Example Painting",
  "classified_as": [
    {
      "id": "http://vocab.getty.edu/aat/300033618",
      "type": "Type",
      "_label": "Painting",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300435443",
          "type": "Type",
          "_label": "Type of Work"
        }
      ]
    },
    {
      "id": "http://vocab.getty.edu/aat/300133025",
      "type": "Type",
      "_label": "Artwork"
    }
  ],
  "attributed_by": [
    {
      "type": "AttributeAssignment",
      "carried_out_by": [
        {
          "type": "Person",
          "_label": "Painting Curator"
        }
      ],
      "assigned_property": "produced_by",
      "assigned": [
        {
          "type": "Production",
          "classified_as": [
            {
              "id": "http://vocab.getty.edu/aat/300404285",
              "type": "Type",
              "_label": "Style Of"
            }
          ],
          "influenced_by": [
            {
              "type": "Person",
              "_label": "Well Known Artist"
            }
          ]
        }
      ]
    }
  ]
}

graph TD classDef object stroke:black,fill:#E1BA9C,rx:20px,ry:20px; classDef actor stroke:black,fill:#FFBDCA,rx:20px,ry:20px; classDef type stroke:red,fill:#FAB565,rx:20px,ry:20px; classDef name stroke:orange,fill:#FEF3BA,rx:20px,ry:20px; classDef dims stroke:black,fill:#c6c6c6,rx:20px,ry:20px; classDef infoobj stroke:#907010,fill:#fffa40,rx:20px,ry:20px classDef timespan stroke:blue,fill:#ddfffe,rx:20px,ry:20px classDef place stroke:#3a7a3a,fill:#aff090,rx:20px,ry:20px classDef event stroke:#1010FF,fill:#96e0f6,rx:20px,ry:20px classDef literal stroke:black,fill:#f0f0e0; classDef classstyle stroke:black,fill:white; O1(object18) class O1 object; O1-- type -->O1_0[HumanMadeObject] class O1_0 classstyle; O1-- _label -->O1_4("''Example Painting''") class O1_4 literal; O2(aat:300033618) class O2 type; O2-- type -->O2_0[Type] class O2_0 classstyle; O2-- _label -->O2_3("''Painting''") class O2_3 literal; O3(aat:300435443) class O3 type; O3-- type -->O3_0[Type] class O3_0 classstyle; O3-- _label -->O3_3("''Type of Work''") class O3_3 literal; O2-- classified_as -->O3 O1-- classified_as -->O2 O4(aat:300133025) class O4 type; O4-- type -->O4_0[Type] class O4_0 classstyle; O4-- _label -->O4_3("''Artwork''") class O4_3 literal; O1-- classified_as -->O4 O5( _ ) class O5 event; O5-- type -->O5_0[AttributeAssignment] class O5_0 classstyle; O6( _ ) class O6 actor; O6-- type -->O6_0[Person] class O6_0 classstyle; O6-- _label -->O6_2("''Painting Curator''") class O6_2 literal; O5-- carried_out_by -->O6 O5-- assigned_property -->O5_3("''produced_by''") class O5_3 literal; O7( _ ) class O7 event; O7-- type -->O7_0[Production] class O7_0 classstyle; O8(aat:300404285) class O8 type; O8-- type -->O8_0[Type] class O8_0 classstyle; O8-- _label -->O8_3("''Style Of''") class O8_3 literal; O7-- classified_as -->O8 O9( _ ) class O9 actor; O9-- type -->O9_0[Person] class O9_0 classstyle; O9-- _label -->O9_2("''Well Known Artist''") class O9_2 literal; O7-- influenced_by -->O9 O5-- assigned -->O7 O1-- attributed_by -->O5
Other Representations: 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 any number of other contexts.

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/0",
  "type": "Activity",
  "_label": "Example Exhibition",
  "classified_as": [
    {
      "id": "http://vocab.getty.edu/aat/300054766",
      "type": "Type",
      "_label": "Exhibiting"
    }
  ],
  "used_specific_object": [
    {
      "type": "Set",
      "member": [
        {
          "type": "HumanMadeObject",
          "_label": "Real Painting Name",
          "classified_as": [
            {
              "id": "http://vocab.getty.edu/aat/300033618",
              "type": "Type",
              "_label": "Painting",
              "classified_as": [
                {
                  "id": "http://vocab.getty.edu/aat/300435443",
                  "type": "Type",
                  "_label": "Type of Work"
                }
              ]
            },
            {
              "id": "http://vocab.getty.edu/aat/300133025",
              "type": "Type",
              "_label": "Artwork"
            }
          ]
        }
      ]
    }
  ],
  "part": [
    {
      "type": "AttributeAssignment",
      "carried_out_by": [
        {
          "type": "Person",
          "_label": "A. Curator"
        }
      ],
      "assigned_property": "identified_by",
      "assigned": [
        {
          "type": "Name",
          "content": "Exhibition Specific Name"
        }
      ],
      "assigned_to": {
        "type": "HumanMadeObject",
        "_label": "Real Painting Name"
      },
      "involved": [
        {
          "type": "Set"
        }
      ]
    }
  ]
}

graph TD classDef object stroke:black,fill:#E1BA9C,rx:20px,ry:20px; classDef actor stroke:black,fill:#FFBDCA,rx:20px,ry:20px; classDef type stroke:red,fill:#FAB565,rx:20px,ry:20px; classDef name stroke:orange,fill:#FEF3BA,rx:20px,ry:20px; classDef dims stroke:black,fill:#c6c6c6,rx:20px,ry:20px; classDef infoobj stroke:#907010,fill:#fffa40,rx:20px,ry:20px classDef timespan stroke:blue,fill:#ddfffe,rx:20px,ry:20px classDef place stroke:#3a7a3a,fill:#aff090,rx:20px,ry:20px classDef event stroke:#1010FF,fill:#96e0f6,rx:20px,ry:20px classDef literal stroke:black,fill:#f0f0e0; classDef classstyle stroke:black,fill:white; O1(activity0) class O1 event; O1-- type -->O1_0[Activity] class O1_0 classstyle; O1-- _label -->O1_4("''Example Exhibition''") class O1_4 literal; O2(aat:300054766) class O2 type; O2-- type -->O2_0[Type] class O2_0 classstyle; O2-- _label -->O2_3("''Exhibiting''") class O2_3 literal; O1-- classified_as -->O2 O3( _ ) class O3 infoobj; O3-- type -->O3_0[Set] class O3_0 classstyle; O4( _ ) class O4 object; O4-- type -->O4_0[HumanMadeObject] class O4_0 classstyle; O4-- _label -->O4_2("''Real Painting Name''") class O4_2 literal; O5(aat:300033618) class O5 type; O5-- type -->O5_0[Type] class O5_0 classstyle; O5-- _label -->O5_3("''Painting''") class O5_3 literal; O6(aat:300435443) class O6 type; O6-- type -->O6_0[Type] class O6_0 classstyle; O6-- _label -->O6_3("''Type of Work''") class O6_3 literal; O5-- classified_as -->O6 O4-- classified_as -->O5 O7(aat:300133025) class O7 type; O7-- type -->O7_0[Type] class O7_0 classstyle; O7-- _label -->O7_3("''Artwork''") class O7_3 literal; O4-- classified_as -->O7 O3-- member -->O4 O1-- used_specific_object -->O3 O8( _ ) class O8 event; O8-- type -->O8_0[AttributeAssignment] class O8_0 classstyle; O9( _ ) class O9 actor; O9-- type -->O9_0[Person] class O9_0 classstyle; O9-- _label -->O9_2("''A. Curator''") class O9_2 literal; O8-- carried_out_by -->O9 O8-- assigned_property -->O8_3("''identified_by''") class O8_3 literal; O10( _ ) class O10 name; O10-- type -->O10_0[Name] class O10_0 classstyle; O10-- content -->O10_2("''Exhibition Specific Name''") class O10_2 literal; O8-- assigned -->O10 O11( _ ) class O11 object; O11-- type -->O11_0[HumanMadeObject] class O11_0 classstyle; O11-- _label -->O11_2("''Real Painting Name''") class O11_2 literal; O8-- assigned_to -->O11 O12( _ ) class O12 infoobj; O12-- type -->O12_0[Set] class O12_0 classstyle; O8-- involved -->O12 O1-- part -->O8
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

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/event/2",
  "type": "Activity",
  "_label": "Inferred Activity",
  "classified_as": [
    {
      "id": "http://vocab.getty.edu/aat/300202389",
      "type": "Type",
      "_label": "Computer Generated"
    }
  ],
  "carried_out_by": [
    {
      "type": "Actor",
      "_label": "Performer of inferred activity"
    }
  ]
}

graph TD classDef object stroke:black,fill:#E1BA9C,rx:20px,ry:20px; classDef actor stroke:black,fill:#FFBDCA,rx:20px,ry:20px; classDef type stroke:red,fill:#FAB565,rx:20px,ry:20px; classDef name stroke:orange,fill:#FEF3BA,rx:20px,ry:20px; classDef dims stroke:black,fill:#c6c6c6,rx:20px,ry:20px; classDef infoobj stroke:#907010,fill:#fffa40,rx:20px,ry:20px classDef timespan stroke:blue,fill:#ddfffe,rx:20px,ry:20px classDef place stroke:#3a7a3a,fill:#aff090,rx:20px,ry:20px classDef event stroke:#1010FF,fill:#96e0f6,rx:20px,ry:20px classDef literal stroke:black,fill:#f0f0e0; classDef classstyle stroke:black,fill:white; O1(event2) class O1 event; O1-- type -->O1_0[Activity] class O1_0 classstyle; O1-- _label -->O1_4("''Inferred Activity''") class O1_4 literal; O2(aat:300202389) class O2 type; O2-- type -->O2_0[Type] class O2_0 classstyle; O2-- _label -->O2_3("''Computer Generated''") class O2_3 literal; O1-- classified_as -->O2 O3( _ ) class O3 actor; O3-- type -->O3_0[Actor] class O3_0 classstyle; O3-- _label -->O3_2("''Performer of inferred activity''") class O3_2 literal; O1-- carried_out_by -->O3
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)