Collections and Sets

Introduction

There are many use cases for grouping resources together, often of the same class but sometimes of varying types. These use cases are exemplified in the sections below, and range from the set of objects in an auction lot, to dealer inventories and museum collections, exhibitions, a set of related concepts, or the set of people that share a common feature such as gender or nationality.

In order to cover all of the use cases with a consistent pattern, we introduce a new Set class from outside of CIDOC-CRM. This avoids issues with sets of resources with different types, and the semantics of the identity of objects and collections. If an equivalent class were to be added into the core CIDOC-CRM ontology in the future, a new major version of the specification would likely change to use it.

Features

Sets are conceptual groupings, rather than physical ones. The set of objects in a virtual exhibition or simply the set of a person's favorite objects never change their physical state by being part of the Set or not. They are, thus, created by a Creation, not by a Production.

Like any core resource, instances of Set must have an id and type, are likely to have additional classifications, and can have identifiers and names. They can have statements made about them, and have member resources. These member resources are included via the member_of on the included resource with a value of the URI of the Set. Member resources should be only those which can stand alone as records such as HumanMadeObject or VisualItem, rather than classes which are used within records such as TimeSpan or Name.

Note that this means that the publisher of the information about the member needs to include the member_of property to the Set instance. This is not a problem in the situation where both are managed in the same environment, nor a challenge conceptually in the model (there is the inverse member property), however the current API does not allow for sets to refer to their members.

Example:

The set of objects in an exhibition.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/set/exhset/1",
  "type": "Set",
  "_label": "Exhibition objects",
  "identified_by": [
    {
      "type": "Name",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300404670",
          "type": "Type",
          "_label": "Primary Name"
        }
      ],
      "content": "Objects in Manet and Modern Beauty"
    }
  ],
  "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"
            }
          ]
        }
      ],
      "content": "Objects in the exhibition Manet and Modern Beauty at the Art Institute of Chicago and the Getty Museum"
    }
  ],
  "created_by": {
    "type": "Creation",
    "timespan": {
      "type": "TimeSpan",
      "begin_of_the_begin": "2019-05-01",
      "end_of_the_end": "2019-05-01"
    }
  }
}

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(set/exhset/1) class O1 infoobj; O1-- type -->O1_0[Set] class O1_0 classstyle; O1-- _label -->O1_4("''Exhibition objects''") 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("''Objects in Manet and Modern Beauty''") class O2_3 literal; O1-- identified_by -->O2 O4( _ ) class O4 infoobj; O4-- type -->O4_0[LinguisticObject] class O4_0 classstyle; O5(aat:300435416) class O5 type; O5-- type -->O5_0[Type] class O5_0 classstyle; O5-- _label -->O5_3("''Description''") class O5_3 literal; O6(aat:300418049) class O6 type; O6-- type -->O6_0[Type] class O6_0 classstyle; O6-- _label -->O6_3("''Brief Text''") class O6_3 literal; O5-- classified_as -->O6 O4-- classified_as -->O5 O4-- content -->O4_3("''Objects in the exhibition Manet and Modern Beauty at the Art Institute of Chicago and the Getty Museum''") class O4_3 literal; O1-- referred_to_by -->O4 O7( _ ) class O7 event; O7-- type -->O7_0[Creation] class O7_0 classstyle; O8( _ ) class O8 timespan; O8-- type -->O8_0[TimeSpan] class O8_0 classstyle; O8-- begin_of_the_begin -->O8_2("''2019-05-01''") class O8_2 literal; O8-- end_of_the_end -->O8_3("''2019-05-01''") class O8_3 literal; O7-- timespan -->O8 O1-- created_by -->O7
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

