Commit c500825d authored by Jonas Waeber's avatar Jonas Waeber
Browse files

Enrich document type on documents.

parent 0721ba22
...@@ -28,8 +28,11 @@ import org.memobase.model.EnrichedDigitalMetadata ...@@ -28,8 +28,11 @@ import org.memobase.model.EnrichedDigitalMetadata
import org.memobase.model.LanguageContainer import org.memobase.model.LanguageContainer
import org.memobase.model.Schema import org.memobase.model.Schema
class DocumentsSearchDocBuilder(private val mediaUrl: String) { class DocumentsSearchDocBuilder(
private val documentTypeMapper: DocumentTypeMapper,
private val mediaUrl: String) {
private val log = LogManager.getLogger("SearchDocTransform") private val log = LogManager.getLogger("SearchDocTransform")
fun transform(input: Map<String, JsonObject>): Schema { fun transform(input: Map<String, JsonObject>): Schema {
val record = input["record"] ?: throw InvalidInputException("No record defined in the message.") val record = input["record"] ?: throw InvalidInputException("No record defined in the message.")
...@@ -176,11 +179,19 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) { ...@@ -176,11 +179,19 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
} }
} }
val type = record[KEYS.ricoType].let {
if (it == null) {
documentTypeMapper.getValue("Andere")
} else {
documentTypeMapper.getValue(it as String)
}
}
return DocumentsSearchDoc( return DocumentsSearchDoc(
title = Extract.typedEntityByType(recordTitles, "type", "main", "title"), title = Extract.typedEntityByType(recordTitles, "type", "main", "title"),
seriesTitle = Extract.typedEntityByType(recordTitles, "type", "series", "title"), seriesTitle = Extract.typedEntityByType(recordTitles, "type", "series", "title"),
broadcastTitle = Extract.typedEntityByType(recordTitles, "type", "broadcast", "title"), broadcastTitle = Extract.typedEntityByType(recordTitles, "type", "broadcast", "title"),
type = record.getOrDefault("type", "NoDocumentTypeDefined") as String, type = type,
sourceID = try { sourceID = try {
Extract.extractIdValue(recordIdentifiers, KEYS.IdentifierType.original) ?: "NoSourceIdFound" Extract.extractIdValue(recordIdentifiers, KEYS.IdentifierType.original) ?: "NoSourceIdFound"
} catch (ex: NoSuchElementException) { } catch (ex: NoSuchElementException) {
......
...@@ -34,9 +34,8 @@ import org.memobase.model.LanguageContainer ...@@ -34,9 +34,8 @@ import org.memobase.model.LanguageContainer
import org.memobase.model.Schema import org.memobase.model.Schema
class InstitutionSearchDocBuilder(path: String, appSettings: Properties) { class InstitutionSearchDocBuilder(private val institutionTypeMapper: InstitutionTypeMapper, appSettings: Properties) {
private val log = LogManager.getLogger("InstitutionSearchDocBuilder") private val log = LogManager.getLogger("InstitutionSearchDocBuilder")
private val institutionTypeMapper = InstitutionTypeMapper(path)
private val elasticSearchWrapper = ElasticSearchWrapper(appSettings) private val elasticSearchWrapper = ElasticSearchWrapper(appSettings)
fun transform(key: String, input: Map<String, JsonObject>): Schema { fun transform(key: String, input: Map<String, JsonObject>): Schema {
......
...@@ -29,9 +29,12 @@ import org.apache.kafka.streams.Topology ...@@ -29,9 +29,12 @@ import org.apache.kafka.streams.Topology
import org.apache.kafka.streams.kstream.KStream import org.apache.kafka.streams.kstream.KStream
import org.apache.kafka.streams.kstream.Predicate import org.apache.kafka.streams.kstream.Predicate
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import org.memobase.helpers.DocumentTypeMapper
import org.memobase.helpers.ElasticSearchWrapper import org.memobase.helpers.ElasticSearchWrapper
import org.memobase.helpers.InstitutionTypeMapper
import org.memobase.helpers.JSON import org.memobase.helpers.JSON
import org.memobase.helpers.KEYS import org.memobase.helpers.KEYS
import org.memobase.helpers.KEYS.SettingsProps
import org.memobase.model.DocumentsSearchDoc import org.memobase.model.DocumentsSearchDoc
import org.memobase.model.InstitutionSearchDoc import org.memobase.model.InstitutionSearchDoc
import org.memobase.model.RecordSetSearchDoc import org.memobase.model.RecordSetSearchDoc
...@@ -41,11 +44,16 @@ class KafkaTopology(private val settings: SettingsLoader) { ...@@ -41,11 +44,16 @@ class KafkaTopology(private val settings: SettingsLoader) {
private val log = LogManager.getLogger("SearchDocService") private val log = LogManager.getLogger("SearchDocService")
private val appSettings = settings.appSettings private val appSettings = settings.appSettings
private val mediaUrl = appSettings.getProperty(SettingsProps.mediaUrl)
private val documentMapperPath = appSettings.getProperty(SettingsProps.documentTypeLabelsPath)
private val institutionMapperPath = appSettings.getProperty(SettingsProps.institutionTypeLabelsPath)
private val reportTopic = settings.processReportTopic private val reportTopic = settings.processReportTopic
private val searchDocTransform = DocumentsSearchDocBuilder(appSettings.getProperty(KEYS.SettingsProps.mediaUrl)) private val documentTypeMapper = DocumentTypeMapper(documentMapperPath)
private val institutionSearchDoc = private val institutionTypeMapper = InstitutionTypeMapper(institutionMapperPath)
InstitutionSearchDocBuilder(appSettings.getProperty(KEYS.SettingsProps.institutionTypeLabelsPath), appSettings)
private val documentSearchDocBuilder = DocumentsSearchDocBuilder(documentTypeMapper, mediaUrl)
private val institutionSearchDoc = InstitutionSearchDocBuilder(institutionTypeMapper, appSettings)
private val elasticSearchWrapper = ElasticSearchWrapper(settings.appSettings) private val elasticSearchWrapper = ElasticSearchWrapper(settings.appSettings)
private val recordSetSearchDocBuilder = private val recordSetSearchDocBuilder =
...@@ -71,7 +79,7 @@ class KafkaTopology(private val settings: SettingsLoader) { ...@@ -71,7 +79,7 @@ class KafkaTopology(private val settings: SettingsLoader) {
.mapValues { readOnlyKey, value -> .mapValues { readOnlyKey, value ->
try { try {
Pair( Pair(
searchDocTransform.transform(value), documentSearchDocBuilder.transform(value),
Report(readOnlyKey, ReportStatus.success, "Transformed message into search doc.", Service.name) Report(readOnlyKey, ReportStatus.success, "Transformed message into search doc.", Service.name)
) )
} catch (ex: InvalidInputException) { } catch (ex: InvalidInputException) {
......
...@@ -29,7 +29,7 @@ data class DocumentsSearchDoc( ...@@ -29,7 +29,7 @@ data class DocumentsSearchDoc(
val broadcastTitle: List<LanguageContainer>, val broadcastTitle: List<LanguageContainer>,
// Datatype properties // Datatype properties
val type: String, val type: FacetContainer,
val sourceID: String, val sourceID: String,
@JsonIgnore @JsonIgnore
private val recordId: String, private val recordId: String,
...@@ -116,11 +116,18 @@ data class DocumentsSearchDoc( ...@@ -116,11 +116,18 @@ data class DocumentsSearchDoc(
) : Schema(recordId) { ) : Schema(recordId) {
companion object { companion object {
private val otherDocumentTypeLanguageContainer =
LanguageContainer(listOf("Andere"), listOf("Autres"), listOf("Altri"), emptyList())
val DEFAULT = DocumentsSearchDoc( val DEFAULT = DocumentsSearchDoc(
emptyList(), emptyList(),
emptyList(), emptyList(),
emptyList(), emptyList(),
"NoDocumentTypeDefined", FacetContainer(
otherDocumentTypeLanguageContainer,
null,
emptyList()
),
"NoSourceIdFound", "NoSourceIdFound",
"https://memobase.ch/record/TestIdentifier", "https://memobase.ch/record/TestIdentifier",
emptyList(), emptyList(),
......
...@@ -8,6 +8,7 @@ import org.memobase.helpers.JSON ...@@ -8,6 +8,7 @@ import org.memobase.helpers.JSON
import org.memobase.model.DocumentsSearchDoc import org.memobase.model.DocumentsSearchDoc
import java.io.File import java.io.File
import java.nio.charset.Charset import java.nio.charset.Charset
import org.memobase.helpers.DocumentTypeMapper
@TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestInstance(TestInstance.Lifecycle.PER_CLASS)
class TestDocumentsSearchDoc { class TestDocumentsSearchDoc {
...@@ -18,7 +19,8 @@ class TestDocumentsSearchDoc { ...@@ -18,7 +19,8 @@ class TestDocumentsSearchDoc {
} }
private val klaxon = Klaxon() private val klaxon = Klaxon()
private val transformer = DocumentsSearchDocBuilder("https://media.memobase.k8s.unibas.ch/memo/") private val documentTypeMapper = DocumentTypeMapper("src/test/resources/configs/document-type-labels.csv")
private val transformer = DocumentsSearchDocBuilder(documentTypeMapper, "https://media.memobase.k8s.unibas.ch/memo/")
@Test @Test
fun `test minimal record required`() { fun `test minimal record required`() {
......
...@@ -7,28 +7,30 @@ import org.junit.jupiter.api.assertThrows ...@@ -7,28 +7,30 @@ import org.junit.jupiter.api.assertThrows
import org.memobase.helpers.JSON import org.memobase.helpers.JSON
import java.io.File import java.io.File
import java.io.FileInputStream import java.io.FileInputStream
import org.memobase.helpers.DocumentTypeMapper
@TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestInstance(TestInstance.Lifecycle.PER_CLASS)
class TestTransform { class TestTransform {
private val dataPath = "src/test/resources/data/transformer" private val dataPath = "src/test/resources/data/transformer"
private val documentTypeMapper = DocumentTypeMapper("src/test/resources/configs/document-type-labels.csv")
private val transformer = DocumentsSearchDocBuilder(documentTypeMapper, "https://media.memobase.k8s.unibas.ch/memo/")
@Test @Test
fun `test missing record`() { fun `test missing record`() {
val searchDoc = DocumentsSearchDocBuilder("https://media.memobase.k8s.unibas.ch/memo/")
val input = mapOf(Pair("", json { obj() })) val input = mapOf(Pair("", json { obj() }))
assertThrows<InvalidInputException> { searchDoc.transform(input) } assertThrows<InvalidInputException> { transformer.transform(input) }
} }
@Test @Test
fun `test enriched digital metadata record`() { fun `test enriched digital metadata record`() {
val searchDoc = DocumentsSearchDocBuilder("https://media.memobase.k8s.unibas.ch/memo/")
val input = JSON.unpack( val input = JSON.unpack(
JSON.parse( JSON.parse(
FileInputStream(File("$dataPath/enrich_digital_metadata_record.json")).bufferedReader().readLines() FileInputStream(File("$dataPath/enrich_digital_metadata_record.json")).bufferedReader().readLines()
.reduce { acc, s -> acc + "\n" + s }) .reduce { acc, s -> acc + "\n" + s })
) )
val values = searchDoc.transform(input) val values = transformer.transform(input)
} }
} }
\ No newline at end of file
{"title":[{"de":[],"fr":[],"it":[],"un":["Falter"]}],"seriesTitle":[{"de":[],"fr":[],"it":[],"un":["Tieraufnahmen"]}],"type":"Film","sourceID":"PA_111_Sch_Y13_005_Nr_647","abstract":[{"de":[],"fr":[],"it":[],"un":["Vorspann: Agfa. Falter. <br><br> Beschrieb Schönwetter: Falter."]}],"descriptiveNote":[{"de":[],"fr":[],"it":[],"un":["Um die Filme des Bestands in der Listenansicht in der nach Serien/ Zeitraum bis oder nach 1945/ Filmdauer geordneten Reihenfolge anzuzeigen, ist in \"sortieren nach:\" die Auswahl \"Main-ID aufsteigend\" zu treffen. <a href=\"http://memobase.ch/#find/facets[inst-facet]=[LAGL]&order=4\" target=\"_blank\">http://memobase.ch/#find/facets[inst-facet]=[LAGL]&order=4</a>"]}],"scopeAndContent":[{"de":[],"fr":[],"it":[],"un":["Die archivische Serie \"Tieraufnahmen\" des Filmbestands Schönwetter (Kanton Glarus) umfasst Filmsequenzen, deren Szenen/Inhalte hauptsächlich Aufnahmen von Tieren sind, und zwar auch von Nutztieren und auch anlässlich von Viehschauen. [Verzeichnisreihenfolge innerhalb Serie gemäss Zeitperiode bis oder nach 1945 und pro Zeitperiode gemäss Abfolge Filmdauer]."]}],"rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Landesarchiv des Kantons Glarus"]}],"sameAs":["https://archivverzeichnis.gl.ch/home/#/content/110700fae7994b628665add754139f2c"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["16-mm-Film"],"fr":["Format 16 mm"],"it":["16 millimetri"],"un":[]}}],"genre":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["Aktualitäten"],"fr":["Actualités"],"it":["Attualità"],"un":[]}}],"keywords":{"de":[],"fr":[],"it":[],"un":[]},"personCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Schönwetter Hans Jakob (1906-1997)"]},"relation":{"de":[],"fr":[],"it":[],"un":["Author"]},"filter":"Schönwetter, Hans Jakob (1906-1997)","facet":["0~S~","1~S~Schönwetter, Hans Jakob (1906-1997)~"]}],"personsFacet":["0~S~","1~S~Schönwetter, Hans Jakob (1906-1997)~"],"corporateBodyProducer":[{"name":{"de":[],"fr":[],"it":[],"un":["H.P. Schönwetter"]}}],"dateCreated":[{"date":"/ vermutlich vor 1945 1930/1945","qualifier":["ca."]}],"institution":[{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["LAGL"]}],"recordSet":{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["LAGL-PA_111_Sch_Y"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1","accessDigital":["public"],"digital":{},"durationPhysical":["00:00:43"],"callNumber":["LAGL PA 111 Sch Y13/005 Nr. 647"],"accessPhysical":["onsite"],"physicalCharacteristics":[{"de":[],"fr":[],"it":[],"un":["Bemerkung: Länge Originalfilm 5m und Länge als Digitalisat 00:00:43 - Digitalisat in SD (standard definition)"]}],"colourPhysical":[{"de":[],"fr":[],"it":[],"un":["S/W"]}],"access":["onsite","public"],"published":false,"suggest":{"title":["Falter"],"seriesTitle":["Tieraufnahmen"]},"id":"https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647"} {"title":[{"de":[],"fr":[],"it":[],"un":["Falter"]}],"seriesTitle":[{"de":[],"fr":[],"it":[],"un":["Tieraufnahmen"]}],"type":{"name":{"de":["Film"],"fr":["Film"],"it":["Film"],"un":[]}},"sourceID":"PA_111_Sch_Y13_005_Nr_647","abstract":[{"de":[],"fr":[],"it":[],"un":["Vorspann: Agfa. Falter. <br><br> Beschrieb Schönwetter: Falter."]}],"descriptiveNote":[{"de":[],"fr":[],"it":[],"un":["Um die Filme des Bestands in der Listenansicht in der nach Serien/ Zeitraum bis oder nach 1945/ Filmdauer geordneten Reihenfolge anzuzeigen, ist in \"sortieren nach:\" die Auswahl \"Main-ID aufsteigend\" zu treffen. <a href=\"http://memobase.ch/#find/facets[inst-facet]=[LAGL]&order=4\" target=\"_blank\">http://memobase.ch/#find/facets[inst-facet]=[LAGL]&order=4</a>"]}],"scopeAndContent":[{"de":[],"fr":[],"it":[],"un":["Die archivische Serie \"Tieraufnahmen\" des Filmbestands Schönwetter (Kanton Glarus) umfasst Filmsequenzen, deren Szenen/Inhalte hauptsächlich Aufnahmen von Tieren sind, und zwar auch von Nutztieren und auch anlässlich von Viehschauen. [Verzeichnisreihenfolge innerhalb Serie gemäss Zeitperiode bis oder nach 1945 und pro Zeitperiode gemäss Abfolge Filmdauer]."]}],"rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Landesarchiv des Kantons Glarus"]}],"sameAs":["https://archivverzeichnis.gl.ch/home/#/content/110700fae7994b628665add754139f2c"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["16-mm-Film"],"fr":["Format 16 mm"],"it":["16 millimetri"],"un":[]}}],"genre":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["Aktualitäten"],"fr":["Actualités"],"it":["Attualità"],"un":[]}}],"keywords":{"de":[],"fr":[],"it":[],"un":[]},"personCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Schönwetter Hans Jakob (1906-1997)"]},"relation":{"de":[],"fr":[],"it":[],"un":["Author"]},"filter":"Schönwetter, Hans Jakob (1906-1997)","facet":["0~S~","1~S~Schönwetter, Hans Jakob (1906-1997)~"]}],"personsFacet":["0~S~","1~S~Schönwetter, Hans Jakob (1906-1997)~"],"corporateBodyProducer":[{"name":{"de":[],"fr":[],"it":[],"un":["H.P. Schönwetter"]}}],"dateCreated":[{"date":"/ vermutlich vor 1945 1930/1945","qualifier":["ca."]}],"institution":[{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["LAGL"]}],"recordSet":{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["LAGL-PA_111_Sch_Y"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1","accessDigital":["public"],"digital":{},"durationPhysical":["00:00:43"],"callNumber":["LAGL PA 111 Sch Y13/005 Nr. 647"],"accessPhysical":["onsite"],"physicalCharacteristics":[{"de":[],"fr":[],"it":[],"un":["Bemerkung: Länge Originalfilm 5m und Länge als Digitalisat 00:00:43 - Digitalisat in SD (standard definition)"]}],"colourPhysical":[{"de":[],"fr":[],"it":[],"un":["S/W"]}],"access":["onsite","public"],"published":false,"suggest":{"title":["Falter"],"seriesTitle":["Tieraufnahmen"]},"id":"https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647"}
\ No newline at end of file \ No newline at end of file
{"title":[{"de":[],"fr":[],"it":[],"un":["Anonym -- Armut"]}],"type":"Foto","sourceID":"208576","abstract":[{"de":[],"fr":[],"it":[],"un":["Bildeintrag: auf der Verpackung: 49543<br>"]}],"descriptiveNote":[{"de":[],"fr":[],"it":[],"un":["Datierung: Negativnummer<br>"]}],"rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Burgerbibliothek Bern"]}],"sameAs":["http://katalog.burgerbib.ch/detail.aspx?ID=208576"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["Glasplatte"],"fr":["L'ÉTIQUETTE MANQUANTE"],"it":["GALATEO MANCANTE"],"un":[]}}],"keywords":{"de":[],"fr":[],"it":[],"un":["Armut"]},"personCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Moeglé, Jean"]},"relation":{"de":[],"fr":[],"it":[],"un":["author"]},"filter":"Moeglé, Jean","facet":["0~M~","1~M~Moeglé, Jean~"]}],"personContributor":[{"name":{"de":[],"fr":[],"it":[],"un":["Familie Krebser"]},"relation":{"de":[],"fr":[],"it":[],"un":["Collector/Sammler"]},"filter":"Familie Krebser","facet":["0~F~","1~F~Familie Krebser~"]}],"personsFacet":["0~F~","1~F~Familie Krebser~","0~M~","1~M~Moeglé, Jean~"],"dateCreated":[{"date":"20. Jh."}],"institution":[{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["Burgerbib"]}],"recordSet":{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["Burgerbib-Krebser"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/Burgerbib-Krebser-208576-1","digital":{},"callNumber":["Historische Sammlung Krebser 64/21"],"physicalCharacteristics":[{"de":[],"fr":[],"it":[],"un":["Weite: 165 mm","Höhe: 120 mm"]}],"published":false,"suggest":{"title":["Anonym -- Armut"],"keywords":["Armut"]},"id":"https://memobase.ch/record/Burgerbib-Krebser-208576"} {"title":[{"de":[],"fr":[],"it":[],"un":["Anonym -- Armut"]}],"type":{"name":{"de":["Fotografie"],"fr":["Photographie"],"it":["Fotografia"],"un":[]}},"sourceID":"208576","abstract":[{"de":[],"fr":[],"it":[],"un":["Bildeintrag: auf der Verpackung: 49543<br>"]}],"descriptiveNote":[{"de":[],"fr":[],"it":[],"un":["Datierung: Negativnummer<br>"]}],"rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Burgerbibliothek Bern"]}],"sameAs":["http://katalog.burgerbib.ch/detail.aspx?ID=208576"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["Glasplatte"],"fr":["L'ÉTIQUETTE MANQUANTE"],"it":["GALATEO MANCANTE"],"un":[]}}],"keywords":{"de":[],"fr":[],"it":[],"un":["Armut"]},"personCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Moeglé, Jean"]},"relation":{"de":[],"fr":[],"it":[],"un":["author"]},"filter":"Moeglé, Jean","facet":["0~M~","1~M~Moeglé, Jean~"]}],"personContributor":[{"name":{"de":[],"fr":[],"it":[],"un":["Familie Krebser"]},"relation":{"de":[],"fr":[],"it":[],"un":["Collector/Sammler"]},"filter":"Familie Krebser","facet":["0~F~","1~F~Familie Krebser~"]}],"personsFacet":["0~F~","1~F~Familie Krebser~","0~M~","1~M~Moeglé, Jean~"],"dateCreated":[{"date":"20. Jh."}],"institution":[{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["Burgerbib"]}],"recordSet":{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["Burgerbib-Krebser"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/Burgerbib-Krebser-208576-1","digital":{},"callNumber":["Historische Sammlung Krebser 64/21"],"physicalCharacteristics":[{"de":[],"fr":[],"it":[],"un":["Weite: 165 mm","Höhe: 120 mm"]}],"published":false,"suggest":{"title":["Anonym -- Armut"],"keywords":["Armut"]},"id":"https://memobase.ch/record/Burgerbib-Krebser-208576"}
\ No newline at end of file \ No newline at end of file
{"title":[{"de":[],"fr":[],"it":[],"un":["Tschu Tschu"]}],"type":"Film","sourceID":"162354","abstract":[{"de":[],"fr":[],"it":[],"un":["Dokumentation über die Marzili Bahn, Bern. <br><br>Beinhaltet Cartoon über die Geschichte der Eisenbahn, die verschiedenen Schienen - und Antriebssysteme sowie über die Gründungsgeschichte der Marzili Bahn.<br><br>Details<br>Cartoon: Schriftzug Tschu Tschu, Variationen zum Thema Eisenbahn, Ein Film von Werner Emmisberger, Geschichte der Eisenbahn: 1 Eisenbahn von Georges Steffenson. <br>Beispiele verschiedener Systeme und Probleme: Absurdes, Utopisches und Skuriles.<br>Wasserangetriebenes System der Marzilibahn: mit Wasser gefüllter Bergwagen zieht den leeren Talwagen durch sein Gewicht während der Abfahrt hoch.<br>1884 Gründung des Initiativkommitees der Marzili Bahn AG, Gründungsmitglieder: Rothenbach, Gfeller, Lutzmüller, Morgenthaler, Münger, Salvisberg und Schnydermuggli. <br>Ab 1885, 1 Drahtseilbahn Europas: Marzili Bahn AG, Höhendifferenz 30m, Länge 100m. <br>Ab 1974 kein Wasserantrieb mehr, neue Wagen, elektrisch angetrieben. <br>Div. Ansichten Marzilibahn Aussen und Innen: alte Wagen, neue Wagen, Fahrt, Passagiere, Bahnpersonal, Berg- und Talstation. Longstreet Jazz Band in der Marzilibahn."]}],"rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Lichtspiel / Kinemathek Bern"]}],"sameAs":["http://xray876.server4you.net/suche.lichtspiel/mediaplayer/videoportal_detail.aspx?FilmWorkContentID=162354"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["16-mm-Film"],"fr":["Format 16 mm"],"it":["16 millimetri"],"un":[]}}],"genre":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["FEHLENDES LABEL"],"fr":["L'ÉTIQUETTE MANQUANTE"],"it":["Documentazione"],"un":[]}}],"language":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["FEHLENDES LABEL"],"fr":["L'ÉTIQUETTE MANQUANTE"],"it":["tedesco"],"un":[]},"type":"content"}],"keywords":{"de":[],"fr":[],"it":[],"un":["Eisenbahn","Seilbahn"]},"personCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Werner Emmisberger (Regie)"]},"relation":{"de":[],"fr":[],"it":[],"un":["Author"]},"filter":"(Regie), Werner Emmisberger","facet":["0~R~","1~R~(Regie), Werner Emmisberger~"]}],"personContributor":[{"name":{"de":[],"fr":[],"it":[],"un":["Longstreet Jazz Band"]},"relation":{"de":[],"fr":[],"it":[],"un":["Interpret"]},"filter":"Band, Longstreet Jazz","facet":["0~B~","1~B~Band, Longstreet Jazz~"]}],"personsFacet":["0~B~","1~B~Band, Longstreet Jazz~","0~R~","1~R~(Regie), Werner Emmisberger~"],"placeRelated":[{"name":{"de":[],"fr":[],"it":[],"un":["SZ"]},"filter":"SZ","facet":["0~S~","1~S~SZ~"]}],"placeFacet":["0~S~","1~S~SZ~"],"dateCreated":[{"date":"1973","sort":"1973","facet":["0~20.Jahrhundert~","1~20.Jahrhundert~1971-1980~"]}],"institution":[{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["LS"]}],"recordSet":{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["LS-film"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/LS-film-162354-1","accessDigital":["public"],"digital":{},"durationPhysical":["00:11:00"],"accessPhysical":["onsite"],"physicalCharacteristics":[{"de":[],"fr":[],"it":[],"un":["Verfahren: Länge: 119.00<br>Ton: Magnetton<br>Seitenverhältnis: 1.33<br>Positiv"]}],"colourPhysical":[{"de":[],"fr":[],"it":[],"un":["farbig"]}],"access":["onsite","public"],"published":false,"suggest":{"title":["Tschu Tschu"],"keywords":["Eisenbahn","Seilbahn"]},"id":"https://memobase.ch/record/LS-film-162354"} {"title":[{"de":[],"fr":[],"it":[],"un":["Tschu Tschu"]}],"type":{"name":{"de":["Film"],"fr":["Film"],"it":["Film"],"un":[]}},"sourceID":"162354","abstract":[{"de":[],"fr":[],"it":[],"un":["Dokumentation über die Marzili Bahn, Bern. <br><br>Beinhaltet Cartoon über die Geschichte der Eisenbahn, die verschiedenen Schienen - und Antriebssysteme sowie über die Gründungsgeschichte der Marzili Bahn.<br><br>Details<br>Cartoon: Schriftzug Tschu Tschu, Variationen zum Thema Eisenbahn, Ein Film von Werner Emmisberger, Geschichte der Eisenbahn: 1 Eisenbahn von Georges Steffenson. <br>Beispiele verschiedener Systeme und Probleme: Absurdes, Utopisches und Skuriles.<br>Wasserangetriebenes System der Marzilibahn: mit Wasser gefüllter Bergwagen zieht den leeren Talwagen durch sein Gewicht während der Abfahrt hoch.<br>1884 Gründung des Initiativkommitees der Marzili Bahn AG, Gründungsmitglieder: Rothenbach, Gfeller, Lutzmüller, Morgenthaler, Münger, Salvisberg und Schnydermuggli. <br>Ab 1885, 1 Drahtseilbahn Europas: Marzili Bahn AG, Höhendifferenz 30m, Länge 100m. <br>Ab 1974 kein Wasserantrieb mehr, neue Wagen, elektrisch angetrieben. <br>Div. Ansichten Marzilibahn Aussen und Innen: alte Wagen, neue Wagen, Fahrt, Passagiere, Bahnpersonal, Berg- und Talstation. Longstreet Jazz Band in der Marzilibahn."]}],"rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Lichtspiel / Kinemathek Bern"]}],"sameAs":["http://xray876.server4you.net/suche.lichtspiel/mediaplayer/videoportal_detail.aspx?FilmWorkContentID=162354"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["16-mm-Film"],"fr":["Format 16 mm"],"it":["16 millimetri"],"un":[]}}],"genre":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["FEHLENDES LABEL"],"fr":["L'ÉTIQUETTE MANQUANTE"],"it":["Documentazione"],"un":[]}}],"language":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":[]},"facetLabel":{"de":["FEHLENDES LABEL"],"fr":["L'ÉTIQUETTE MANQUANTE"],"it":["tedesco"],"un":[]},"type":"content"}],"keywords":{"de":[],"fr":[],"it":[],"un":["Eisenbahn","Seilbahn"]},"personCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Werner Emmisberger (Regie)"]},"relation":{"de":[],"fr":[],"it":[],"un":["Author"]},"filter":"(Regie), Werner Emmisberger","facet":["0~R~","1~R~(Regie), Werner Emmisberger~"]}],"personContributor":[{"name":{"de":[],"fr":[],"it":[],"un":["Longstreet Jazz Band"]},"relation":{"de":[],"fr":[],"it":[],"un":["Interpret"]},"filter":"Band, Longstreet Jazz","facet":["0~B~","1~B~Band, Longstreet Jazz~"]}],"personsFacet":["0~B~","1~B~Band, Longstreet Jazz~","0~R~","1~R~(Regie), Werner Emmisberger~"],"placeRelated":[{"name":{"de":[],"fr":[],"it":[],"un":["SZ"]},"filter":"SZ","facet":["0~S~","1~S~SZ~"]}],"placeFacet":["0~S~","1~S~SZ~"],"dateCreated":[{"date":"1973","sort":"1973","facet":["0~20.Jahrhundert~","1~20.Jahrhundert~1971-1980~"]}],"institution":[{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["LS"]}],"recordSet":{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["LS-film"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/LS-film-162354-1","accessDigital":["public"],"digital":{},"durationPhysical":["00:11:00"],"accessPhysical":["onsite"],"physicalCharacteristics":[{"de":[],"fr":[],"it":[],"un":["Verfahren: Länge: 119.00<br>Ton: Magnetton<br>Seitenverhältnis: 1.33<br>Positiv"]}],"colourPhysical":[{"de":[],"fr":[],"it":[],"un":["farbig"]}],"access":["onsite","public"],"published":false,"suggest":{"title":["Tschu Tschu"],"keywords":["Eisenbahn","Seilbahn"]},"id":"https://memobase.ch/record/LS-film-162354"}
\ No newline at end of file \ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment