Relationships and Context for Assignment of Attributes

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.

Assigning Attributes

The AttributeAssignment class is an Activity, typically 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.

This pattern is useful when you do not want to assert the relationship directly, such as for a name that was previously given to the object but is no longer actively used. Or an attribution of an artist that is possibly true, but might only be an informed guess.

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 attributed_by property on that resource, and 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 Material to an object with the made_of property. In terms of the relationship that the AttributeAssignment expresses, the resource with the attributed_by property is the subject of the relationship, the relationship itself is given in assigned_property, and the object of the relationship is given in assigned, thereby making up a regular 'triple' of subject, predicate, object.

Example:

It is asserted in 2015 that "Spring" has a material of canvas.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/object/spring/21",
  "type": "HumanMadeObject",
  "_label": "Spring",
  "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"
        }
      ]
    }
  ],
  "attributed_by": [
    {
      "type": "AttributeAssignment",
      "timespan": {
        "type": "TimeSpan",
        "begin_of_the_begin": "2015-01-01T00:00:00Z",
        "end_of_the_end": "2015-12-31T23:59:59Z"
      },
      "assigned_property": "made_of",
      "assigned": [
        {
          "id": "http://vocab.getty.edu/aat/300014078",
          "type": "Material"
        }
      ]
    }
  ]
}

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(object/spring/21) class O1 object; O1-- type -->O1_0[HumanMadeObject] class O1_0 classstyle; O1-- _label -->O1_4("''Spring''") 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( _ ) class O4 event; O4-- type -->O4_0[AttributeAssignment] class O4_0 classstyle; O5( _ ) class O5 timespan; O5-- type -->O5_0[TimeSpan] class O5_0 classstyle; O5-- begin_of_the_begin -->O5_2("''2015-01-01T00:00:00Z''") class O5_2 literal; O5-- end_of_the_end -->O5_3("''2015-12-31T23:59:59Z''") class O5_3 literal; O4-- timespan -->O5 O4-- assigned_property -->O4_3("''made_of''") class O4_3 literal; O6(aat:300014078) class O6 type; O6-- type -->O6_0[Material] class O6_0 classstyle; O4-- assigned -->O6 O1-- attributed_by -->O4
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

Assigned Value as Resource

In other situations the assigned value is the appropriate resource with which to associate the AttributeAssignment. In this case we flip the AttributeAssignment around and use assigned_by on the value of the assignment (the object of the relationship), and do not specify the subject of the relationship as it's the resource which refers to the value. For example, it is very useful to be able to assert which organization created and assigned an identifier to an object of a given type in order to disambiguate that organization's identifier from another organization's identifier of the same type, such as accession numbers. Another use case is giving further information about a particular Dimension associated with the object, such as who measured it, when, with which instrument, and so on.

In this case, the subject of the relationship is the resource which refers to the value, the predicate is that relationship, and the object is the resource with the assigned_by property which refers to the AttributeAssignment.

Example:

