Linked Art API: HAL
Last refreshed: 2026-07-06
Source: Linked Art API 1.0 HAL and Linked Art relation documentation, published by the Linked Art Editorial Board under CC BY 4.0. These notes are derivative implementation guidance; upstream Linked Art remains authoritative.
Purpose
Linked Art records may include non-semantic API metadata in a `_links` object using JSON Hypertext Application Language, or HAL. These links help clients discover the current record, API/model versions, alternate representations, Change Discovery collections, and related search result pages without adding those navigation facts to the semantic RDF graph.
This distinction matters in Meta Museum:
- Linked Art graph assertions stay in the JSON-LD record.
- Navigation and protocol affordances stay in `_links`.
- Clients can follow links instead of inventing URI patterns or reverse relationships.
- If a JSON-LD record is converted to RDF and reserialized, HAL metadata may disappear; code must not treat `_links` as semantic evidence.
Core HAL Shape
A minimal HAL block exposes `self`:
{
"_links": {
"self": {
"href": "https://example.org/linked_art/objects/1234"
}
}
}
Linked Art relation links use the `la` CURIE namespace:
{
"_links": {
"self": {
"href": "https://example.org/linked_art/objects/1234"
},
"curies": [
{
"name": "la",
"href": "https://linked.art/api/rels/1/{rel}",
"templated": true
}
]
}
}
Local extensions may add their own CURIEs, but Linked Art relation names should remain stable and documented.
Version Links
Linked Art defines three versioning links:
- `la:modelVersion`: required. Points to the Linked Art model version used by the record.
- `la:apiVersion`: required. Points to the Linked Art API version used by the response.
- `la:localVersion`: optional. Points to local extension documentation.
The official pattern uses link objects with a human-readable documentation `href` and a `name` in the form `v{major}.{minor}.{patch}`. Clients can compare major/minor versions to decide how much of the record they can process. Minor releases remain backwards compatible within the same major version; patch releases do not introduce new functionality.
Alternate Representations And Collections
HAL `alternate` links can point from JSON-LD to other representations of the same information:
- HTML pages with `type: "text/html"`.
- Turtle with `type: "text/turtle"`.
- Other machine or human formats with their correct media type.
The HAL `collection` link can point to a IIIF Change Discovery or similar synchronization collection so harvesters can discover dataset-level change surfaces from an individual record.
Search Relation Links
Linked Art uses HAL heavily to advertise related searches. Instead of duplicating inverse relationships into every entity record, a publisher can expose a named relation link whose target returns a Search API `OrderedCollectionPage`.
Example relation captured from the Linked Art relation docs:
`activityUsedObject`
- Relation URL: `https://linked.art/api/rels/1/activityusedobject/`
- Class given: `HumanMadeObject`
- Returns class: `Activity`
- Relationship: activities that used the object
- Example intent: from the Night Watch object record, follow the relation to activities such as conservation work that used the painting.
The target should return activities, not object records, and should preserve the underlying Linked Art relationship semantics instead of presenting a generic "related items" bucket.
`conceptInfluencedByObject`
- Relation URL: `https://linked.art/api/rels/1/conceptinfluencedbyobject/`
- Model basis: Creation and Influences
- Class given: `HumanMadeObject`
- Returns class: `Concept`
- Relationship: concepts that were influenced by the object
- Example intent: from the Night Watch object record, follow the relation to concept records such as the reception of the Night Watch in the 19th century.
The target should return concept records influenced by the object, not generic subjects, classifications, or records merely associated with the object. This relation belongs to the Linked Art HAL/Search API layer; the semantic evidence should remain in normal Linked Art concept creation/influence fields.
`objectPartOfObject`
- Relation URL: `https://linked.art/api/rels/1/objectpartofobject/`
- Model basis: Physical Object Parts
- Class given: `HumanMadeObject`
- Returns class: `HumanMadeObject`
- Relationship: objects that are part of the object
- Example intent: from the Night Watch object record, follow the relation to object records such as the frame of the Night Watch.
The target should return physical object records that are structurally part of the current object. This is an inverse-discovery relation over explicit part/whole object semantics; it should not be broadened to any object that merely depicts, carries, references, or is associated with the current object.
`objectProductionInfluencedByObject`
- Relation URL: `https://linked.art/api/rels/1/objectproductioninfluencedbyobject/`
- Model basis: Inspirations, Studies, or Copies
- Class given: `HumanMadeObject`
- Returns class: `HumanMadeObject`
- Relationship: objects whose production was influenced by the object
- Example intent: from the record for a painting that was copied, follow the relation to object records for copies whose production was influenced by the original.
The target should return objects through their production activity's influence relationship, not every object that is visually similar, a copy candidate, or linked by a generic related-object assertion. This relation should be backed by explicit `produced_by.influenced_by` evidence or an equivalent Linked Art production-influence path.
`groupFoundedByAgent`
- Relation URL: `https://linked.art/api/rels/1/groupfoundedbyagent/`
- Class given: `Agent`
- Returns class: `Group`
- Relationship: groups that were founded by the person or group
- SPARQL basis: the returned group `crm:P95i_was_formed_by` a formation activity, and that formation activity `crm:P14_carried_out_by` the current agent.
- Example intent: from the record for Katherine Dreier, Man Ray, or Marcel Duchamp, follow the relation to group records such as Societe Anonyme.
The target should return groups whose `formed_by` activity was carried out by the current person or group. It should not return every group the agent joined, funded, curated, or influenced unless the formation activity itself carries the agent as `carried_out_by`.
`objectCuratedByAgent`
- Relation URL: `https://linked.art/api/rels/1/objectcuratedbyagent/`
- Class given: `Agent`
- Returns class: `HumanMadeObject`
- Relationship: objects curated, looked after, or otherwise in the custody of the person or group
- SPARQL basis: either the object is a member of a collection that was used for a curating activity carried out by the current agent, or the object has the current agent as current keeper.
- Example intent: from the record for the Paintings Department of the Rijksmuseum, follow the relation to object records such as The Night Watch.
The target may use either documented branch, but each returned object should be backed by explicit curation/custody evidence. It should not return objects merely associated with an agent through production, ownership, exhibition, subject matter, or generic related-record assertions.
`objectEncounteredByAgent`
- Relation URL: `https://linked.art/api/rels/1/objectencounteredbyagent/`
- Class given: `Agent`
- Returns class: `HumanMadeObject`
- Relationship: objects that were discovered or encountered by the person or group
- SPARQL basis: the returned object was encountered at an encounter activity, and that encounter or one of its parts was carried out by the current agent.
- Example intent: from the record for O.C. Marsh, follow the relation to object records such as the Torosaurus holotype.
The target should return objects through explicit `Encounter` evidence, including nested encounter parts where appropriate. It should not treat any acquisition, custody, excavation note, or place association as an encounter unless the Linked Art record actually models an encounter/discovery activity.
`objectOwnedByAgent`
- Relation URL: `https://linked.art/api/rels/1/objectownedbyagent/`
- Class given: `Agent`
- Returns class: `HumanMadeObject`
- Relationship: objects currently owned by the person or group
- SPARQL basis: the returned object is a `crm:E22_Human-Made_Object` with `crm:P52_has_current_owner` set to the current agent.
- Example intent: from the record for the Rijksmuseum, follow the relation to object records such as The Night Watch.
The target should return objects through explicit current ownership evidence. It should not include objects merely curated, kept, loaned, formerly owned, transferred through, or associated with the agent unless the record asserts the current owner relationship.
`objectProducedByAgent`
- Relation URL: `https://linked.art/api/rels/1/objectproducedbyagent/`
- Class given: `Agent`
- Returns class: `HumanMadeObject`
- Relationship: objects produced, in whole or in part, by the person or group
- SPARQL basis: the returned object was produced by a production activity, and that production or one of its parts was carried out by the current agent.
- Example intent: from the record for Rembrandt, follow the relation to object records such as The Night Watch.
The target should return objects through explicit production evidence, including production parts where appropriate. It should not return objects merely owned, curated, depicted, influenced by, or attributed to the agent unless the production activity itself carries the agent as `carried_out_by`.
`objectProductionInfluencedByAgent`
- Relation URL: `https://linked.art/api/rels/1/objectproductioninfluencedbyagent/`
- Class given: `Agent`
- Returns class: `HumanMadeObject`
- Relationship: objects whose production was influenced by the person or group
- SPARQL basis: the returned object was produced by a production activity, and that production activity `crm:P15_was_influenced_by` the current agent.
- Example intent: from the record for Albert Bierstadt, follow the relation to prints of his works that were influenced by him but not necessarily produced by him.
The target should return objects through explicit production-influence evidence. It should not return objects produced by the agent unless the production also records the agent as an influence, and it should not infer influence from visual similarity, subject matter, attribution, ownership, or generic related-record assertions.
`setCreatedByAgent`
- Relation URL: `https://linked.art/api/rels/1/setcreatedbyagent/`
- Class given: `Agent`
- Returns class: `Set`
- Relationship: sets or collections created, in whole or in part, by the person or group
- SPARQL basis: the returned set was created by a creation activity, and that creation activity `crm:P15_was_influenced_by` the current agent.
- Example intent: from the record for O.C. Marsh, follow the relation to set records such as his archive.
The target should return set or collection records through explicit creation/influence evidence. Because the supplied relation pattern uses influence on the creation activity, implementation tests should preserve that path and not silently replace it with generic membership, ownership, custody, or untyped archive associations.
`workAboutAgent`
- Relation URL: `https://linked.art/api/rels/1/workaboutagent/`
- Class given: `Agent`
- Returns class: `Work`
- Relationship: works that are about or have a subject of the person or group
- SPARQL basis: the returned work `crm:P129_is_about` the current agent.
- Example intent: from the record for Abraham Lincoln, follow the relation to work records such as We are Lincoln Men: Abraham Lincoln and his Friends.
The target should return intellectual work records whose subject/aboutness explicitly references the current person or group. It should not return works authored, owned, published, influenced by, or merely associated with the agent unless the work's `about` relationship itself points to that agent.
`workAboutOrRepresentsAgent`
- Relation URL: `https://linked.art/api/rels/1/workaboutorrepresentsagent/`
- Class given: `Agent`
- Returns class: `Work`
- Relationship: works that are either about or depict the person or group
- SPARQL basis: the returned work either `crm:P138_represents` the current agent or `crm:P129_is_about` the current agent.
- Example intent: from the record for John Trumbull, follow the relation to visual items and texts that depict him, such as a bibliographic record or a self-portrait.
The target should return work records through explicit aboutness or representation evidence. It should preserve the two branches separately in implementation logic so a textual subject match and a visual depiction match are both valid, while authorship, ownership, influence, publication, and generic association remain out of scope unless the work also uses `about` or `represents` for the current agent.
`workCreatedByAgent`
- Relation URL: `https://linked.art/api/rels/1/workcreatedbyagent/`
- Class given: `Agent`
- Returns class: `Work`
- Relationship: works that were created, in whole or in part, by the person or group
- SPARQL basis: the returned work was created by a creation activity, and that creation or one of its parts was `crm:P14_carried_out_by` the current agent.
- Example intent: from the record for Andre Chastel, follow the relation to work records such as The Vatican Frescoes of Michelangelo.
The target should return work records through explicit creation evidence, including nested creation parts where appropriate. It should not return works merely about, representing, owned by, published by, influenced by, or associated with the agent unless the creation activity itself carries the agent as `carried_out_by`.
`workPublishedByAgent`
- Relation URL: `https://linked.art/api/rels/1/workpublishedbyagent/`
- Class given: `Agent`
- Returns class: `Work`
- Relationship: works that were published by the person or group
- SPARQL basis: the returned work `crm:P16i_was_used_for` a publication activity, and that publication activity `crm:P14_carried_out_by` the current agent.
- Example intent: from the record for Bloomsbury Publishing, follow the relation to work records such as Alias Grace.
The target should return work records through explicit publication/use evidence. It should not return works merely created by, about, representing, owned by, influenced by, distributed by, or generically associated with the agent unless the modeled publication activity itself carries the agent as `carried_out_by`.
`workRepresentsAgent`
- Relation URL: `https://linked.art/api/rels/1/workrepresentsagent/`
- Class given: `Agent`
- Returns class: `Work`
- Relationship: visual works that represent or depict the person or group
- SPARQL basis: the returned work `crm:P138_represents` the current agent.
- Example intent: from the record for Sarah Hope Harvey Trumbull, follow the relation to visual work records such as Sarah Trumbull with a Spaniel.
The target should return visual work records through explicit representation evidence. It should not return textual works merely about the agent, works created by or published by the agent, or generic associations unless the work's `represents` relationship itself points to the current person or group.
`activityTookPlaceAtPlace`
- Relation URL: `https://linked.art/api/rels/1/activitytookplaceatplace/`
- Model basis: Events and Activities
- Class given: `Place`
- Returns class: `Event`, `Activity`
- Relationship: activities and events that took place at the place
- SPARQL basis: the returned activity or event `took_place_at` the current place.
- Example intent: from the record for New Haven, follow the relation to activity records such as the exhibition activity Life, Liberty and the Pursuit of Happiness.
The target should return events and activities through explicit place evidence. It should not return objects currently located at the place, actors resident there, works about the place, or activities merely associated with a venue unless the event/activity record itself uses `took_place_at` for the current place.
`agentActiveAtPlace`
- Relation URL: `https://linked.art/api/rels/1/agentactiveatplace/`
- Model basis: Active Dates
- Class given: `Place`
- Returns class: `Agent`
- Relationship: people or groups who were active at the place
- SPARQL basis: the returned person or group has modeled active-at evidence for the current place.
- Example intent: from the record for Harlem, New York, follow the relation to agent records such as A. Philip Randolph.
The target should return people and groups through explicit active-at evidence. It should not return agents merely born, died, resident, employed, exhibited, or associated at the place unless the actor profile models the place as part of the agent's active period or active-place evidence.
Complete Upstream Relation Inventory
The cloned Linked Art upstream mirror includes `linked.art/scripts/hal_links.tsv`, which currently lists 95 non-empty HAL relation-search names. This table captures the full local implementation checklist without treating every relation as live product behavior.
| Category | Relation | Given | Returns | Relationship | Model Path |
|---|---|---|---|---|---|
| activity | `activityCausedByActivity` | Event,Activity | Event,Activity | | `` |
| activity | `activityPartOfActivity` | Temporal | Temporal | | `/model/base/#parts` |
| activity | `conceptCreationCausedByActivity` | Event,Activity | Concept | | `` |
| activity | `conceptInfluencedByActivity` | Temporal | Concept | | `/model/concept/#creation-and-influences` |
| activity | `objectDestructionCausedByActivity` | Event,Activity | HumanMadeObject | | `/model/object/production/#cause-of-destruction` |
| activity | `objectProductionCausedByActivity` | Event,Activity | HumanMadeObject | productionCausedBy | `/model/object/production/#cause-of-production` |
| activity | `personDeathCausedByActivity` | Event,Activity | Person | | `` |
| activity | `setCreationCausedByActivity` | Event,Activity | Set | | `` |
| activity | `workAboutActivity` | Temporal | Work | | `/model/object/aboutness/#subject` |
| activity | `workAboutOrRepresentsActivity` | Temporal | Work | | `/model/object/aboutness/#subject` |
| activity | `workCreationCausedByActivity` | Event,Activity | Work | | `` |
| activity | `workRepresentsActivity` | Temporal | Work | | `/model/object/aboutness/#depiction` |
| agent | `activityCarriedOutByAgent` | Agent | Activity | carriedOutBy | `/model/base/#events-and-activities /model/exhibition/#exhibition-activity` |
| agent | `activityParticipantAgent` | Agent | Event, Activity | participant | `` |
| agent | `agentMemberOfGroup` | Group | Agent | memberOf | `/model/actor/#organization-membership` |
| agent | `conceptInfluencedByAgent` | Agent | Concept | influencedBy | `/model/concept/#creation-and-influences` |
| agent | `groupFoundedByAgent` | Agent | Group | foundedBy | `/model/actor/#birth-and-death-formation-and-dissolution` |
| agent | `objectCuratedByAgent` | Agent | HumanMadeObject | curatedBy | `/model/object/ownership/#custody` |
| agent | `objectEncounteredByAgent` | Agent | HumanMadeObject | encounteredBy | `/model/object/production/#discovery-versus-production` |
| agent | `objectOwnedByAgent` | Agent | HumanMadeObject | ownedBy | `/model/object/ownership/#ownership` |
| agent | `objectProducedByAgent` | Agent | HumanMadeObject | producedBy | `/model/object/production/#base-production-activity` |
| agent | `objectProductionInfluencedByAgent` | Agent | HumanMadeObject | productionInfluencedBy | `/model/object/production/#inspirations-studies-or-copies` |
| agent | `setCreatedByAgent` | Agent | Set | createdBy | `/model/collection/#features` |
| agent | `workAboutAgent` | Agent | Work | about | `/model/object/aboutness/#subject` |
| agent | `workAboutOrRepresentsAgent` | Agent | Work | about / represents | `/model/object/aboutness/#subject` |
| agent | `workCreatedByAgent` | Agent | Work | createdBy | `/model/document/#creation-and-publication` |
| agent | `workPublishedByAgent` | Agent | Work | publishedBy | `/model/document/#creation-and-publication` |
| agent | `workRepresentsAgent` | Agent | Work | represents | `/model/object/aboutness/#depiction` |
| concept | `activityClassifiedAsConcept` | Concept | Temporal | classifiedAs | `/model/base/#types-and-classifications` |
| concept | `agentClassifiedAsConcept` | Concept | Agent | classifiedAs | `/model/base/#types-and-classifications` |
| concept | `conceptBroaderConcept` | Concept | Concept | broader | `/model/concept/#partitioning-versus-classification` |
| concept | `conceptClassifiedAsConcept` | Concept | Concept | classifiedAs | `/model/concept/#partitioning-versus-classification` |
| concept | `conceptInfluencedByConcept` | Concept | Concept | influencedBy | `/model/concept/#creation-and-influences` |
| concept | `objectClassifiedAsConcept` | Concept | HumanMadeObject | classifiedAs | `/model/base/#types-and-classifications` |
| concept | `objectMadeOfMaterial` | Material | HumanMadeObject | madeOf | `/model/object/physical/#materials` |
| concept | `objectProductionTechniqueConcept` | Concept | HumanMadeObject | productionTechnique | `/model/object/production/#techniques-and-classifications` |
| concept | `placeClassifiedAsConcept` | Concept | Place | classifiedAs | `/model/base/#types-and-classifications` |
| concept | `setClassifiedAsConcept` | Concept | Set | classifiedAs | `/model/base/#types-and-classifications` |
| concept | `workAboutConcept` | Concept | Work | about | `/model/object/aboutness/#subject` |
| concept | `workAboutOrRepresentsConcept` | Concept | Concept | about / represents | `/model/object/aboutness/#subject` |
| concept | `workClassifiedAsConcept` | Concept | Work | classifiedAs | `/model/base/#types-and-classifications` |
| concept | `workCreationTechniqueConcept` | Concept | Work | creationTechnique | `` |
| concept | `workLanguageLanguage` | Language | LinguisticObject | language | `/model/document/#core-features` |
| concept | `workRepresentsConcept` | Concept | Work | represents | `/model/object/aboutness/#depiction` |
| object | `activityUsedObject` | HumanMadeObject | Activity | used | `` |
| object | `conceptInfluencedByObject` | HumanMadeObject | Concept | influencedBy | `/model/concept/#creation-and-influences` |
| object | `objectPartOfObject` | HumanMadeObject | HumanMadeObject | objectPartOfObject | `/model/object/physical/#parts` |
| object | `objectProductionInfluencedByObject` | HumanMadeObject | HumanMadeObject | productionInfluencedBy | `/model/object/production/#inspirations-studies-or-copies` |
| object | `workAboutObject` | HumanMadeObject | Work | about | `/model/object/aboutness/#subject` |
| object | `workAboutOrRepresentsObject` | HumanMadeObject | Work | about / represents | `/model/object/aboutness/#subject` |
| object | `workRepresentsObject` | HumanMadeObject | Work | represents | `/model/object/aboutness/#depiction` |
| place | `activityTookPlaceAtPlace` | Place | Event, Activity | tookPlaceAt | `/model/base/#events-and-activities` |
| place | `agentActiveAtPlace` | Place | Agent | activeAt | `/model/actor/#active-dates` |
| place | `agentBornOrFormedAtPlace` | Place | Agent | born / formed | `/model/actor/#birth-and-death-formation-and-dissolution` |
| place | `agentDiedOrDissolvedAtPlace` | Place | Agent | died / dissolved | `/model/actor/#birth-and-death-formation-and-dissolution` |
| place | `agentResidentAtPlace` | Place | Agent | residenceAt | `/model/actor/#residence-as-a-place` |
| place | `conceptInfluencedByPlace` | Place | Concept | influencedBy | `/model/concept/#creation-and-influences` |
| place | `groupActiveAtPlace` | Place | Group | activeAt | `/model/actor/#active-dates` |
| place | `groupDissolvedAtPlace` | Place | Group | dissolvedAt | `/model/actor/#birth-and-death-formation-and-dissolution` |
| place | `groupFormedAtPlace` | Place | Group | formedAt | `/model/actor/#birth-and-death-formation-and-dissolution` |
| place | `objectCurrentPlace` | Place | HumanMadeObject | current | `/model/object/ownership/#location` |
| place | `objectEncounteredAtPlace` | Place | HumanMadeObject | encounteredAt | `/model/object/production/#discovery-versus-production` |
| place | `objectProducedAtPlace` | Place | HumanMadeObject | producedAt | `/model/object/production/#base-production-activity` |
| place | `objectProductionInfluencedByPlace` | Place | HumanMadeObject | productionInfluencedBy | `/model/object/production/#inspirations-studies-or-copies` |
| place | `personActiveAtPlace` | Place | Person | activeAt | `/model/actor/#active-dates` |
| place | `personBornAtPlace` | Place | Person | bornAt | `/model/actor/#birth-and-death-formation-and-dissolution` |
| place | `personDiedAtPlace` | Place | Person | diedAt | `/model/actor/#birth-and-death-formation-and-dissolution` |
| place | `placePartOfPlace` | Place | Place | partOf | `/model/place/#core-information` |
| place | `setCreatedAtPlace` | Place | Set | createdAt | `/model/collection/#features` |
| place | `workAboutOrRepresentsPlace` | Place | Work | about / represents | `/model/object/aboutness/#subject` |
| place | `workAboutPlace` | Place | Work | about | `/model/object/aboutness/#subject` |
| place | `workCreatedAtPlace` | Place | Work | createdAt | `/model/document/#creation-and-publication` |
| place | `workPublishedAtPlace` | Place | Work | publishedAt | `/model/document/#creation-and-publication` |
| place | `workRepresentsPlace` | Place | Work | represents | `/model/object/aboutness/#depiction` |
| set | `activityUsedSet` | Set | Activity | used | `/model/exhibition/#exhibition-activity` |
| set | `conceptInfluencedBySet` | Set | Concept | influencedBy | `/model/concept/#creation-and-influences` |
| set | `conceptMemberOfSet` | Set | Concept | memberOf | `/model/collection/#features` |
| set | `entityMemberOfSet` | Set | Entity | memberOf | `/model/collection/#features` |
| set | `objectMemberOfSet` | Set | HumanMadeObject | memberOf | `/model/collection/#features` |
| set | `placeMemberOfSet` | Set | Place | memberOf | `/model/collection/#features` |
| set | `setMemberOfSet` | Set | Set | memberOf | `/model/collection/#features` |
| set | `temporalMemberOfSet` | Set | Temporal | memberOf | `/model/collection/#features` |
| set | `workAboutOrRepresentsSet` | Set | Work | about / represents | `/model/object/aboutness/#subject` |
| set | `workAboutSet` | Set | Work | about | `/model/object/aboutness/#subject` |
| set | `workMemberOfSet` | Set | Work | memberOf | `/model/collection/#features` |
| set | `workRepresentsSet` | Set | Work | represents | `/model/object/aboutness/#depiction` |
| work | `activityUsedWork` | Work | Activity | used | `` |
| work | `conceptInfluencedByWork` | Work | Concept | influencedBy | `/model/concept/#creation-and-influences` |
| work | `objectCarriesWork` | LinguisticObject | HumanMadeObject | carries | `/model/document/#physical-objects-conceptual-texts` |
| work | `objectProductionInfluencedByWork` | Work | HumanMadeObject | productionInfluencedBy | `/model/object/production/#inspirations-studies-or-copies` |
| work | `objectShowsWork` | VisualItem | HumanMadeObject | shows | `/model/object/aboutness/#physical-object-and-visual-work` |
| work | `workAboutOrRepresentsWork` | Work | Work | about / represents | `/model/object/aboutness/#subject` |
| work | `workAboutWork` | Work | Work | about | `/model/object/aboutness/#subject` |
| work | `workPartOfWork` | Work | Work | partOf | `/model/document/#structure` |
| work | `workRepresentsWork` | Work | Work | represents | `/model/object/aboutness/#depiction` |
Current Meta Museum Coverage
Implemented today:
- Public record/entity responses include HAL-style `_links.self`.
- Responses advertise the Linked Art `la` CURIE namespace with the templated relation-doc URL `https://linked.art/api/rels/1/{rel}`.
- Responses expose Linked Art API/model version affordances as HAL link objects with `href` and `name`.
- Entity-role responses expose followable named relation-search `_links` for indexed usage predicates that already have result records, including `la:objectProducedByAgent`, `la:objectOwnedByAgent`, `la:objectCuratedByAgent`, `la:objectMemberOfSet`, `la:objectPartOfObject`, `la:objectCarriesWork`, `la:objectShowsWork`, `la:workAboutAgent`, `la:workRepresentsAgent`, `la:workAboutOrRepresentsAgent`, `la:activityCarriedOutByAgent`, `la:activityUsedObject`, `la:activityTookPlaceAtPlace`, `la:groupFoundedByAgent`, `la:objectEncounteredByAgent`, `la:agentActiveAtPlace`, `la:objectProductionInfluencedByAgent`, `la:objectProductionInfluencedByObject`, `la:objectProductionInfluencedByPlace`, `la:objectProductionInfluencedByWork`, `la:setCreatedByAgent`, `la:conceptInfluencedByObject`, `la:workCreatedByAgent`, and `la:workPublishedByAgent`.
- `/api/relations` now publishes a first-class `OrderedCollection` catalog of supported relation-search definitions with relation URL, name, label, domain, range, and URI-template search target, so clients can discover relation families without starting from one entity record.
- `/api/relations/{relation}?current={entity-uri}` returns a Linked Art JSON-LD `OrderedCollectionPage` for those indexed relation links, with explicit `relation`, `current`, `conforms_to`, and `partOf` metadata plus a `la:relationDefinition` HAL link.
- Activity-centered relation indexing now materializes top-level and embedded activity evidence for carried-out-by agents, used human-made objects, and took-place-at places, returning Activity/Event summaries instead of flattening those relationships into object or actor records.
- Formation, encounter, and active-place relation indexing now materializes `Group.formed_by.carried_out_by`, `HumanMadeObject.encountered_by.carried_out_by` including nested encounter `part[]`, and agent `active_at` place evidence, returning Group, HumanMadeObject, and Person/Group summaries through the documented HAL/Search API route.
- Object-to-work relation indexing now materializes `HumanMadeObject.carries -> LinguisticObject` and `HumanMadeObject.shows -> VisualItem` evidence, returning the physical object summary from `la:objectCarriesWork` and `la:objectShowsWork` searches.
- Production-influence, set-creation, concept-influence, and work aboutness/representation/creation/publication relation indexing now materializes `HumanMadeObject.produced_by.influenced_by` references to agents, objects, places, and works; `Set.created_by.carried_out_by`/`influenced_by`; `Type.created_by.influenced_by`; work `about`/`represents`; work `created_by.carried_out_by`; and publishing-classified work `used_for.carried_out_by` evidence through the same relation catalog and `OrderedCollectionPage` route. The combined `workAboutOrRepresentsAgent` page deduplicates works that both describe and depict the same current agent.
- `/api/activity`, `/api/activity/collection`, and `/api/activity/page/{page}` provide ActivityStreams and IIIF Change Discovery-style synchronization surfaces.
- Activity projections preserve semantic activity fields, including `used_specific_object` where modeled.
Not complete yet:
- The relation-search route is usage-index backed, so relation links appear only for predicates already materialized in entity usages. The full 95-name upstream relation inventory still needs breadth work for relations that are not yet indexed, including place/object/work/set/concept variants outside the currently indexed subset and other upstream relation families.
- Relation catalog and target tests now prove twenty-four indexed paths are discoverable as relation definitions and return Search API `OrderedCollectionPage` results with relation/current metadata; each additional relation family still needs fixture-specific return-class tests.
Test Ideas
- Assert every Linked Art entity response emits `_links.self`, `curies`, `la:modelVersion`, and `la:apiVersion` with valid HAL link-object shapes.
- Assert `/api/relations` exposes each implemented predicate as a relation definition with stable Linked Art relation URL, domain, range, and search template.
- Assert `/api/relations/{relation}` pages include `relation`, `current`, `conforms_to`, `partOf`, `_links.self`, and `_links.la:relationDefinition` metadata.
- Extend activity relation fixtures beyond the current carried-out-by, used-object, and took-place-at coverage to nested `part[]` activity cases and additional Activity/Event specializations.
- Extend `la:conceptInfluencedByObject` fixtures beyond `Type.created_by.influenced_by` to any future full Concept endpoint classes and nested concept creation `part[]` patterns.
- Add fixture data where a `HumanMadeObject` is part of another `HumanMadeObject`, then assert the whole-object response includes `la:objectPartOfObject` only when part records exist.
- Follow the `la:objectPartOfObject` link and assert the response is an `OrderedCollectionPage` whose `orderedItems[]` are `HumanMadeObject` part records.
- Extend `la:objectProductionInfluencedByObject`, `la:objectProductionInfluencedByPlace`, and `la:objectProductionInfluencedByWork` fixtures beyond direct production influence to nested production `part[]` patterns and additional normalized influence paths.
- Extend `la:groupFoundedByAgent` fixtures beyond direct formation responsibility to nested formation `part[]` cases if upstream records use partitioned formation activities.
- Add fixture data for both `object.member_of -> collection.used_for -> curating.carried_out_by` and `object.current_keeper`/current-custody branches, then assert the agent response includes `la:objectCuratedByAgent` only when curated/custodied object records exist.
- Follow the `la:objectCuratedByAgent` link and assert the response is an `OrderedCollectionPage` whose `orderedItems[]` are `HumanMadeObject` records.
- Extend `la:objectEncounteredByAgent` fixtures to cover provider records that put encounter evidence inside provenance wrappers rather than directly on `HumanMadeObject.encountered_by`.
- Add fixture data where `HumanMadeObject.current_owner` references the current `Person` or `Group`, then assert the agent response includes `la:objectOwnedByAgent` only when owned object records exist.
- Follow the `la:objectOwnedByAgent` link and assert the response is an `OrderedCollectionPage` whose `orderedItems[]` are `HumanMadeObject` records.
- Add fixture data where an object's `produced_by` activity or nested production part is `carried_out_by` the current `Person` or `Group`, then assert the agent response includes `la:objectProducedByAgent` only when produced object records exist.
- Follow the `la:objectProducedByAgent` link and assert the response is an `OrderedCollectionPage` whose `orderedItems[]` are `HumanMadeObject` records.
- Extend `la:objectProductionInfluencedByAgent` fixtures to cover nested production `part[]` patterns and agent influence supplied through normalized authority references.
- Extend `la:setCreatedByAgent` fixtures beyond direct set creation influence to nested creation `part[]` and `carried_out_by` cases.
- Add fixture data where a `LinguisticObject`, `VisualItem`, or `PropositionalObject` `about` relationship references the current `Person` or `Group`, then assert the agent response includes `la:workAboutAgent` only when subject-work records exist.
- Follow the `la:workAboutAgent` link and assert the response is an `OrderedCollectionPage` whose `orderedItems[]` are work records.
- Extend `la:workAboutOrRepresentsAgent` fixtures across all work endpoint classes and future non-agent subject/representation variants.
- Extend `la:workCreatedByAgent` fixtures across all work endpoint classes and nested creation `part[]` cases.
- Extend `la:workPublishedByAgent` fixtures across all work endpoint classes and stricter publication-classification vocabulary variants.
- Add fixture data where a visual work `represents` the current `Person` or `Group`, then assert the agent response includes `la:workRepresentsAgent` only when depicted-work records exist.
- Follow the `la:workRepresentsAgent` link and assert the response is an `OrderedCollectionPage` whose `orderedItems[]` are visual work records.
- Extend `la:agentActiveAtPlace` fixtures to cover Group records and any future normalized active-period shape beyond direct `active_at` place references.
- Assert records with no matching used-object activities omit the relation link rather than returning an empty or misleading relation.
- Keep HAL links out of semantic graph assertions and RDF-oriented record validation.