In order to mitigate against the brute force attacks against Gitlab accounts, we are moving to all edu-ID Logins. We would like to remind you to link your account with your edu-id. Login will be possible only by edu-ID after November 30, 2021. Here you can find the instructions for linking your account.

If you don't have a SWITCH edu-ID, you can create one with this guide here

kind regards

This Server has been upgraded to GitLab release 14.2.6

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

Refactor enriched facet transformation for format, genre & language.

parent 30282701
...@@ -22,9 +22,10 @@ import com.beust.klaxon.JsonObject ...@@ -22,9 +22,10 @@ import com.beust.klaxon.JsonObject
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import org.memobase.builders.* import org.memobase.builders.*
import org.memobase.helpers.* import org.memobase.helpers.*
import org.memobase.model.DocumentsSearchDoc
import org.memobase.model.EnrichedDigitalMetadata import org.memobase.model.EnrichedDigitalMetadata
import org.memobase.model.LanguageContainer
import org.memobase.model.Schema import org.memobase.model.Schema
import org.memobase.model.DocumentsSearchDoc
import org.memobase.rdf.NS import org.memobase.rdf.NS
class DocumentsSearchDocBuilder(private val mediaUrl: String) { class DocumentsSearchDocBuilder(private val mediaUrl: String) {
...@@ -37,7 +38,8 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) { ...@@ -37,7 +38,8 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
val physicalObject = val physicalObject =
input.values.firstOrNull { it["@type"] == NS.rico + "Instantiation" && it["type"] == "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 publishedByIds = Extract.identifiers(record[KEYS.publishedBy])
val producerIds = Extract.identifiers(record[KEYS.producer]) val producerIds = Extract.identifiers(record[KEYS.producer])
val spatialIds = Extract.identifiers(record[KEYS.spatial]) val spatialIds = Extract.identifiers(record[KEYS.spatial])
...@@ -47,26 +49,28 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) { ...@@ -47,26 +49,28 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
val temporalIds = Extract.identifiers(record[KEYS.temporal]) val temporalIds = Extract.identifiers(record[KEYS.temporal])
val personFacetBuilder = PersonFacetBuilder() 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 publisherPersonBuilder = AgentContainerBuilder(publishedByIds, KEYS.Person, null, input)
val producersPersonBuilder = AgentContainerBuilder(producerIds, KEYS.Person, null, input) val producersPersonBuilder = AgentContainerBuilder(producerIds, KEYS.Person, null, input)
val contributorPersonBuilder = AgentContainerBuilder(emptyList(), KEYS.Person, KEYS.contributor, input) val contributorPersonBuilder = AgentContainerBuilder(emptyList(), KEYS.Person, KEYS.contributor, input)
val creatorPersonBuilder = AgentContainerBuilder(emptyList(), KEYS.Person, KEYS.creator, 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 publisherCorporateBodyBuilder = AgentContainerBuilder(publishedByIds, KEYS.CorporateBody, null, input)
val producersCorporateBodyBuilder = AgentContainerBuilder(producerIds, 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 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 publisherAgentBuilder = AgentContainerBuilder(publishedByIds, KEYS.Agent, null, input)
val producersAgentBuilder = AgentContainerBuilder(producerIds, KEYS.Agent, null, input) val producersAgentBuilder = AgentContainerBuilder(producerIds, KEYS.Agent, null, input)
val contributorAgentBuilder = AgentContainerBuilder(emptyList(), KEYS.Agent, KEYS.contributor, input) val contributorAgentBuilder = AgentContainerBuilder(emptyList(), KEYS.Agent, KEYS.contributor, input)
val creatorAgentBuilder = AgentContainerBuilder(emptyList(), KEYS.Agent, KEYS.creator, input) val creatorAgentBuilder = AgentContainerBuilder(emptyList(), KEYS.Agent, KEYS.creator, input)
val placesRelatedBuilder = FacettedContainerBuilder(spatialIds, KEYS.Place, KEYS.name, FacetBuildHelpers::place) 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() val placeFacetBuilder = PlaceFacetBuilder()
...@@ -74,11 +78,15 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) { ...@@ -74,11 +78,15 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
val dateIssuedBuilder = DateContainerBuilder(dateIssuedIds) val dateIssuedBuilder = DateContainerBuilder(dateIssuedIds)
val temporalBuilder = DateContainerBuilder(temporalIds) val temporalBuilder = DateContainerBuilder(temporalIds)
val suggestContainerBuilder = SuggestContainerBuilder(hasSubjectIds) val suggestContainerBuilder = SuggestContainerBuilder(keywordIds)
val digitalIdentifierReferences = Extract.identifiers(digitalObject?.get("identifiedBy")) val digitalIdentifierReferences = Extract.identifiers(digitalObject?.get("identifiedBy"))
val digitalIdentifierEntities = mutableListOf<JsonObject>() 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 val id = record["@id"] as String
for (item in input.entries) { for (item in input.entries) {
...@@ -106,7 +114,10 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) { ...@@ -106,7 +114,10 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
dateCreatedBuilder, dateCreatedBuilder,
dateIssuedBuilder, dateIssuedBuilder,
temporalBuilder, temporalBuilder,
suggestContainerBuilder suggestContainerBuilder,
formats,
genres,
languages
)) { )) {
if (builder.filter(item.value)) { if (builder.filter(item.value)) {
builder.append(id, item.value) builder.append(id, item.value)
...@@ -119,10 +130,8 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) { ...@@ -119,10 +130,8 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
val recordIdentifiers = Filter.entitiesByProperty("identifiedBy", record, input) val recordIdentifiers = Filter.entitiesByProperty("identifiedBy", record, input)
val recordTitles = Filter.entitiesByProperty("hasTitle", record, input) val recordTitles = Filter.entitiesByProperty("hasTitle", record, input)
val recordLanguages = Filter.entitiesByProperty("hasLanguage", record, input)
val recordRules = Filter.entitiesByProperty("regulatedBy", record, input) val recordRules = Filter.entitiesByProperty("regulatedBy", record, input)
val genre = Filter.entitiesByProperty("hasGenre", record, input)
val subjects = Filter.entitiesByProperty("hasSubject", record, input) val subjects = Filter.entitiesByProperty("hasSubject", record, input)
val digitalRules = Filter.entitiesByProperty("regulatedBy", digitalObject, input) val digitalRules = Filter.entitiesByProperty("regulatedBy", digitalObject, input)
...@@ -134,10 +143,6 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) { ...@@ -134,10 +143,6 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
val accessDigital = Extract.typedEntityByType(digitalRules, "type", "access", "name").flatMap { it.toList() } val accessDigital = Extract.typedEntityByType(digitalRules, "type", "access", "name").flatMap { it.toList() }
val usageDigital = Extract.typedEntityByType(digitalRules, "type", "usage", "sameAs").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 locator = try {
val value = Extract.extractIdValue(digitalIdentifierEntities, KEYS.IdentifierType.main) val value = Extract.extractIdValue(digitalIdentifierEntities, KEYS.IdentifierType.main)
...@@ -200,15 +205,16 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) { ...@@ -200,15 +205,16 @@ class DocumentsSearchDocBuilder(private val mediaUrl: String) {
rightsHolder = Extract.typedEntityByType(recordRules, "type", "holder", "name"), rightsHolder = Extract.typedEntityByType(recordRules, "type", "holder", "name"),
memoriavClaim = record["P60451"] != null, memoriavClaim = record["P60451"] != null,
languageCaption = Extract.typedEntityByType(recordLanguages, "type", "caption", "name"), format = formats.build(),
languageContent = Extract.typedEntityByType(recordLanguages, "type", "content", "name"), language = languages.build(),
genre = genres.build(),
format = format,
language = Extract.facetEntity(recordLanguages, "name"),
genre = Extract.facetEntity(genre, "prefLabel"),
keywords = Extract.facetEntity(subjects, "prefLabel"),
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(), personSubject = subjectPersonBuilder.build(),
personProducer = producersPersonBuilder.build(), personProducer = producersPersonBuilder.build(),
personPublisher = publisherPersonBuilder.build(), personPublisher = publisherPersonBuilder.build(),
......
...@@ -16,28 +16,45 @@ ...@@ -16,28 +16,45 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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 com.beust.klaxon.JsonObject
import org.memobase.model.FacetContainer import com.fasterxml.jackson.module.kotlin.jacksonTypeRef
import org.memobase.helpers.Extract
object CarrierType { import org.memobase.helpers.KEYS
fun extract(items: List<JsonObject>): List<FacetContainer> { import org.memobase.model.EnrichedFacetContainer
return items.map { import org.memobase.model.LanguageContainer
Extract.listOfStrings(it["sameAs"]).let { value -> import org.memobase.rdf.NS
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>()
object EnrichedFacetContainers { 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 { ...@@ -24,62 +24,74 @@ object KEYS {
const val institutionTypeLabelsPath = "institutionTypeLabelsPath" const val institutionTypeLabelsPath = "institutionTypeLabelsPath"
} }
const val teaserColor = "teaserColor"
const val teaserColorComputed = "teaserColorComputed"
const val entityId = "@id" const val entityId = "@id"
const val atType = "@type" const val atType = "@type"
// internal values
const val isPublished = "isPublished" const val isPublished = "isPublished"
const val teaserColor = "teaserColor"
const val teaserColorComputed = "teaserColorComputed"
// Namespace rico:
const val ricoType = "type" const val ricoType = "type"
const val firstName = "firstName" const val firstName = "firstName"
const val lastName = "lastName" const val lastName = "lastName"
const val name = "name" const val name = "name"
const val title = "title" const val title = "title"
const val prefLabel = "prefLabel"
const val descriptiveNote = "descriptiveNote" const val descriptiveNote = "descriptiveNote"
const val isHolderOf = "isHolderOf" const val isHolderOf = "isHolderOf"
const val resultsFrom = "resultsFrom"
const val agentIsTargetOfCreationRelation = "agentIsTargetOfCreationRelation" const val agentIsTargetOfCreationRelation = "agentIsTargetOfCreationRelation"
const val hasSubject = "hasSubject"
const val hasLocation = "hasLocation"
const val placeOfCapture = "P60556"
const val spatial = "spatial" const val spatial = "spatial"
const val producer = "P60441"
const val publishedBy = "publishedBy" const val publishedBy = "publishedBy"
const val isPartOf = "isPartOf" const val isPartOf = "isPartOf"
const val heldBy = "heldBy" const val heldBy = "heldBy"
const val contributor = "contributor"
const val creator = "creator"
const val identifiedBy = "identifiedBy" const val identifiedBy = "identifiedBy"
const val hasSubject = "hasSubject"
const val hasLocation = "hasLocation"
// rico classes
const val Person = "Person" const val Person = "Person"
const val CorporateBody = "CorporateBody" const val CorporateBody = "CorporateBody"
const val Agent = "Agent" const val Agent = "Agent"
const val CarrierType = "CarrierType"
const val Language = "Language"
const val Place = "Place" const val Place = "Place"
const val Title = "Title" const val Title = "Title"
// Dates
const val DateSet = "DateSet" const val DateSet = "DateSet"
const val DateRange = "DateRange" const val DateRange = "DateRange"
const val SingleDate = "SingleDate" const val SingleDate = "SingleDate"
const val issued = "issued"
const val created = "created"
const val temporal = "temporal"
const val Instantiation = "Instantiation" const val Instantiation = "Instantiation"
const val Record = "Record" const val Record = "Record"
// namespace rda:
const val placeOfCapture = "P60556"
const val producer = "P60441"
// namespace skos:
const val prefLabel = "prefLabel"
const val Concept = "Concept" 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 wikidataInstance = "P31"
const val wikidataAddresses = "P6375" const val wikidataAddresses = "P6375"
const val wikidataPostalCodes = "P281" const val wikidataPostalCodes = "P281"
const val wikidataImage = "P18" const val wikidataImage = "P18"
// namespace ebucore:
const val hasGenre = "hasGenre"
const val missingLabelDe = "FEHLENDES LABEL" const val missingLabelDe = "FEHLENDES LABEL"
const val missingLabelFr = "L'ÉTIQUETTE MANQUANTE" const val missingLabelFr = "L'ÉTIQUETTE MANQUANTE"
const val missingLabelIt = "GALATEO MANCANTE" const val missingLabelIt = "GALATEO MANCANTE"
......
...@@ -42,11 +42,10 @@ data class DocumentsSearchDoc( ...@@ -42,11 +42,10 @@ data class DocumentsSearchDoc(
val sameAs: List<String>, val sameAs: List<String>,
// Concepts // Concepts
val genre: List<FacetContainer>, val format: List<EnrichedFacetContainer>,
val keywords: List<FacetContainer>, val genre: List<EnrichedFacetContainer>,
val languageContent: List<LanguageContainer>, val language: List<EnrichedFacetContainer>,
val languageCaption: List<LanguageContainer>, val keywords: LanguageContainer,
val language: List<FacetContainer>,
// Agents // Agents
val personSubject: List<AgentWithRelationContainer>, val personSubject: List<AgentWithRelationContainer>,
...@@ -105,7 +104,6 @@ data class DocumentsSearchDoc( ...@@ -105,7 +104,6 @@ data class DocumentsSearchDoc(
val colourPhysical: List<LanguageContainer>, val colourPhysical: List<LanguageContainer>,
val usageConditionsPhysical: List<LanguageContainer>, val usageConditionsPhysical: List<LanguageContainer>,
val physicalObjectNote: List<LanguageContainer>, val physicalObjectNote: List<LanguageContainer>,
val format: List<FacetContainer>,
// Combined // Combined
val access: List<String>, val access: List<String>,
...@@ -135,8 +133,7 @@ data class DocumentsSearchDoc( ...@@ -135,8 +133,7 @@ data class DocumentsSearchDoc(
emptyList(), emptyList(),
emptyList(), emptyList(),
emptyList(), emptyList(),
emptyList(), LanguageContainer.EMPTY,
emptyList(),
emptyList(), emptyList(),
emptyList(), emptyList(),
emptyList(), emptyList(),
...@@ -180,7 +177,6 @@ data class DocumentsSearchDoc( ...@@ -180,7 +177,6 @@ data class DocumentsSearchDoc(
emptyList(), emptyList(),
emptyList(), emptyList(),
emptyList(), emptyList(),
emptyList(),
false, false,
SuggestContainer(emptyList(), emptyList(), emptyList(), emptyList()) SuggestContainer(emptyList(), emptyList(), emptyList(), emptyList())
) )
......
...@@ -69,4 +69,13 @@ data class LanguageContainer( ...@@ -69,4 +69,13 @@ data class LanguageContainer(
else -> "" 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"} {"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 \ 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"} {"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 \ 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"} {"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 \ 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