Upgrade to new Gitlab Version 13.9 on Saturday 19th April 20:00. Expect an interruption of about 30 to 60 minutes

Commit ecb0ffc2 authored by Jonas Waeber's avatar Jonas Waeber

Merge branch 'feature/add-enriched-facet-containers'

parents 1696608d f68e7493
Pipeline #17618 passed with stages
in 5 minutes and 5 seconds
......@@ -22,9 +22,10 @@ import com.beust.klaxon.JsonObject
import org.apache.logging.log4j.LogManager
import org.memobase.builders.*
import org.memobase.helpers.*
import org.memobase.model.DocumentsSearchDoc
import org.memobase.model.EnrichedDigitalMetadata
import org.memobase.model.LanguageContainer
import org.memobase.model.Schema
import org.memobase.model.DocumentsSearchDoc
import org.memobase.rdf.NS
class DocumentsSearchDocBuilder(private val mediaUrl: String) {
......@@ -37,7 +38,8 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
val physicalObject =
input.values.firstOrNull { it["@type"] == NS.rico + "Instantiation" && it["type"] == "physicalObject" }
val hasSubjectIds = Extract.identifiers(record[KEYS.hasSubject])
val keywordIds = Extract.identifiers(record[KEYS.hasSubject])
val genreIds = Extract.identifiers(record[KEYS.hasGenre])
val publishedByIds = Extract.identifiers(record[KEYS.publishedBy])
val producerIds = Extract.identifiers(record[KEYS.producer])
val spatialIds = Extract.identifiers(record[KEYS.spatial])
......@@ -47,26 +49,28 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
val temporalIds = Extract.identifiers(record[KEYS.temporal])
val personFacetBuilder = PersonFacetBuilder()
val subjectPersonBuilder = AgentContainerBuilder(hasSubjectIds, KEYS.Person, null, input)
val subjectPersonBuilder = AgentContainerBuilder(keywordIds, KEYS.Person, null, input)
val publisherPersonBuilder = AgentContainerBuilder(publishedByIds, KEYS.Person, null, input)
val producersPersonBuilder = AgentContainerBuilder(producerIds, KEYS.Person, null, input)
val contributorPersonBuilder = AgentContainerBuilder(emptyList(), KEYS.Person, KEYS.contributor, input)
val creatorPersonBuilder = AgentContainerBuilder(emptyList(), KEYS.Person, KEYS.creator, input)
val subjectCorporateBodyBuilder = AgentContainerBuilder(hasSubjectIds, KEYS.CorporateBody, null, input)
val subjectCorporateBodyBuilder = AgentContainerBuilder(keywordIds, KEYS.CorporateBody, null, input)
val publisherCorporateBodyBuilder = AgentContainerBuilder(publishedByIds, KEYS.CorporateBody, null, input)
val producersCorporateBodyBuilder = AgentContainerBuilder(producerIds, KEYS.CorporateBody, null, input)
val contributorCorporateBodyBuilder = AgentContainerBuilder(emptyList(), KEYS.CorporateBody, KEYS.contributor, input)
val contributorCorporateBodyBuilder =
AgentContainerBuilder(emptyList(), KEYS.CorporateBody, KEYS.contributor, input)
val creatorCorporateBodyBuilder = AgentContainerBuilder(emptyList(), KEYS.CorporateBody, KEYS.creator, input)
val subjectAgentBuilder = AgentContainerBuilder(hasSubjectIds, KEYS.Agent, null, input)
val subjectAgentBuilder = AgentContainerBuilder(keywordIds, KEYS.Agent, null, input)
val publisherAgentBuilder = AgentContainerBuilder(publishedByIds, KEYS.Agent, null, input)
val producersAgentBuilder = AgentContainerBuilder(producerIds, KEYS.Agent, null, input)
val contributorAgentBuilder = AgentContainerBuilder(emptyList(), KEYS.Agent, KEYS.contributor, input)
val creatorAgentBuilder = AgentContainerBuilder(emptyList(), KEYS.Agent, KEYS.creator, input)
val placesRelatedBuilder = FacettedContainerBuilder(spatialIds, KEYS.Place, KEYS.name, FacetBuildHelpers::place)
val placeCapturedBuilder = FacettedContainerBuilder(placeOfCaptureIds, KEYS.Place, KEYS.name, FacetBuildHelpers::place)
val placeCapturedBuilder =
FacettedContainerBuilder(placeOfCaptureIds, KEYS.Place, KEYS.name, FacetBuildHelpers::place)
val placeFacetBuilder = PlaceFacetBuilder()
......@@ -74,11 +78,15 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
val dateIssuedBuilder = DateContainerBuilder(dateIssuedIds)
val temporalBuilder = DateContainerBuilder(temporalIds)
val suggestContainerBuilder = SuggestContainerBuilder(hasSubjectIds)
val suggestContainerBuilder = SuggestContainerBuilder(keywordIds)
val digitalIdentifierReferences = Extract.identifiers(digitalObject?.get("identifiedBy"))
val digitalIdentifierEntities = mutableListOf<JsonObject>()
val formats = EnrichedFacetContainerBuilder(emptyList(), NS.rico + KEYS.CarrierType, KEYS.name)
val languages = EnrichedFacetContainerBuilder(emptyList(), NS.rico + KEYS.Language, KEYS.name)
val genres = EnrichedFacetContainerBuilder(genreIds, NS.skos + KEYS.Concept, KEYS.prefLabel)
val id = record["@id"] as String
for (item in input.entries) {
......@@ -106,7 +114,10 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
dateCreatedBuilder,
dateIssuedBuilder,
temporalBuilder,
suggestContainerBuilder
suggestContainerBuilder,
formats,
genres,
languages
)) {
if (builder.filter(item.value)) {
builder.append(id, item.value)
......@@ -119,10 +130,8 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
val recordIdentifiers = Filter.entitiesByProperty("identifiedBy", record, input)
val recordTitles = Filter.entitiesByProperty("hasTitle", record, input)
val recordLanguages = Filter.entitiesByProperty("hasLanguage", record, input)
val recordRules = Filter.entitiesByProperty("regulatedBy", record, input)
val genre = Filter.entitiesByProperty("hasGenre", record, input)
val subjects = Filter.entitiesByProperty("hasSubject", record, input)
val digitalRules = Filter.entitiesByProperty("regulatedBy", digitalObject, input)
......@@ -134,10 +143,6 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
val accessDigital = Extract.typedEntityByType(digitalRules, "type", "access", "name").flatMap { it.toList() }
val usageDigital = Extract.typedEntityByType(digitalRules, "type", "usage", "sameAs").flatMap { it.toList() }
val format = CarrierType.extract(Filter.entitiesByProperty("hasCarrierType", physicalObject, input))
if (format.isEmpty()) {
log.error("Found no carrier types for record $id.")
}
val locator = try {
val value = Extract.extractIdValue(digitalIdentifierEntities, KEYS.IdentifierType.main)
......@@ -199,12 +204,17 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
placeFacet = placeFacetBuilder.build(),
rightsHolder = Extract.typedEntityByType(recordRules, "type", "holder", "name"),
memoriavClaim = record["P60451"] != null,
languageCaption = Extract.typedEntityByType(recordLanguages, "type", "caption", "name"),
languageContent = Extract.typedEntityByType(recordLanguages, "type", "content", "name"),
language = Extract.facetEntity(recordLanguages, "name"),
genre = Extract.facetEntity(genre, "prefLabel"),
keywords = Extract.facetEntity(subjects, "prefLabel"),
format = formats.build(),
language = languages.build(),
genre = genres.build(),
keywords = subjects.flatMap { Extract.languageContainer("hasSubject", it[KEYS.prefLabel]) }.let {
if (it.isEmpty())
LanguageContainer.EMPTY
else
it.reduce { acc, languageContainer -> acc.merge(languageContainer)
}},
personSubject = subjectPersonBuilder.build(),
personProducer = producersPersonBuilder.build(),
personPublisher = publisherPersonBuilder.build(),
......@@ -258,7 +268,6 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
usagePhysical = Extract.typedEntityByType(physicalRules, "type", "usage", "sameAs").flatMap { it.toList() },
callNumber = Extract.typedEntityByType(physicalIdentifiers, "type", "callNumber", "identifier")
.flatMap { it.toList() },
format = format,
published = (record[KEYS.isPublished] as Boolean?) ?: false,
suggest = suggestContainerBuilder.build()[0]
)
......
......@@ -16,22 +16,45 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.memobase.helpers
package org.memobase.builders
import com.beust.klaxon.JsonObject
import org.memobase.model.FacetContainer
import com.fasterxml.jackson.module.kotlin.jacksonTypeRef
import org.memobase.helpers.Extract
import org.memobase.helpers.KEYS
import org.memobase.model.EnrichedFacetContainer
import org.memobase.model.LanguageContainer
import org.memobase.rdf.NS
object CarrierType {
fun extract(items: List<JsonObject>): List<FacetContainer> {
return items.map {
Extract.listOfStrings(it["sameAs"]).let { value ->
val name = Extract.languageContainer("carrierType", it["name"]).reduce { acc, languageContainer -> acc.merge(languageContainer) }
if (value.isEmpty()) {
FacetContainer(name, null, emptyList())
} else {
FacetContainer(name, null, value)
}
}
}
/**
*
*/
class EnrichedFacetContainerBuilder(
private val identifiers: List<String>,
private val targetType: String,
private val nameProperty: String
) : IFieldBuilder {
private val containers = mutableListOf<EnrichedFacetContainer>()
override fun filter(jsonObject: JsonObject): Boolean {
if (jsonObject[KEYS.atType] != targetType) return false
// Filter any values of this type which were not enriched. These will be found via the resultsFrom link.
if (!jsonObject.containsKey(KEYS.resultsFrom)) return false
if (identifiers.isNotEmpty()) return identifiers.contains(jsonObject[KEYS.entityId])
return true
}
override fun append(key: String, jsonObject: JsonObject): String {
val names = Extract.languageContainer(targetType, jsonObject[nameProperty])
.reduce { acc, languageContainer -> acc.merge(languageContainer) }.fillInEmpty()
val ricoType = jsonObject[KEYS.ricoType] as String?
containers.add(
EnrichedFacetContainer(LanguageContainer.EMPTY, names, ricoType)
)
return ""
}
override fun build(): List<EnrichedFacetContainer> {
return containers
}
}
......@@ -24,62 +24,74 @@ object KEYS {
const val institutionTypeLabelsPath = "institutionTypeLabelsPath"
}
const val teaserColor = "teaserColor"
const val teaserColorComputed = "teaserColorComputed"
const val entityId = "@id"
const val atType = "@type"
// internal values
const val isPublished = "isPublished"
const val teaserColor = "teaserColor"
const val teaserColorComputed = "teaserColorComputed"
// Namespace rico:
const val ricoType = "type"
const val firstName = "firstName"
const val lastName = "lastName"
const val name = "name"
const val title = "title"
const val prefLabel = "prefLabel"
const val descriptiveNote = "descriptiveNote"
const val isHolderOf = "isHolderOf"
const val resultsFrom = "resultsFrom"
const val agentIsTargetOfCreationRelation = "agentIsTargetOfCreationRelation"
const val hasSubject = "hasSubject"
const val hasLocation = "hasLocation"
const val placeOfCapture = "P60556"
const val spatial = "spatial"
const val producer = "P60441"
const val publishedBy = "publishedBy"
const val isPartOf = "isPartOf"
const val heldBy = "heldBy"
const val contributor = "contributor"
const val creator = "creator"
const val identifiedBy = "identifiedBy"
const val hasSubject = "hasSubject"
const val hasLocation = "hasLocation"
// rico classes
const val Person = "Person"
const val CorporateBody = "CorporateBody"
const val Agent = "Agent"
const val CarrierType = "CarrierType"
const val Language = "Language"
const val Place = "Place"
const val Title = "Title"
// Dates
const val DateSet = "DateSet"
const val DateRange = "DateRange"
const val SingleDate = "SingleDate"
const val issued = "issued"
const val created = "created"
const val temporal = "temporal"
const val Instantiation = "Instantiation"
const val Record = "Record"
// namespace rda:
const val placeOfCapture = "P60556"
const val producer = "P60441"
// namespace skos:
const val prefLabel = "prefLabel"
const val Concept = "Concept"
// rico:type for rico:Agent
const val contributor = "contributor"
const val creator = "creator"
// namespace dct:
const val issued = "issued"
const val created = "created"
const val temporal = "temporal"
// namespace wdt:
const val wikidataInstance = "P31"
const val wikidataAddresses = "P6375"
const val wikidataPostalCodes = "P281"
const val wikidataImage = "P18"
// namespace ebucore:
const val hasGenre = "hasGenre"
const val missingLabelDe = "FEHLENDES LABEL"
const val missingLabelFr = "L'ÉTIQUETTE MANQUANTE"
const val missingLabelIt = "GALATEO MANCANTE"
......
......@@ -42,11 +42,10 @@ data class DocumentsSearchDoc(
val sameAs: List<String>,
// Concepts
val genre: List<FacetContainer>,
val keywords: List<FacetContainer>,
val languageContent: List<LanguageContainer>,
val languageCaption: List<LanguageContainer>,
val language: List<FacetContainer>,
val format: List<EnrichedFacetContainer>,
val genre: List<EnrichedFacetContainer>,
val language: List<EnrichedFacetContainer>,
val keywords: LanguageContainer,
// Agents
val personSubject: List<AgentWithRelationContainer>,
......@@ -105,7 +104,6 @@ data class DocumentsSearchDoc(
val colourPhysical: List<LanguageContainer>,
val usageConditionsPhysical: List<LanguageContainer>,
val physicalObjectNote: List<LanguageContainer>,
val format: List<FacetContainer>,
// Combined
val access: List<String>,
......@@ -135,8 +133,7 @@ data class DocumentsSearchDoc(
emptyList(),
emptyList(),
emptyList(),
emptyList(),
emptyList(),
LanguageContainer.EMPTY,
emptyList(),
emptyList(),
emptyList(),
......@@ -180,7 +177,6 @@ data class DocumentsSearchDoc(
emptyList(),
emptyList(),
emptyList(),
emptyList(),
false,
SuggestContainer(emptyList(), emptyList(), emptyList(), emptyList())
)
......
package org.memobase.model
import com.fasterxml.jackson.annotation.JsonInclude
@JsonInclude(JsonInclude.Include.NON_EMPTY)
data class EnrichedFacetContainer(
val displayLabel: LanguageContainer,
val facetLabel: LanguageContainer,
val type: String?
)
\ No newline at end of file
......@@ -69,4 +69,13 @@ data class LanguageContainer(
else -> ""
}
}
fun fillInEmpty(): LanguageContainer {
return LanguageContainer(
if (de.isEmpty()) listOf(KEYS.missingLabelDe) else de,
if (fr.isEmpty()) listOf(KEYS.missingLabelFr) else fr,
if (it.isEmpty()) listOf(KEYS.missingLabelIt) else it,
un
)
}
}
This diff is collapsed.
{"title":[{"de":[],"fr":[],"it":[],"un":["Bern: Altstadt, obere; Bundesplatz 4; Bärenplatz (31); Käfiggässchen; -- Fuhrwerk; Automobil; Lastwagen; Transport, Verkehr; Strassenbeleuchtung"]}],"type":"Foto","sourceID":"216133","descriptiveNote":[{"de":[],"fr":[],"it":[],"un":["Datierung: Bundesplatz / Büren-Besitzung<br>"]}],"rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Burgerbibliothek Bern"]}],"sameAs":["http://katalog.burgerbib.ch/detail.aspx?ID=216133"],"keywords":[{"name":{"de":[],"fr":[],"it":[],"un":["Transport, Verkehr"]},"facet":["Transport, Verkehr"]}],"personCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Anonym"]},"relation":{"de":[],"fr":[],"it":[],"un":["author"]},"filter":"Anonym","facet":["0~A~","1~A~Anonym~"]}],"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~A~","1~A~Anonym~","0~F~","1~F~Familie Krebser~"],"placeRelated":[{"name":{"de":[],"fr":[],"it":[],"un":["Käfiggässchen"]},"filter":"Käfiggässchen","facet":["0~K~","1~K~Käfiggässchen~"]}],"placeFacet":["0~K~","1~K~Käfiggässchen~"],"dateCreated":[{"date":"1900/1909"}],"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-216133-1","digital":{},"callNumber":["Historische Sammlung Krebser 13/2"],"physicalCharacteristics":[{"de":[],"fr":[],"it":[],"un":["Weite: 85 mm","Höhe: 100 mm"]}],"format":[{"name":{"de":["Glasplatte"],"fr":[],"it":[],"un":[]},"facet":["http://www.wikidata.org/entity/Q1138868"]},{"name":{"de":[],"fr":[],"it":[],"un":["Glasplatte"]}}],"published":false,"suggest":{"title":["Bern: Altstadt, obere; Bundesplatz 4; Bärenplatz (31); Käfiggässchen; -- Fuhrwerk; Automobil; Lastwagen; Transport, Verkehr; Strassenbeleuchtung"],"keywords":["Transport, Verkehr"]},"id":"https://memobase.ch/record/Burgerbib-Krebser-216133"}
\ 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"}
\ No newline at end of file
This diff is collapsed.
{"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"],"keywords":[{"name":{"de":[],"fr":[],"it":[],"un":["Armut"]},"facet":["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"]}],"format":[{"name":{"de":["Glasplatte"],"fr":[],"it":[],"un":[]},"facet":["http://www.wikidata.org/entity/Q1138868"]},{"name":{"de":[],"fr":[],"it":[],"un":["Glasplatte"]}}],"published":false,"suggest":{"title":["Anonym -- Armut"],"keywords":["Armut"]},"id":"https://memobase.ch/record/Burgerbib-Krebser-208576"}
\ 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"}
\ 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"],"genre":[{"name":{"de":[],"fr":[],"it":[],"un":["Dokumentar"]},"facet":["Dokumentar"]},{"name":{"de":[],"fr":[],"it":["Documentazione"],"un":[]},"facet":["Documentazione"]}],"keywords":[{"name":{"de":[],"fr":[],"it":[],"un":["Eisenbahn"]},"facet":["Eisenbahn"]},{"name":{"de":[],"fr":[],"it":[],"un":["Seilbahn"]},"facet":["Seilbahn"]}],"languageContent":[{"de":[],"fr":[],"it":[],"un":["deu"]},{"de":[],"fr":[],"it":["tedesco"],"un":[]}],"language":[{"name":{"de":[],"fr":[],"it":[],"un":["deu"]},"facet":["deu"]},{"name":{"de":[],"fr":[],"it":["tedesco"],"un":[]},"facet":["tedesco"]}],"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"]}],"format":[{"name":{"de":["16-mm-Film"],"fr":["Format 16 mm"],"it":["16 millimetri"],"un":[]},"facet":["http://www.wikidata.org/entity/Q194383"]},{"name":{"de":[],"fr":[],"it":[],"un":["16mm Triacetat"]}}],"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
{"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"}
\ 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