The Kehinde Wiley painting "Portrait of Lynette Yiadom-Boakye, Jacob Morland of Capplethwaite" is jointly owned by the Yale University Art Gallery and the Yale Center for British Art. Both organizations have assigned their own accession numbers to the painting, and both are correct simultaneously.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/object/yiadom-boakye/1",
  "type": "HumanMadeObject",
  "_label": "Portrait of Lynette Yiadom-Boakye",
  "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"
        }
      ]
    }
  ],
  "identified_by": [
    {
      "type": "Identifier",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300312355",
          "type": "Type",
          "_label": "Accession Number"
        }
      ],
      "content": "2021.25.1",
      "assigned_by": [
        {
          "type": "AttributeAssignment",
          "carried_out_by": [
            {
              "id": "https://linked.art/example/group/yuag",
              "type": "Group",
              "_label": "Yale University Art Gallery",
              "classified_as": [
                {
                  "id": "http://vocab.getty.edu/aat/300312281",
                  "type": "Type",
                  "_label": "Museum"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "type": "Identifier",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300312355",
          "type": "Type",
          "_label": "Accession Number"
        }
      ],
      "content": "B2021.5",
      "assigned_by": [
        {
          "type": "AttributeAssignment",
          "carried_out_by": [
            {
              "id": "https://linked.art/example/group/ycba",
              "type": "Group",
              "_label": "Yale Center for British Art",
              "classified_as": [
                {
                  "id": "http://vocab.getty.edu/aat/300312281",
                  "type": "Type",
                  "_label": "Museum"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

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(object/yiadom-boakye/1) class O1 object; O1-- type -->O1_0[HumanMadeObject] class O1_0 classstyle; O1-- _label -->O1_4("''Portrait of Lynette Yiadom-Boakye''") 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( _ ) class O4 name; O4-- type -->O4_0[Identifier] class O4_0 classstyle; O5(aat:300312355) class O5 type; O5-- type -->O5_0[Type] class O5_0 classstyle; O5-- _label -->O5_3("''Accession Number''") class O5_3 literal; O4-- classified_as -->O5 O4-- content -->O4_3("''2021.25.1''") class O4_3 literal; O6( _ ) class O6 event; O6-- type -->O6_0[AttributeAssignment] class O6_0 classstyle; O7(group/yuag) class O7 actor; O7-- type -->O7_0[Group] class O7_0 classstyle; O7-- _label -->O7_3("''Yale University Art Gallery''") class O7_3 literal; O8(aat:300312281) class O8 type; O8-- type -->O8_0[Type] class O8_0 classstyle; O8-- _label -->O8_3("''Museum''") class O8_3 literal; O7-- classified_as -->O8 O6-- carried_out_by -->O7 O4-- assigned_by -->O6 O1-- identified_by -->O4 O9( _ ) class O9 name; O9-- type -->O9_0[Identifier] class O9_0 classstyle; O9-- classified_as -->O5 O9-- content -->O9_3("''B2021.5''") class O9_3 literal; O10( _ ) class O10 event; O10-- type -->O10_0[AttributeAssignment] class O10_0 classstyle; O11(group/ycba) class O11 actor; O11-- type -->O11_0[Group] class O11_0 classstyle; O11-- _label -->O11_3("''Yale Center for British Art''") class O11_3 literal; O11-- classified_as -->O8 O10-- carried_out_by -->O11 O9-- assigned_by -->O10 O1-- identified_by -->O9
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

Source of Knowledge

It is useful to be able to assert the source of information, such as the text which provides an authority or witness for a particular form of a name of an entity. This is modeled using the attribute assignment pattern, with a reference to the entity that provided the information in the used_specific_object field. This could be a database, or the text of a book, a physical object or other entity types. The requirement, however, is that it is a reference to this entity, rather than a string citation.

For citations as strings, the regular Statement pattern can be used with referred_to_by, again on the attribute assignment.

Example:

The name form "Rembrandt van Rijn" was added from Gardner's "Art through the Ages".

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/person/rembrandt/10",
  "type": "Person",
  "_label": "Rembrandt",
  "identified_by": [
    {
      "type": "Name",
      "content": "Rembrandt van Rijn",
      "assigned_by": [
        {
          "type": "AttributeAssignment",
          "used_specific_object": [
            {
              "id": "https://linked.art/example/text/gardner-art",
              "type": "LinguisticObject",
              "_label": "Art through the Ages"
            }
          ]
        }
      ]
    }
  ]
}

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(person/rembrandt/10) class O1 actor; O1-- type -->O1_0[Person] class O1_0 classstyle; O1-- _label -->O1_4("''Rembrandt''") class O1_4 literal; O2( _ ) class O2 name; O2-- type -->O2_0[Name] class O2_0 classstyle; O2-- content -->O2_2("''Rembrandt van Rijn''") class O2_2 literal; O3( _ ) class O3 event; O3-- type -->O3_0[AttributeAssignment] class O3_0 classstyle; O4(text/gardner-art) class O4 infoobj; O4-- type -->O4_0[LinguisticObject] class O4_0 classstyle; O4-- _label -->O4_3("''Art through the Ages''") class O4_3 literal; O3-- used_specific_object -->O4 O2-- assigned_by -->O3 O1-- identified_by -->O2
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

Creation Details of Embedded Statements

In order to give credit for the creation of statements embedded within other records, it is possible to add a created_by property on to the statement as if it were a full textual work record. This allows the creator and other creation information to be recorded in the regular way using carried_out_by. This is especially useful for noting contributions from external or more junior participants who might not otherwise receive any acknowledgement for their participation in the knowledge creation.

The use of artificial intelligence can be recorded as the technique of the creation, with a recommended vocabulary term of "aat:300456842", or if a particular AI tool is used, it can be listed with used_specific_object on the Creation. The URIs to use for specific AI tools are not recommended at the moment, however if certain tools become popular they will be added to the vocabulary section. Note that if AI is used but there is no other information about the creation of the statement, then an easier option is to use classified_as on the Statement directly, with a vocabulary term of "aat:300456841" for "AI Generated Content". The technique or the classification can also be used with AttributeAssignment when the assignment is being made by an AI. Consumers of content that is marked in these ways as being generated using an AI system might wish to tag the content as such in a user interface, or otherwise allow filtering or sorting of such artificial content.

Another use case is to associate rights information with the statement, separate from any asserted license on the overall dataset. This follows the regular subject_to pattern, as described in the rights section. In this way the overall factual information about an object or person can have a more permissive license than text or other more custom or potentially valuable content.

It must be noted that all of this functionality is available for any LinguisticObject record as well.

Example:

The description of The Night Watch was generated by an AI at a particular point in time, and is licensed as CC-BY.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/object/nightwatch/70",
  "type": "HumanMadeObject",
  "_label": "Night Watch",
  "referred_to_by": [
    {
      "type": "LinguisticObject",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300435416",
          "type": "Type",
          "_label": "Description",
          "classified_as": [
            {
              "id": "http://vocab.getty.edu/aat/300418049",
              "type": "Type",
              "_label": "Brief Text"
            }
          ]
        },
        {
          "id": "http://vocab.getty.edu/aat/300456841",
          "type": "Type"
        }
      ],
      "content": "Rembrandt's The Night Watch is a dynamic 17th-century group portrait of an Amsterdam militia company ...",
      "created_by": {
        "type": "Creation",
        "technique": [
          {
            "id": "http://vocab.getty.edu/aat/300456842",
            "type": "Type"
          }
        ],
        "timespan": {
          "type": "TimeSpan",
          "begin_of_the_begin": "2024-11-07T20:50:00Z",
          "end_of_the_end": "2024-11-07T20:50:00Z"
        }
      },
      "subject_to": [
        {
          "type": "Right",
          "classified_as": [
            {
              "id": "https://creativecommons.org/licenses/by/4.0/",
              "type": "Type",
              "_label": "CC-BY"
            }
          ],
          "identified_by": [
            {
              "type": "Name",
              "content": "CC-BY 4.0"
            }
          ]
        }
      ]
    }
  ]
}

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(object/nightwatch/70) class O1 object; O1-- type -->O1_0[HumanMadeObject] class O1_0 classstyle; O1-- _label -->O1_4("''Night Watch''") class O1_4 literal; O2( _ ) class O2 infoobj; O2-- type -->O2_0[LinguisticObject] class O2_0 classstyle; O3(aat:300435416) class O3 type; O3-- type -->O3_0[Type] class O3_0 classstyle; O3-- _label -->O3_3("''Description''") class O3_3 literal; O4(aat:300418049) class O4 type; O4-- type -->O4_0[Type] class O4_0 classstyle; O4-- _label -->O4_3("''Brief Text''") class O4_3 literal; O3-- classified_as -->O4 O2-- classified_as -->O3 O5(aat:300456841) class O5 type; O5-- type -->O5_0[Type] class O5_0 classstyle; O2-- classified_as -->O5 O2-- content -->O2_3("''Rembrandt's The Night Watch is a dynamic 17th-century group portrait of an Amsterdam militia company ...''") class O2_3 literal; O6( _ ) class O6 event; O6-- type -->O6_0[Creation] class O6_0 classstyle; O7(aat:300456842) class O7 type; O7-- type -->O7_0[Type] class O7_0 classstyle; O6-- technique -->O7 O8( _ ) class O8 timespan; O8-- type -->O8_0[TimeSpan] class O8_0 classstyle; O8-- begin_of_the_begin -->O8_2("''2024-11-07T20:50:00Z''") class O8_2 literal; O8-- end_of_the_end -->O8_3("''2024-11-07T20:50:00Z''") class O8_3 literal; O6-- timespan -->O8 O2-- created_by -->O6 O9( _ ) class O9 infoobj; O9-- type -->O9_0[Right] class O9_0 classstyle; O10(https://creativecommons.org/licenses/by/4.0/) class O10 type; O10-- type -->O10_0[Type] class O10_0 classstyle; O10-- _label -->O10_3("''CC-BY''") class O10_3 literal; O9-- classified_as -->O10 O11( _ ) class O11 name; O11-- type -->O11_0[Name] class O11_0 classstyle; O11-- content -->O11_2("''CC-BY 4.0''") class O11_2 literal; O9-- identified_by -->O11 O2-- subject_to -->O9 O1-- referred_to_by -->O2
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

Uncertain or Former Assignments

Similar to the approach taken in the first example above, it is possible to use attributed_by on a Production node to make either uncertain or previously held to be true claims about it. The assignment then creates another Production to encapsulate the information that isn't certain, or was formerly held to be correct, including the artist(s) but also potentially other links such as the place of production, the date, or other influences.

Example:

The watercolor painting "Forum Romanum" was possibly produced by Salomon Corrodi

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/object/forum/1",
  "type": "HumanMadeObject",
  "_label": "Forum Romanum",
  "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"
        }
      ]
    }
  ],
  "identified_by": [
    {
      "type": "Name",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300404670",
          "type": "Type",
          "_label": "Primary Name"
        }
      ],
      "content": "Forum Romanum"
    }
  ],
  "produced_by": {
    "type": "Production",
    "attributed_by": [
      {
        "type": "AttributeAssignment",
        "classified_as": [
          {
            "id": "http://vocab.getty.edu/aat/300404272",
            "type": "Type",
            "_label": "Possibly By"
          }
        ],
        "assigned": [
          {
            "type": "Production",
            "carried_out_by": [
              {
                "id": "https://linked.art/example/person/corrodi",
                "type": "Person",
                "_label": "Salomon Corrodi"
              }
            ]
          }
        ],
        "assigned_property": "part"
      }
    ]
  }
}

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(object/forum/1) class O1 object; O1-- type -->O1_0[HumanMadeObject] class O1_0 classstyle; O1-- _label -->O1_4("''Forum Romanum''") 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( _ ) class O4 name; O4-- type -->O4_0[Name] class O4_0 classstyle; O5(aat:300404670) class O5 type; O5-- type -->O5_0[Type] class O5_0 classstyle; O5-- _label -->O5_3("''Primary Name''") class O5_3 literal; O4-- classified_as -->O5 O4-- content -->O4_3("''Forum Romanum''") class O4_3 literal; O1-- identified_by -->O4 O6( _ ) class O6 event; O6-- type -->O6_0[Production] class O6_0 classstyle; O7( _ ) class O7 event; O7-- type -->O7_0[AttributeAssignment] class O7_0 classstyle; O8(aat:300404272) class O8 type; O8-- type -->O8_0[Type] class O8_0 classstyle; O8-- _label -->O8_3("''Possibly By''") class O8_3 literal; O7-- classified_as -->O8 O9( _ ) class O9 event; O9-- type -->O9_0[Production] class O9_0 classstyle; O10(person/corrodi) class O10 actor; O10-- type -->O10_0[Person] class O10_0 classstyle; O10-- _label -->O10_3("''Salomon Corrodi''") class O10_3 literal; O9-- carried_out_by -->O10 O7-- assigned -->O9 O7-- assigned_property -->O7_4("''part''") class O7_4 literal; O6-- attributed_by -->O7 O1-- produced_by -->O6
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

