Cora REST-API
Medlemmar kan läsa, skapa och uppdatera poster i Alvin via ett REST-API som bygger på Cora, ett metadatadrivet generiskt öppet digitalt arkivsystem utformat för att hantera strukturerad metadata och filer.
Cora utvecklas av Nationella system vid Uppsala universitetsbibliotek.
Cora Record API Documentation beskriver hur poster och filer hanteras samt hur sökningar görs.
Poster i Alvin
För att skapa och uppdatera poster krävs att användaren är registrerad i systemet (endast tillgängligt för personer kopplade till Alvins medlemsorganisationer). Publicerade poster kan däremot läsas av alla och är öppet tillgängliga utan inloggning.
Poster hanteras via Alvins dataformat i Cora uttryckt som antingen XML eller JSON. Formatbeskrivningen av typer och klasser är tillgänglig i katalogiseringsklienten samt som öppen länkad vokabulär.
Skapa bibliografisk post
Obligatoriska fält för alla bibliografiska poster (record) är resurstyp (typeOfResource), titel (title) samt arkivinstitution (location). Förutom beskrivande Alvin-metadata kräver Cora ett antal specifika obligatoriska kontrollfält i elementet recordInfo.
<record>
<typeOfResource>img</typeOfResource>
<title>
<mainTitle>A title</mainTitle>
</title>
<physicalLocation>
<heldBy>
<location>
<linkedRecordType>alvin-location</linkedRecordType>
<linkedRecordId>1</linkedRecordId>
</location>
</heldBy>
</physicalLocation>
<recordInfo>
<validationType>
<linkedRecordType>validationType</linkedRecordType>
<linkedRecordId>recordStillImage</linkedRecordId>
</validationType>
<dataDivider>
<linkedRecordType>system</linkedRecordType>
<linkedRecordId>alvinData</linkedRecordId>
</dataDivider>
<permissionUnit>
<linkedRecordType>permissionUnit</linkedRecordType>
<linkedRecordId>1</linkedRecordId>
</permissionUnit>
<visibility>published</visibility>
</recordInfo>
</record>
- validationType anger vilken uppsättning metadataelement posten kontrolleras mot. Olika resurstyper har olika tillåtna underelement. Kopplat till resurstypen via länkat id.
- dataDivider har ett fast värde alvinData som länkat id.
- permissionUnit är för att hantera rättigheter en nödvändig dubblering av id-nummer för den länkade arkivinstitutionen i posten. alvin-location med länkat id 1 i elementet location dubbleras alltså till permissionUnit med värde 1. Endast poster som tillhör användarens egen organisation kan skapas.
- visibility anger om posten skall vara publikt tillgänglig eller inte. Poster kan antingen vara published (läsbara för alla) eller unpublished (endast tillgängliga för inloggade användare hos den egna organisationen).
Läsa bibliografisk post
Poster som läses via API:et innehåller förutom själva den beskrivande metadatan länkar (actionLinks) till de olika möjligheter användaren har att anropa både posten och inlänkade poster i API:et. Ett omgivande Cora-element (record) innehåller (data) som i sin tur innehåller den faktiska metadataposten.
Notera attributet repeatId som är obligatoriskt för alla upprepningsbara fält i Coras API. repeatId måste innehålla ett unikt nummer inom respektive element.
<record>
<data>
<record>
<typeOfResource>img</typeOfResource>
<title>
<mainTitle>A title</mainTitle>
</title>
<physicalLocation>
<heldBy>
<location>
<linkedRecordType>alvin-location</linkedRecordType>
<linkedRecordId>1</linkedRecordId>
<actionLinks>
<read>
<requestMethod>GET</requestMethod>
<rel>read</rel>
<url>https://cora.alvin-portal.org/rest/record/alvin-location/1</url>
<accept>application/vnd.cora.record+xml</accept>
</read>
</actionLinks>
</location>
</heldBy>
</physicalLocation>
<recordInfo>
<validationType>
<linkedRecordType>validationType</linkedRecordType>
<linkedRecordId>recordStillImage</linkedRecordId>
<actionLinks>
<read>
<requestMethod>GET</requestMethod>
<rel>read</rel>
<url>https://cora.alvin-portal.org/rest/record/validationType/recordStillImage</url>
<accept>application/vnd.cora.record+xml</accept>
</read>
</actionLinks>
</validationType>
<dataDivider>
<linkedRecordType>system</linkedRecordType>
<linkedRecordId>alvinData</linkedRecordId>
<actionLinks>
<read>
<requestMethod>GET</requestMethod>
<rel>read</rel>
<url>https://cora.alvin-portal.org/rest/record/system/alvinData</url>
<accept>application/vnd.cora.record+xml</accept>
</read>
</actionLinks>
</dataDivider>
<permissionUnit>
<linkedRecordType>permissionUnit</linkedRecordType>
<linkedRecordId>1</linkedRecordId>
<actionLinks>
<read>
<requestMethod>GET</requestMethod>
<rel>read</rel>
<url>https://cora.alvin-portal.org/rest/record/permissionUnit/1</url>
<accept>application/vnd.cora.record+xml</accept>
</read>
</actionLinks>
</permissionUnit>
<visibility>published</visibility>
<tsVisibility>2026-01-14T15:03:02.382669Z</tsVisibility>
<inTrashBin>false</inTrashBin>
<id>2</id>
<type>
<linkedRecordType>recordType</linkedRecordType>
<linkedRecordId>alvin-record</linkedRecordId>
<actionLinks>
<read>
<requestMethod>GET</requestMethod>
<rel>read</rel>
<url>https://cora.alvin-portal.org/rest/record/recordType/alvin-record</url>
<accept>application/vnd.cora.record+xml</accept>
</read>
</actionLinks>
</type>
<createdBy>
<linkedRecordType>user</linkedRecordType>
<linkedRecordId>111111</linkedRecordId>
</createdBy>
<tsCreated>2026-01-14T15:03:02.383666Z</tsCreated>
<updated repeatId="0">
<tsUpdated>2026-01-14T17:29:26.591761Z</tsUpdated>
<updatedBy>
<linkedRecordType>user</linkedRecordType>
<linkedRecordId>111111</linkedRecordId>
</updatedBy>
</updated>
<urn>urn:nbn:se:alvin:portal:record-1</urn>
</recordInfo>
</record>
</data>
<actionLinks>
<read>
<requestMethod>GET</requestMethod>
<rel>read</rel>
<url>https://cora.alvin-portal.org/rest/record/alvin-record/1</url>
<accept>application/vnd.cora.record+xml</accept>
</read>
</actionLinks>
</record>
Uppdatera bibliografisk post
Vid uppdatering av en befintlig post anges även id samt type i recordInfo. inTrashBin sätts till false.
<record>
<typeOfResource>img</typeOfResource>
<title>
<mainTitle>An updated title</mainTitle>
</title>
<physicalLocation>
<heldBy>
<location>
<linkedRecordType>alvin-location</linkedRecordType>
<linkedRecordId>1</linkedRecordId>
</location>
</heldBy>
</physicalLocation>
<recordInfo>
<id>1</id>
<type>
<linkedRecordType>recordType</linkedRecordType>
<linkedRecordId>alvin-record</linkedRecordId>
</type>
<validationType>
<linkedRecordType>validationType</linkedRecordType>
<linkedRecordId>recordStillImage</linkedRecordId>
</validationType>
<dataDivider>
<linkedRecordType>system</linkedRecordType>
<linkedRecordId>alvinData</linkedRecordId>
</dataDivider>
<permissionUnit>
<linkedRecordType>permissionUnit</linkedRecordType>
<linkedRecordId>1</linkedRecordId>
</permissionUnit>
<visibility>published</visibility>
<inTrashBin>false</inTrashBin>
</recordInfo>
</record>
Ta bort bibliografisk post
Bibliografiska poster kan av arkivskäl inte tas bort helt från systemet men går att dölja för användare genom att uppdatera posten som ovan och i recordInfo sätta inTrashBin till true.
Auktoritetsposter
Hanteras på motsvarande sätt som bibliografiska poster men kan skapas och uppdateras oavsett användarens organisationstillhörighet. De är också alltid öppet publicerade. Det innebär att recordInfo för auktoritetsposter varken innehåller elementen permissionUnit eller visibility. Likaså kan auktoritetsposter som inte är länkade från en annan post tas bort från systemet genom ett DELETE anrop varför inte heller inTrashBin finns för auktoritetsposter.
Som beskrivande metadata måste auktoritetsposter för person, organisation och plats innehålla minst ett authority-element och auktoritetsposter för verk title samt formOfWork som obligatoriska element.