An object in that set.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/object/spring/13",
  "type": "HumanMadeObject",
  "_label": "Jeanne (Spring) by Manet",
  "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",
      "content": "Jeanne (Spring)"
    }
  ],
  "member_of": [
    {
      "id": "https://linked.art/example/set/exhset",
      "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(object/spring/13) class O1 object; O1-- type -->O1_0[HumanMadeObject] class O1_0 classstyle; O1-- _label -->O1_4("''Jeanne (Spring) by Manet''") 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; O4-- content -->O4_2("''Jeanne (Spring)''") class O4_2 literal; O1-- identified_by -->O4 O5(set/exhset) class O5 infoobj; O5-- type -->O5_0[Set] class O5_0 classstyle; O1-- member_of -->O5
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

Prototypical Members

The information about any particular member of a set might not be available, however it might be known what sort of entities were members of the set. For example, objects in a particular set might have been created by the same person, be classified as the same type, or have had the same owner. Works might be written in the same language, be about the same subject, and so on. As any entity can be a member of a set, this gives a lot of freedom to describe the sorts of things that have been grouped together. This is frequently true for Archives, described below, but also can be valuable for making the rationale for the set be more apparent, such as that the objects curated by a Paintings department are (generally) paintings.

The description of prototype member is embedded within the set as the value of the members_exemplified_by property. The description should be one of the main classes in the specification, such as a HumanMadeObject or an Activity, and should not be classes that are only used within records such as Production or Name.

This is not the 'highlight' members of the set, such as the famous pieces in a collection of objects. For that, use the Related Objects pattern. Using this approach does not imply that every member of the set has all of the features of the prototypical member, however care should be taken to not include information that is not generally true.

Example:

The objects exhibited were typically (but not exclusively) paintings by Manet.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/set/exhset/2",
  "type": "Set",
  "_label": "Exhibition objects",
  "members_exemplified_by": [
    {
      "type": "HumanMadeObject",
      "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"
            }
          ]
        }
      ],
      "produced_by": {
        "type": "Production",
        "carried_out_by": [
          {
            "id": "http://vocab.getty.edu/ulan/500010363",
            "type": "Person",
            "_label": "Manet"
          }
        ]
      }
    }
  ]
}

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(set/exhset/2) class O1 infoobj; O1-- type -->O1_0[Set] class O1_0 classstyle; O1-- _label -->O1_4("''Exhibition objects''") class O1_4 literal; O2( _ ) class O2 object; O2-- type -->O2_0[HumanMadeObject] class O2_0 classstyle; O3(aat:300033618) class O3 type; O3-- type -->O3_0[Type] class O3_0 classstyle; O3-- _label -->O3_3("''Painting''") class O3_3 literal; O4(aat:300435443) class O4 type; O4-- type -->O4_0[Type] class O4_0 classstyle; O4-- _label -->O4_3("''Type of Work''") class O4_3 literal; O3-- classified_as -->O4 O2-- classified_as -->O3 O5( _ ) class O5 event; O5-- type -->O5_0[Production] class O5_0 classstyle; O6(ulan:500010363) class O6 actor; O6-- type -->O6_0[Person] class O6_0 classstyle; O6-- _label -->O6_3("''Manet''") class O6_3 literal; O5-- carried_out_by -->O6 O2-- produced_by -->O5 O1-- members_exemplified_by -->O2
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

Collections of Objects

Sets can be used to describe the set of objects that make up a curated collection. This is not necessarily the same as the set of objects that the institution owns, as there could be objects which are looked after but owned by some other organization or individual, nor the set of objects that the institution has custody over, as objects being loaned to other organizations for exhibitions are still part of the conceptual collection of objects. The details of the relationship between the object and the institution are recorded on the object, and the Set provides identity for the collection itself, independently of the member objects. Objects can be part of multiple collections at the same time -- the private owner's personal collection and the museum's public collection. So while the majority of objects are both owned by and in the custody of the organization, this is not certain and should not be inferred.

Institutions are often split up into departments, each of which will manage a part of the overall collection. These parts of the collection are managed as separate Sets, rather than a tree structure within a single resource. It is useful to be able to describe the properties of the object in each of the contexts, and allow a separate structure of inventory management from organizational chart. The department might also conceive of further sets of their objects, without any direct correspondence and likely with the same object being part of more than one set at the same time.

Example:

The full collection of the Rijksmuseum.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/set/rijks_objects/1",
  "type": "Set",
  "_label": "Collection of the Rijksmuseum",
  "classified_as": [
    {
      "id": "http://vocab.getty.edu/aat/300025976",
      "type": "Type",
      "_label": "Collection"
    }
  ],
  "identified_by": [
    {
      "type": "Name",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300404670",
          "type": "Type",
          "_label": "Primary Name"
        }
      ],
      "content": "Collection of the Rijksmuseum"
    }
  ]
}

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(set/rijks_objects/1) class O1 infoobj; O1-- type -->O1_0[Set] class O1_0 classstyle; O1-- _label -->O1_4("''Collection of the Rijksmuseum''") class O1_4 literal; O2(aat:300025976) class O2 type; O2-- type -->O2_0[Type] class O2_0 classstyle; O2-- _label -->O2_3("''Collection''") class O2_3 literal; O1-- classified_as -->O2 O3( _ ) class O3 name; O3-- type -->O3_0[Name] class O3_0 classstyle; O4(aat:300404670) class O4 type; O4-- type -->O4_0[Type] class O4_0 classstyle; O4-- _label -->O4_3("''Primary Name''") class O4_3 literal; O3-- classified_as -->O4 O3-- content -->O3_3("''Collection of the Rijksmuseum''") class O3_3 literal; O1-- identified_by -->O3
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

