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

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.

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 Name to an Actor with the identified_by relationship. 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:

Manet called his painting "Le Printemps", "Spring" in French.

{
  "@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": "1881-01-01T00:00:00Z",
        "end_of_the_end": "1881-12-31T23:59:59Z"
      },
      "carried_out_by": [
        {
          "id": "https://linked.art/example/person/manet",
          "type": "Person",
          "_label": "Manet"
        }
      ],
      "assigned_property": "identified_by",
      "assigned": [
        {
          "type": "Name",
          "content": "Le Printemps"
        }
      ]
    }
  ]
}

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("''1881-01-01T00:00:00Z''") class O5_2 literal; O5-- end_of_the_end -->O5_3("''1881-12-31T23:59:59Z''") class O5_3 literal; O4-- timespan -->O5 O6(person/manet) class O6 actor; O6-- type -->O6_0[Person] class O6_0 classstyle; O6-- _label -->O6_3("''Manet''") class O6_3 literal; O4-- carried_out_by -->O6 O4-- assigned_property -->O4_4("''identified_by''") class O4_4 literal; O7( _ ) class O7 name; O7-- type -->O7_0[Name] class O7_0 classstyle; O7-- content -->O7_2("''Le Printemps''") class O7_2 literal; O4-- assigned -->O7 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)

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 https://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/17",
  "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/17) 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)