Context-Specific Assignments

Some assertions are only true within a specific context, and the most commonly known case of this is descriptions, names and identifiers assigned for a particular exhibition. In order to record these context-specific assertions, the attributed_by pattern should be used, even for Names and Identifiers that might otherwise have the assigned_by pattern, as this keeps the Identifer separated from the primary record.

We use the caused_by relationship to connect the attribution to the exhibition.

Example:

Spring was exhibited at the National Gallery of Art's exhibition "Post-Impressionism: Cross-Currents in European and American Painting" in 1980, and was assigned a exhibition specific identifier (called a "dexid").

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/object/spring/31",
  "type": "HumanMadeObject",
  "_label": "Spring",
  "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"
        }
      ]
    }
  ],
  "identified_by": [
    {
      "type": "Name",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300404670",
          "type": "Type",
          "_label": "Primary Name"
        }
      ],
      "content": "Jeanne (Spring)"
    }
  ],
  "attributed_by": [
    {
      "type": "AttributeAssignment",
      "carried_out_by": [
        {
          "id": "https://linked.art/example/group/nga",
          "type": "Group",
          "_label": "National Gallery of Art"
        }
      ],
      "assigned": [
        {
          "type": "Identifier",
          "classified_as": [
            {
              "id": "http://vocab.getty.edu/aat/300445023",
              "type": "Type",
              "_label": "Entry Numbers"
            }
          ],
          "content": "2497-12"
        }
      ],
      "assigned_property": "identified_by",
      "caused_by": [
        {
          "id": "https://linked.art/example/event/post_impressionism",
          "type": "Activity",
          "_label": "Post-Impressionism Exhibition"
        }
      ]
    }
  ]
}

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(object/spring/31) class O1 object; O1-- type -->O1_0[HumanMadeObject] class O1_0 classstyle; O1-- _label -->O1_4("''Spring''") 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( _ ) class O4 name; O4-- type -->O4_0[Name] class O4_0 classstyle; O5(aat:300404670) class O5 type; O5-- type -->O5_0[Type] class O5_0 classstyle; O5-- _label -->O5_3("''Primary Name''") class O5_3 literal; O4-- classified_as -->O5 O4-- content -->O4_3("''Jeanne (Spring)''") class O4_3 literal; O1-- identified_by -->O4 O6( _ ) class O6 event; O6-- type -->O6_0[AttributeAssignment] class O6_0 classstyle; O7(group/nga) class O7 actor; O7-- type -->O7_0[Group] class O7_0 classstyle; O7-- _label -->O7_3("''National Gallery of Art''") class O7_3 literal; O6-- carried_out_by -->O7 O8( _ ) class O8 name; O8-- type -->O8_0[Identifier] class O8_0 classstyle; O9(aat:300445023) class O9 type; O9-- type -->O9_0[Type] class O9_0 classstyle; O9-- _label -->O9_3("''Entry Numbers''") class O9_3 literal; O8-- classified_as -->O9 O8-- content -->O8_3("''2497-12''") class O8_3 literal; O6-- assigned -->O8 O6-- assigned_property -->O6_4("''identified_by''") class O6_4 literal; O10(event/post_impressionism) class O10 event; O10-- type -->O10_0[Activity] class O10_0 classstyle; O10-- _label -->O10_3("''Post-Impressionism Exhibition''") class O10_3 literal; O6-- caused_by -->O10 O1-- attributed_by -->O6
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

