Unverified Commit e28deaf5 authored by Sebastian Schüpbach's avatar Sebastian Schüpbach
Browse files

parse more date formats



include also dates with formats as
- YYYY
- YYYY/YYYY (range)
- YYYY/? (range with unknown end)
- ?/YYYY (range with unknown start)
Signed-off-by: Sebastian Schüpbach's avatarSebastian Schüpbach <sebastian.schuepbach@unibas.ch>
parent 67b11e1d
......@@ -18,16 +18,16 @@
package ch.memobase
import java.time.format.DateTimeFormatter
import java.time.{LocalDate, LocalTime, OffsetDateTime, ZoneOffset}
import de.digitalcollections.iiif.model.enums.ViewingHint
import de.digitalcollections.iiif.model.jackson.IiifObjectMapper
import de.digitalcollections.iiif.model.sharedcanvas.{Canvas => IIIFCanvas, Manifest => IIIFManifest, Sequence => IIIFSequence}
import de.digitalcollections.iiif.model.{MetadataEntry, OtherContent, PropertyValue, ImageContent => IIIFImageContent}
import ujson.{Arr => JArr, Obj => JObj}
import java.time.format.DateTimeFormatter
import java.time.{LocalDate, LocalTime, OffsetDateTime, ZoneOffset}
import scala.collection.mutable
import scala.util.{Failure, Success, Try}
import scala.util.Try
class Manifest {
......@@ -51,12 +51,15 @@ class Manifest {
val manifestResult = createManifest(graph, record, digitalObject)
manifestResult.obj.addSequence(sequence)
ExtractionResult((
imageContent.getIdentifier.toString.replaceAll("/binary$", ""),
replaceDomainNamesWithPlaceholders(
iiifMapper.writer.writeValueAsString(manifestResult.obj)
)
), manifestResult.warnings)
ExtractionResult(
(
imageContent.getIdentifier.toString.replaceAll("/binary$", ""),
replaceDomainNamesWithPlaceholders(
iiifMapper.writer.writeValueAsString(manifestResult.obj)
)
),
manifestResult.warnings
)
}
}
......@@ -94,7 +97,9 @@ class Manifest {
//noinspection DuplicatedCode
private def createCanvas(digitalObject: JObj): IIIFCanvas = {
val canvas = new IIIFCanvas(Extractors.canvasId(digitalObject).getOrElse(""))
val canvas = new IIIFCanvas(
Extractors.canvasId(digitalObject).getOrElse("")
)
canvas.addLabel("digitalObject")
Extractors
.imageHeight(digitalObject)
......@@ -106,15 +111,23 @@ class Manifest {
}
private def createSequence(digitalObject: JObj): IIIFSequence = {
val sequence = new IIIFSequence(Extractors.sequenceId(digitalObject).getOrElse(""))
val sequence = new IIIFSequence(
Extractors.sequenceId(digitalObject).getOrElse("")
)
sequence.addLabel("default")
sequence.addViewingHint(ViewingHint.INDIVIDUALS)
sequence
}
//noinspection ScalaStyle
private def createManifest(graph: JArr, record: JObj, digitalObject: JObj): ExtractionResult[IIIFManifest] = {
val manifest = new IIIFManifest(Extractors.manifestId(digitalObject).getOrElse(""))
private def createManifest(
graph: JArr,
record: JObj,
digitalObject: JObj
): ExtractionResult[IIIFManifest] = {
val manifest = new IIIFManifest(
Extractors.manifestId(digitalObject).getOrElse("")
)
val extractionResult = ExtractionResult(manifest)
Extractors
.title(record)
......@@ -165,17 +178,17 @@ class Manifest {
.creationDate(graph)(
record.value
)
.flatMap(v => Try(LocalDate.parse(v, dateTimeFormatter)) match {
case Success(date) => Some(date)
case Failure(_) =>
extractionResult.warnings += s"Date has incorrect format. Is: `$v`. Should: `YYYY-MM-DD`"
None
})
.foreach(v =>
manifest.setNavDate(
OffsetDateTime.of(v, LocalTime.of(0, 0), ZoneOffset.UTC)
)
)
.map(createTimestamp)
.foreach {
case DateExtractionResult(Some(v), l, None) =>
manifest.setNavDate(
OffsetDateTime.of(v, LocalTime.of(0, 0), ZoneOffset.UTC)
)
l.foreach(v => manifest.addMetadata(v._1, v._2))
case DateExtractionResult(None, _, Some(w)) =>
extractionResult.warnings += w
case _ => extractionResult.warnings += "Unknown error"
}
manifest.addViewingHint(ViewingHint.INDIVIDUALS)
manifest.addRendering(createWebsite(Extractors.manifestId(record)))
extractionResult
......@@ -191,14 +204,74 @@ class Manifest {
website
}
private lazy val onlyYear = "^(\\d{4})$".r
private lazy val date = "^(\\d{4}-\\d{2}-\\d{2})$".r
private lazy val yearRange = "^(\\d{4}/\\d{4})$".r
private lazy val untilYear = "^(\\?/\\d{4})$".r
private lazy val fromYear = "^(\\d{4}/\\?)$".r
private def createTimestamp(value: String): DateExtractionResult =
value match {
case date(value) =>
DateExtractionResult(Some(LocalDate.parse(value, dateTimeFormatter)))
case onlyYear(value) =>
DateExtractionResult(
Some(LocalDate.parse(s"$value-01-01", dateTimeFormatter))
)
case yearRange(value) =>
val dateRangeStart = value.split("/")(0)
val dateRangeEnd = value.split("/")(0)
DateExtractionResult(
Some(
LocalDate.parse(s"${value.split("/")(0)}-01-01", dateTimeFormatter)
),
List(
("Date range start", dateRangeStart),
("Date range end", dateRangeEnd)
)
)
case fromYear(value) =>
val dateRangeStart = value.split("/")(0)
DateExtractionResult(
Some(
LocalDate.parse(s"$dateRangeStart-01-01", dateTimeFormatter)
),
List(
("Date range end", dateRangeStart),
("Date range end", "(unknown)")
)
)
case untilYear(value) =>
DateExtractionResult(
Some(
LocalDate.parse(s"${value.split("/")(1)}-01-01", dateTimeFormatter)
),
List(
("Date range end", "(unknown)"),
("Date range start", "(unknown)")
)
)
case value =>
DateExtractionResult(
None,
warnings = Some(s"Date ($value) has incorrect value")
)
}
private def replaceDomainNamesWithPlaceholders(jsonObj: String): String = {
jsonObj
.replaceAll(
""""https://memobase.ch/digital/([^/"]+)/binary""",
""""{{.IIIFImage}}/$1"""
)
.replaceAll(""""https://memobase.ch/digital/([^/"]+)/manifest""", """"{{.IIIFManifest}}/$1/manifest/v2""")
.replaceAll(""""https://memobase.ch/digital/""", """"{{.IIIFManifest}}/""")
.replaceAll(
""""https://memobase.ch/digital/([^/"]+)/manifest""",
""""{{.IIIFManifest}}/$1/manifest/v2"""
)
.replaceAll(
""""https://memobase.ch/digital/""",
""""{{.IIIFManifest}}/"""
)
.replaceAll(
""""https://memobase.ch/([^/"]+)""",
""""{{.IIIFRendering}}/$1"""
......@@ -206,4 +279,13 @@ class Manifest {
}
}
case class ExtractionResult[T](obj: T, warnings: mutable.Buffer[String] = mutable.Buffer())
case class ExtractionResult[T](
obj: T,
warnings: mutable.Buffer[String] = mutable.Buffer()
)
case class DateExtractionResult(
date: Option[LocalDate],
metadata: List[(String, String)] = List(),
warnings: Option[String] = None
)
{
"@graph": [
{
"@id": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1",
"@type": "https://www.ica.org/standards/RiC/ontology#Instantiation",
"P60558": "Grayscale",
"hasFormat": "fmt/43",
"hasMimeType": "image/jpeg",
"height": "484.0",
"locator": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1/binary",
"orientation": "Undefined",
"width": "640.0",
"componentColor": [
"A9A9A9",
"2F2F4F",
"000000",
"527F76",
"A8A8A8",
"545454",
"E6E6FA",
"C0D9D9"
],
"contains": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1/binary",
"identifiedBy": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1#genid96009e78-6e16-44b9-9c02-cc04577894df",
"instantiates": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484",
"isDerivedFromInstantiation": "https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1",
"regulatedBy": [
"https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1#genid7744ee1f-41bf-41d1-98f1-8bca3573bc5b",
"https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1#geniddf78af5d-673e-4345-8368-d13a9abff8c4"
],
"type": "digitalObject"
},
{
"@id": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1#genid7744ee1f-41bf-41d1-98f1-8bca3573bc5b",
"@type": "https://www.ica.org/standards/RiC/ontology#Rule",
"sameAs": "http://rightsstatements.org/vocab/InC/1.0/",
"name": "In Copyright (InC)",
"regulates": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1",
"type": "usage"
},
{
"@id": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1#genid96009e78-6e16-44b9-9c02-cc04577894df",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "BAZ-B_MEI-MEI_67484-1",
"type": "main"
},
{
"@id": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1#geniddf78af5d-673e-4345-8368-d13a9abff8c4",
"@type": "https://www.ica.org/standards/RiC/ontology#Rule",
"name": "public",
"regulates": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1",
"type": "access"
},
{
"@id": "https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1",
"@type": "https://www.ica.org/standards/RiC/ontology#Instantiation",
"P60558": "sw",
"hasCarrierType": "https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1#genid7a9b1319-66e3-41f6-8991-08cb34fadc43",
"hasDerivedInstantiation": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1",
"identifiedBy": [
"https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1#genid823dec23-88f0-4a2f-95fa-f0dc506e7cc4",
"https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1#genid395aaa34-372d-492a-b543-a5ea3f927d9a"
],
"instantiates": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484",
"physicalCharacteristics": [
"Weite: 24 cm",
"Höhe: 18 cm",
"Bemerkung: Querformat"
],
"regulatedBy": [
"https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1#genid91e0d8f4-740c-4ecc-96e6-d332263e26aa",
"https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1#genidd41a93d4-718f-4ec7-af19-123451d07b78"
],
"type": "physicalObject"
},
{
"@id": "https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1#genid395aaa34-372d-492a-b543-a5ea3f927d9a",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "67484",
"type": "callNumber"
},
{
"@id": "https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1#genid7a9b1319-66e3-41f6-8991-08cb34fadc43",
"@type": "https://www.ica.org/standards/RiC/ontology#CarrierType",
"name": "Negativ Nitrat (NN)"
},
{
"@id": "https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1#genid823dec23-88f0-4a2f-95fa-f0dc506e7cc4",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "BAZ-B_MEI-MEI_67484-1",
"type": "main"
},
{
"@id": "https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1#genid91e0d8f4-740c-4ecc-96e6-d332263e26aa",
"@type": "https://www.ica.org/standards/RiC/ontology#Rule",
"sameAs": "http://rightsstatements.org/vocab/InC/1.0/",
"name": "In Copyright (InC)",
"regulates": "https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1",
"type": "usage"
},
{
"@id": "https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1#genidd41a93d4-718f-4ec7-af19-123451d07b78",
"@type": "https://www.ica.org/standards/RiC/ontology#Rule",
"name": "onsite",
"regulates": "https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1",
"type": "access"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484",
"@type": "https://www.ica.org/standards/RiC/ontology#Record",
"eventType": "Create",
"http://memobase.ch/internal/isPublished": false,
"abstract": "Büroraum mit Arbeitsplätzen, Stehpult, div. Bürotechnische Apparate",
"created": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genidc6009adc-4df1-4950-95e2-9ecf8b86b708",
"spatial": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genidf96042b3-3d5d-4498-8f9d-08b9fb4d854c",
"P60451": "https://memobase.ch/institution/mrv",
"P60556": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid16837e81-437b-412a-8a84-bc3b8320fbe0",
"conditionsOfUse": "nach Absprache",
"hasInstantiation": [
"https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1",
"https://memobase.ch/physical/BAZ-B_MEI-MEI_67484-1"
],
"hasSubject": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid064438d6-d9de-4a27-92ba-cc0abe6dc1c6",
"hasTitle": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid6a5f5bde-5571-4834-98b6-8b700951c748",
"heldBy": "https://memobase.ch/institution/BAZ",
"identifiedBy": [
"https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid070b25ee-6f18-41e3-b8da-195cc6ccbae1",
"https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid44df19c5-7f0a-4372-bf39-a5681e46fe36",
"https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genidd6fed673-e554-4abc-a492-abea475a999c"
],
"isPartOf": "https://memobase.ch/recordSet/BAZ-B_MEI",
"recordResourceOrInstantiationIsSourceOfCreationRelation": [
"https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid105061e7-c316-4f68-bc00-e9803f031db6",
"https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid74151488-daa5-4d7c-bf4c-46e598f4d8c7"
],
"regulatedBy": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid0981a546-09e8-4405-8e83-64f53c169f85",
"title": "Büroraum der Firma «Corn Products Co. Ltd»",
"type": "Foto"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid064438d6-d9de-4a27-92ba-cc0abe6dc1c6",
"@type": "http://www.w3.org/2004/02/skos/core#Concept",
"prefLabel": "Innenraum"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid070b25ee-6f18-41e3-b8da-195cc6ccbae1",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "BAZ-MEI_67484",
"type": "oldMemobase"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid0981a546-09e8-4405-8e83-64f53c169f85",
"@type": "https://www.ica.org/standards/RiC/ontology#Rule",
"name": "BAZ",
"regulates": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484",
"type": "holder"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid105061e7-c316-4f68-bc00-e9803f031db6",
"@type": "https://www.ica.org/standards/RiC/ontology#CreationRelation",
"creationRelationHasSource": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484",
"creationRelationHasTarget": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid33ee31fc-9638-4cee-ba26-978502b10b0c",
"name": "Author",
"type": "creator"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid16837e81-437b-412a-8a84-bc3b8320fbe0",
"@type": "https://www.ica.org/standards/RiC/ontology#Place",
"name": "Zürich, Kornhausbrücke 7"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid33ee31fc-9638-4cee-ba26-978502b10b0c",
"@type": "https://www.ica.org/standards/RiC/ontology#CorporateBody",
"eventType": "Create",
"agentIsTargetOfCreationRelation": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid105061e7-c316-4f68-bc00-e9803f031db6",
"name": "Atelier Meiner"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid44df19c5-7f0a-4372-bf39-a5681e46fe36",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "BAZ-B_MEI-MEI_67484",
"type": "main"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid6a5f5bde-5571-4834-98b6-8b700951c748",
"@type": "https://www.ica.org/standards/RiC/ontology#Title",
"title": "Büroraum der Firma «Corn Products Co. Ltd»",
"type": "main"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid74151488-daa5-4d7c-bf4c-46e598f4d8c7",
"@type": "https://www.ica.org/standards/RiC/ontology#CreationRelation",
"creationRelationHasSource": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484",
"creationRelationHasTarget": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genidbb1d76ee-524a-4889-8184-60735f836306",
"name": "Auftraggeber",
"type": "contributor"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genidbb1d76ee-524a-4889-8184-60735f836306",
"@type": "https://www.ica.org/standards/RiC/ontology#Agent",
"agentIsTargetOfCreationRelation": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genid74151488-daa5-4d7c-bf4c-46e598f4d8c7",
"name": "Corn Products Company"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genidc6009adc-4df1-4950-95e2-9ecf8b86b708",
"@type": "https://www.ica.org/standards/RiC/ontology#SingleDate",
"normalizedDateValue": "1933/?"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genidd6fed673-e554-4abc-a492-abea475a999c",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "MEI_67484",
"type": "original"
},
{
"@id": "https://memobase.ch/record/BAZ-B_MEI-MEI_67484#genidf96042b3-3d5d-4498-8f9d-08b9fb4d854c",
"@type": "https://www.ica.org/standards/RiC/ontology#Place",
"name": "Zürich"
}
],
"@context": {
"regulates": {
"@id": "https://www.ica.org/standards/RiC/ontology#regulates",
"@type": "@id"
},
"type": {
"@id": "https://www.ica.org/standards/RiC/ontology#type"
},
"name": {
"@id": "https://www.ica.org/standards/RiC/ontology#name"
},
"identifier": {
"@id": "https://www.ica.org/standards/RiC/ontology#identifier"
},
"sameAs": {
"@id": "http://schema.org/sameAs"
},
"agentIsTargetOfCreationRelation": {
"@id": "https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation",
"@type": "@id"
},
"creationRelationHasTarget": {
"@id": "https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget",
"@type": "@id"
},
"creationRelationHasSource": {
"@id": "https://www.ica.org/standards/RiC/ontology#creationRelationHasSource",
"@type": "@id"
},
"normalizedDateValue": {
"@id": "https://www.ica.org/standards/RiC/ontology#normalizedDateValue"
},
"regulatedBy": {
"@id": "https://www.ica.org/standards/RiC/ontology#regulatedBy",
"@type": "@id"
},
"physicalCharacteristics": {
"@id": "https://www.ica.org/standards/RiC/ontology#physicalCharacteristics"
},
"instantiates": {
"@id": "https://www.ica.org/standards/RiC/ontology#instantiates",
"@type": "@id"
},
"identifiedBy": {
"@id": "https://www.ica.org/standards/RiC/ontology#identifiedBy",
"@type": "@id"
},
"P60558": {
"@id": "http://rdaregistry.info/Elements/u/P60558"
},
"hasCarrierType": {
"@id": "https://www.ica.org/standards/RiC/ontology#hasCarrierType",
"@type": "@id"
},
"hasDerivedInstantiation": {
"@id": "https://www.ica.org/standards/RiC/ontology#hasDerivedInstantiation",
"@type": "@id"
},
"isPartOf": {
"@id": "https://www.ica.org/standards/RiC/ontology#isPartOf",
"@type": "@id"
},
"conditionsOfUse": {
"@id": "https://www.ica.org/standards/RiC/ontology#conditionsOfUse"
},
"hasInstantiation": {
"@id": "https://www.ica.org/standards/RiC/ontology#hasInstantiation",
"@type": "@id"
},
"isPublished": {
"@id": "http://memobase.ch/internal/isPublished",
"@type": "http://www.w3.org/2001/XMLSchema#boolean"
},
"abstract": {
"@id": "http://purl.org/dc/terms/abstract"
},
"recordResourceOrInstantiationIsSourceOfCreationRelation": {
"@id": "https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation",
"@type": "@id"
},
"hasTitle": {
"@id": "https://www.ica.org/standards/RiC/ontology#hasTitle",
"@type": "@id"
},
"created": {
"@id": "http://purl.org/dc/terms/created",
"@type": "@id"
},
"title": {
"@id": "https://www.ica.org/standards/RiC/ontology#title"
},
"P60451": {
"@id": "http://rdaregistry.info/Elements/u/P60451",
"@type": "@id"
},
"P60556": {
"@id": "http://rdaregistry.info/Elements/u/P60556",
"@type": "@id"
},
"eventType": {
"@id": "http://memobase.ch/internal/eventType"
},
"heldBy": {
"@id": "https://www.ica.org/standards/RiC/ontology#heldBy",
"@type": "@id"
},
"hasSubject": {
"@id": "https://www.ica.org/standards/RiC/ontology#hasSubject",
"@type": "@id"
},
"spatial": {
"@id": "http://purl.org/dc/terms/spatial",
"@type": "@id"
},
"prefLabel": {
"@id": "http://www.w3.org/2004/02/skos/core#prefLabel"
},
"componentColor": {
"@id": "http://www.europeana.eu/schemas/edm/componentColor",
"@type": "http://www.w3.org/2001/XMLSchema#hexBinary"
},
"contains": {
"@id": "http://www.w3.org/ns/ldp#contains",
"@type": "@id"
},
"locator": {
"@id": "http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#locator"
},
"height": {
"@id": "http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#height"
},
"hasFormat": {
"@id": "http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#hasFormat"
},
"hasMimeType": {
"@id": "http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#hasMimeType"
},
"isDerivedFromInstantiation": {
"@id": "https://www.ica.org/standards/RiC/ontology#isDerivedFromInstantiation",
"@type": "@id"
},
"width": {
"@id": "http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#width"
},
"orientation": {
"@id": "http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#orientation"
}
}
}
\ No newline at end of file
{
"@graph": [
{
"@id": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1",
"@type": "https://www.ica.org/standards/RiC/ontology#Instantiation",
"P60558": "Grayscale",
"hasFormat": "fmt/43",
"hasMimeType": "image/jpeg",
"height": "484.0",
"locator": "https://memobase.ch/digital/BAZ-B_MEI-MEI_67484-1/binary",
"orientation": "Undefined",
"width": "640.0",
"componentColor": [
"A9A9A9",
"2F2F4F",
"000000",
"527F76",
"A8A8A8",