The paintings of the Rijksmuseum, as curated by the Paintings department.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/set/rijks_paintings/1",
  "type": "Set",
  "_label": "Paintings of the Rijksmuseum",
  "classified_as": [
    {
      "id": "http://vocab.getty.edu/aat/300025976",
      "type": "Type",
      "_label": "Collection"
    }
  ],
  "identified_by": [
    {
      "type": "Name",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300404670",
          "type": "Type",
          "_label": "Primary Name"
        }
      ],
      "content": "Paintings of the Rijksmuseum"
    }
  ],
  "member_of": [
    {
      "id": "https://linked.art/example/set/rijks_objects",
      "type": "Set",
      "_label": "Collection of the Rijksmuseum"
    }
  ],
  "used_for": [
    {
      "type": "Activity",
      "classified_as": [
        {
          "id": "http://vocab.getty.edu/aat/300054277",
          "type": "Type",
          "_label": "Curating"
        }
      ],
      "carried_out_by": [
        {
          "id": "https://linked.art/example/group/rijks_paintings_dept",
          "type": "Group",
          "_label": "Paintings Department"
        }
      ]
    }
  ]
}

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(set/rijks_paintings/1) class O1 infoobj; O1-- type -->O1_0[Set] class O1_0 classstyle; O1-- _label -->O1_4("''Paintings of the Rijksmuseum''") class O1_4 literal; O2(aat:300025976) class O2 type; O2-- type -->O2_0[Type] class O2_0 classstyle; O2-- _label -->O2_3("''Collection''") class O2_3 literal; O1-- classified_as -->O2 O3( _ ) class O3 name; O3-- type -->O3_0[Name] class O3_0 classstyle; O4(aat:300404670) class O4 type; O4-- type -->O4_0[Type] class O4_0 classstyle; O4-- _label -->O4_3("''Primary Name''") class O4_3 literal; O3-- classified_as -->O4 O3-- content -->O3_3("''Paintings of the Rijksmuseum''") class O3_3 literal; O1-- identified_by -->O3 O5(set/rijks_objects) class O5 infoobj; O5-- type -->O5_0[Set] class O5_0 classstyle; O5-- _label -->O5_3("''Collection of the Rijksmuseum''") class O5_3 literal; O1-- member_of -->O5 O6( _ ) class O6 event; O6-- type -->O6_0[Activity] class O6_0 classstyle; O7(aat:300054277) class O7 type; O7-- type -->O7_0[Type] class O7_0 classstyle; O7-- _label -->O7_3("''Curating''") class O7_3 literal; O6-- classified_as -->O7 O8(group/rijks_paintings_dept) class O8 actor; O8-- type -->O8_0[Group] class O8_0 classstyle; O8-- _label -->O8_3("''Paintings Department''") class O8_3 literal; O6-- carried_out_by -->O8 O1-- used_for -->O6
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

The Night Watch is a member of the paintings set.

{
  "@context": "https://linked.art/ns/v1/linked-art.json",
  "id": "https://linked.art/example/object/nightwatch/16",
  "type": "HumanMadeObject",
  "_label": "Night Watch by Rembrandt",
  "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"
    }
  ],
  "member_of": [
    {
      "id": "https://linked.art/example/set/rijks_paintings",
      "type": "Set",
      "_label": "Paintings of the Rijksmuseum"
    }
  ]
}

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/16) class O1 object; O1-- type -->O1_0[HumanMadeObject] class O1_0 classstyle; O1-- _label -->O1_4("''Night Watch by Rembrandt''") 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(set/rijks_paintings) class O6 infoobj; O6-- type -->O6_0[Set] class O6_0 classstyle; O6-- _label -->O6_3("''Paintings of the Rijksmuseum''") class O6_3 literal; O1-- member_of -->O6
Other Representations: JSON-LD (raw) | JSON-LD (playground) | Turtle (raw) | Turtle (styled)

Other Use Cases

Sets of People

A Group is a set of other Groups and Persons which can take action. This means that the features of Sets are also available for use with Groups, such as members_exemplified_by.

Warning

That Set is a new super-class of Group is only true when using the Linked Art ontology and not true in the CIDOC-CRM base ontology, as Linked Art introduces the notion of the Set.

Archives

Set is used extensively in the model for Archives.

Auction Lots

The set of objects in an auction lot are also modeled as a Set. These are not curated in the same way as a museum collection, and are not necessarily ever brought together physically, but are being put up for auction as a single entity. Similarly, the set of objects used in an exhibition is also modeled as a Set.

Collection Specific Information

Information about a resource that is specific to the context of the set that they are part of, such as the accession number of an object for that particular collection, can be described using the AttributeAssignment patterns described in the page about assertions.