Relationships

Another use of AttributeAssignment is to capture relationships between entities when the nature of that relationship is unknown. This will often appear in human-oriented user interfaces with a label like "Related Place" or "Related Person". The use of AttributeAssignment in this way should be as a last resort for when there isn't any way to be more specific that just "there is a relationship". A scenario in which this might be useful and justified is to explicitly connect "related" objects in a collection, where the related-ness is via some computed similarity measure. Equally, the underlying data format might not be explicit as to the relationship between the entities, and the attribute assignment pattern is as close as can be expressed.

This would also cover the use case of "representative objects" for an artist, or other similar "highlight" reels. There isn't a particular relationship between the artist and the object that isn't already covered by the model, but it's desirable to have some predetermined choices made rather than allowing a system to randomly pick which objects to use. These could have a reference to http://vocab.getty.edu/aat/300028875 in classified_as on the AttributeAssignment to distinguish them.

Example:

The Night Watch is related to another object in the Rijksmuseum collection "Nachtwacht", but the relationship is not captured specifically.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/object/nightwatch/57",
  "type": "HumanMadeObject",
  "_label": "The Night Watch",
  "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"
        }
      ]
    }
  ],
  "identified_by": [
    {
      "type": "Name",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300404670",
          "type": "Type",
          "_label": "Primary Name"
        }
      ],
      "content": "The Night Watch"
    }
  ],
  "attributed_by": [
    {
      "type": "AttributeAssignment",
      "identified_by": [
        {
          "type": "Name",
          "classified_as": [
            {
              "id": "http://vocab.getty.edu/aat/300404669",
              "type": "Type",
              "_label": "Display Title"
            }
          ],
          "content": "Related Object"
        }
      ],
      "assigned": [
        {
          "id": "https://linked.art/example/object/rppob-28-106",
          "type": "HumanMadeObject",
          "_label": "Nachtwacht"
        }
      ]
    }
  ]
}

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(object/nightwatch/57) class O1 object; O1-- type -->O1_0[HumanMadeObject] class O1_0 classstyle; O1-- _label -->O1_4("''The Night Watch''") 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( _ ) class O4 name; O4-- type -->O4_0[Name] class O4_0 classstyle; O5(aat:300404670) class O5 type; O5-- type -->O5_0[Type] class O5_0 classstyle; O5-- _label -->O5_3("''Primary Name''") class O5_3 literal; O4-- classified_as -->O5 O4-- content -->O4_3("''The Night Watch''") class O4_3 literal; O1-- identified_by -->O4 O6( _ ) class O6 event; O6-- type -->O6_0[AttributeAssignment] class O6_0 classstyle; O7( _ ) class O7 name; O7-- type -->O7_0[Name] class O7_0 classstyle; O8(aat:300404669) class O8 type; O8-- type -->O8_0[Type] class O8_0 classstyle; O8-- _label -->O8_3("''Display Title''") class O8_3 literal; O7-- classified_as -->O8 O7-- content -->O7_3("''Related Object''") class O7_3 literal; O6-- identified_by -->O7 O9(object/rppob-28-106) class O9 object; O9-- type -->O9_0[HumanMadeObject] class O9_0 classstyle; O9-- _label -->O9_3("''Nachtwacht''") class O9_3 literal; O6-- assigned -->O9 O1-- attributed_by -->O6
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

Unmodeled Relationships

Conversely, perhaps the relationship is known but there's no way to describe it in the model. For example the student/teacher relationship between people is a social construct that can't be captured easily, but is still of importance for art history. There are far too many such relationships, especially in the social arena, to model them all separately or create extension properties for each, and thus an AttributeAssignment for the relationship is the approach taken. Finding appropriate properties to use to describe the relationship, either as classified_as or assigned_property is up to the implementer. Giving a display name with identified_by on the AttributeAssignment is recommended.

Social Constructs as Groups

Note that many social relationships could be modeled as Joining and Leaving a Group with a particular role, via classified_as on the Joining activity. For example, the Group represents the social bond between the teacher and the student, the teacher joins the group as the teacher, the student as the student. This is possible, but introduces a lot of additional overhead with identity for the "Group" of the relationship.

Example:

Ferdinand Bol was a student of Rembrandt.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/person/bol/1",
  "type": "Person",
  "_label": "Ferdinand Bol",
  "identified_by": [
    {
      "type": "Name",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300404670",
          "type": "Type",
          "_label": "Primary Name"
        }
      ],
      "content": "Ferdinand Bol"
    }
  ],
  "attributed_by": [
    {
      "type": "AttributeAssignment",
      "identified_by": [
        {
          "type": "Name",
          "classified_as": [
            {
              "id": "http://vocab.getty.edu/aat/300404669",
              "type": "Type",
              "_label": "Display Title"
            }
          ],
          "content": "Student Of"
        }
      ],
      "assigned": [
        {
          "id": "https://linked.art/example/person/rembrandt",
          "type": "Person",
          "_label": "Rembrandt"
        }
      ]
    }
  ]
}

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(person/bol/1) class O1 actor; O1-- type -->O1_0[Person] class O1_0 classstyle; O1-- _label -->O1_4("''Ferdinand Bol''") class O1_4 literal; O2( _ ) class O2 name; O2-- type -->O2_0[Name] class O2_0 classstyle; O3(aat:300404670) class O3 type; O3-- type -->O3_0[Type] class O3_0 classstyle; O3-- _label -->O3_3("''Primary Name''") class O3_3 literal; O2-- classified_as -->O3 O2-- content -->O2_3("''Ferdinand Bol''") class O2_3 literal; O1-- identified_by -->O2 O4( _ ) class O4 event; O4-- type -->O4_0[AttributeAssignment] class O4_0 classstyle; O5( _ ) class O5 name; O5-- type -->O5_0[Name] class O5_0 classstyle; O6(aat:300404669) class O6 type; O6-- type -->O6_0[Type] class O6_0 classstyle; O6-- _label -->O6_3("''Display Title''") class O6_3 literal; O5-- classified_as -->O6 O5-- content -->O5_3("''Student Of''") class O5_3 literal; O4-- identified_by -->O5 O7(person/rembrandt) class O7 actor; O7-- type -->O7_0[Person] class O7_0 classstyle; O7-- _label -->O7_3("''Rembrandt''") class O7_3 literal; O4-- assigned -->O7 O1-- attributed_by -->O4
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)