Commit 1a09f438 authored by Jonas Waeber's avatar Jonas Waeber
Browse files

Documents now retrieve the record set name and institution names.

parent 235805bb
Pipeline #24670 passed with stages
in 5 minutes and 7 seconds
......@@ -30,6 +30,7 @@ import org.memobase.builders.PersonFacetBuilder
import org.memobase.builders.PlaceFacetBuilder
import org.memobase.builders.SuggestContainerBuilder
import org.memobase.helpers.AspectRatio
import org.memobase.helpers.ElasticSearchWrapper
import org.memobase.helpers.Extract
import org.memobase.helpers.FacetBuildHelpers
import org.memobase.helpers.Filter
......@@ -39,11 +40,13 @@ import org.memobase.helpers.KEYS
import org.memobase.helpers.TranslationMappers
import org.memobase.model.DocumentsSearchDoc
import org.memobase.model.EnrichedDigitalMetadata
import org.memobase.model.FacetContainer
import org.memobase.model.LanguageContainer
import org.memobase.model.Schema
class DocumentsSearchDocBuilder(
private val translationMappers: TranslationMappers,
private val elasticSearchWrapper: ElasticSearchWrapper,
private val mediaUrl: String
) {
private val log = LogManager.getLogger("SearchDocTransform")
......@@ -213,6 +216,8 @@ class DocumentsSearchDocBuilder(
}
}
val recordSetId = extractRecordSet(record)
return DocumentsSearchDoc(
title = Extract.typedEntityByType(recordTitles, "type", "main", "title"),
seriesTitle = Extract.typedEntityByType(recordTitles, "type", "series", "title"),
......@@ -233,10 +238,20 @@ class DocumentsSearchDocBuilder(
sameAs = Extract.listOfStrings(record["sameAs"]),
abstract = Extract.languageContainer("abstract (record id: $key)", record["abstract"]),
recordId = key,
institution = extractInstitution(record),
recordSet = extractRecordSet(record),
descriptiveNote = Extract.languageContainer("descriptiveNote (record id: $key)", record["descriptiveNote"]),
scopeAndContent = Extract.languageContainer("scopeAndContent (record id: $key)", record["scopeAndContent"]),
institution = extractInstitution(record).map { value -> elasticSearchWrapper.getInstitutionName(value) },
recordSet = FacetContainer(
elasticSearchWrapper.getRecordSetName(recordSetId),
null,
if (recordSetId != "") listOf(recordSetId) else emptyList()
),
descriptiveNote = Extract.languageContainer(
"descriptiveNote (record id: $key)",
record["descriptiveNote"]
),
scopeAndContent = Extract.languageContainer(
"scopeAndContent (record id: $key)",
record["scopeAndContent"]
),
relatedMaterial = Extract.languageContainer("relation (record id: $key)", record["relation"]),
source = Extract.languageContainer("source (record id: $key)", record["source"]),
temporal = temporalBuilder.build(),
......@@ -315,12 +330,16 @@ class DocumentsSearchDocBuilder(
"physicalCharacteristics",
physicalObject?.get("physicalCharacteristics")
),
physicalObjectNote = Extract.languageContainer("descriptiveNote", physicalObject?.get("descriptiveNote")),
physicalObjectNote = Extract.languageContainer(
"descriptiveNote",
physicalObject?.get("descriptiveNote")
),
usageConditionsPhysical = Extract.languageContainer(
"conditionsOfUse",
physicalObject?.get("conditionsOfUse")
),
usagePhysical = Extract.typedEntityByType(physicalRules, "type", "usage", "sameAs").flatMap { it.toList() },
usagePhysical = Extract.typedEntityByType(physicalRules, "type", "usage", "sameAs")
.flatMap { it.toList() },
callNumber = Extract.typedEntityByType(physicalIdentifiers, "type", "callNumber", "identifier")
.flatMap { it.toList() },
published = (record[KEYS.isPublished] as Boolean?) ?: false,
......
......@@ -53,7 +53,7 @@ class KafkaTopology(
private val updateTopic = appSettings.getProperty(SettingsProps.updateTopic)
private val reportTopic = settings.processReportTopic
private val documentSearchDocBuilder = DocumentsSearchDocBuilder(translationMappers, mediaUrl)
private val documentSearchDocBuilder = DocumentsSearchDocBuilder(translationMappers, elasticSearchWrapper, mediaUrl)
private val institutionSearchDoc = InstitutionSearchDocBuilder(translationMappers, elasticSearchWrapper)
private val updateQueryBuilder = UpdateQueryBuilder()
......
......@@ -20,8 +20,6 @@ package org.memobase.helpers
import ch.memobase.rdf.NS
import com.beust.klaxon.JsonObject
import org.apache.logging.log4j.LogManager
import org.memobase.model.FacetContainer
import org.memobase.model.LanguageContainer
/**
* Extraction helpers for institutions and record sets.
......@@ -29,40 +27,30 @@ import org.memobase.model.LanguageContainer
object InstitutionAndRecordSetExtractionHelper {
private val log = LogManager.getLogger("InstitutionAndRecordSetExtractionHelper")
fun extractInstitution(record: JsonObject): List<FacetContainer> {
val containers = extract(KEYS.heldBy, record)
return if (containers.isNotEmpty()) {
containers
fun extractInstitution(record: JsonObject): List<String> {
val institutionIds = extract(KEYS.heldBy, record)
return if (institutionIds.isNotEmpty()) {
institutionIds
} else {
listOf(FacetContainer.placeholder("NoInstitutionInRecord"))
emptyList()
}
}
fun extractRecordSet(record: JsonObject): FacetContainer {
val containers = extract(KEYS.isPartOf, record)
return if (containers.isNotEmpty()) {
containers[0]
fun extractRecordSet(record: JsonObject): String {
val values = extract(KEYS.isPartOf, record)
return if (values.isNotEmpty()) {
values[0]
} else {
FacetContainer.placeholder("NoRecordSetInRecord")
""
}
}
private fun extract(key: String, record: JsonObject): List<FacetContainer> {
private fun extract(key: String, record: JsonObject): List<String> {
return record[key].let { items ->
when (items) {
is String -> listOf(
FacetContainer(
LanguageContainer(emptyList(), emptyList(), emptyList(), emptyList()),
null,
listOf(removeNamespace(key, items))
)
)
is String -> listOf(removeNamespace(key, items))
is List<*> -> items.map { item ->
FacetContainer(
LanguageContainer(emptyList(), emptyList(), emptyList(), emptyList()),
null,
listOf(removeNamespace(key, item as String))
)
removeNamespace(key, item as String)
}
else -> {
log.error("No property $key in record ${record[KEYS.entityId]}.")
......
......@@ -170,8 +170,8 @@ data class DocumentsSearchDoc(
emptyList(),
emptyList(),
emptyList(),
listOf(FacetContainer.placeholder("NoInstitutionInRecord")),
FacetContainer.placeholder("NoRecordSetInRecord"),
emptyList(),
FacetContainer.EMPTY,
false,
emptyList(),
emptyList(),
......
......@@ -19,6 +19,7 @@
package org.memobase.model
import com.fasterxml.jackson.annotation.JsonInclude
import org.memobase.model.LanguageContainer.Companion
@JsonInclude(JsonInclude.Include.NON_EMPTY)
data class FacetContainer(
......@@ -27,6 +28,11 @@ data class FacetContainer(
val facet: List<String>?
) {
companion object {
val EMPTY = FacetContainer(
LanguageContainer.EMPTY,
null,
emptyList()
)
val DEFAULT = FacetContainer(
LanguageContainer.DEFAULT,
null,
......
......@@ -18,6 +18,7 @@
package org.memobase
import io.mockk.every
import io.mockk.mockk
import java.io.File
import java.nio.charset.Charset
import java.util.stream.Stream
......@@ -31,7 +32,9 @@ import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.assertAll
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.MethodSource
import org.memobase.helpers.ElasticSearchWrapper
import org.memobase.model.FacetContainer
import org.memobase.model.FacetContainer.Companion
import org.memobase.model.LanguageContainer
import org.memobase.params.TestParam
......@@ -44,13 +47,20 @@ class IntegrationTest {
return File("$resourcePath/$fileName").readText(Charset.defaultCharset())
}
private val elasticSearchWrapperMocked = run {
val internal = mockk<ElasticSearchWrapper>()
every { internal.getRecordSetName("soz-004") } returns LanguageContainer.placeholder("soz-004")
every { internal.getInstitutionName("soz") } returns FacetContainer.placeholder("soz")
internal
}
@ParameterizedTest
@MethodSource("testParams")
fun `integration tests`(params: TestParam) {
val settings = App.createSettings("kafkaTest1.yml")
every { TestUtilities.elasticSearchWrapperMocked.countNumberOfDocuments("") } returns 123
every { TestUtilities.elasticSearchWrapperMocked.getDocumentTypesFromRecords("", "") } returns listOf(
every { elasticSearchWrapperMocked.countNumberOfDocuments("") } returns 123
every { elasticSearchWrapperMocked.getDocumentTypesFromRecords("", "") } returns listOf(
FacetContainer(
LanguageContainer(listOf("Foto"), listOf("Foto"), listOf("Foto"), emptyList()), "Foto", emptyList()
)
......@@ -58,7 +68,7 @@ class IntegrationTest {
val topology =
KafkaTopology(settings, TestUtilities.translationMappers, TestUtilities.elasticSearchWrapperMocked)
KafkaTopology(settings, TestUtilities.translationMappers, elasticSearchWrapperMocked)
val testDriver = TopologyTestDriver(topology.build(), settings.kafkaStreamsSettings)
val factory = ConsumerRecordFactory(
StringSerializer(), StringSerializer()
......
package org.memobase
import io.mockk.every
import io.mockk.mockk
import java.io.File
import java.nio.charset.Charset
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.memobase.helpers.ElasticSearchWrapper
import org.memobase.helpers.JSON
import org.memobase.model.DocumentsSearchDoc
import org.memobase.model.FacetContainer
import org.memobase.model.LanguageContainer
import org.memobase.model.LanguageContainer.Companion
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class TestDocumentsSearchDoc {
......@@ -15,8 +21,20 @@ class TestDocumentsSearchDoc {
return File("$dataPath/$fileName").readText(Charset.defaultCharset())
}
private val elasticSearchWrapperMocked = run {
val internal = mockk<ElasticSearchWrapper>()
every { internal.getRecordSetName("") } returns LanguageContainer.EMPTY
internal
}
private val transformer =
DocumentsSearchDocBuilder(TestUtilities.translationMappers, TestUtilities.mediaUrl)
DocumentsSearchDocBuilder(
TestUtilities.translationMappers,
elasticSearchWrapperMocked,
TestUtilities.mediaUrl
)
@Test
fun `test minimal record required`() {
......@@ -26,9 +44,9 @@ class TestDocumentsSearchDoc {
"TestIdentifier",
mappedInput
)
assertThat(output)
assertThat(output.toJson())
.isEqualTo(
DocumentsSearchDoc.DEFAULT
DocumentsSearchDoc.DEFAULT.toJson()
)
}
}
\ No newline at end of file
......@@ -5,6 +5,7 @@ import ch.memobase.reporting.ReportStatus
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.registerKotlinModule
import io.mockk.every
import io.mockk.mockk
import java.io.File
import java.nio.charset.Charset
import org.apache.kafka.common.serialization.StringDeserializer
......@@ -31,6 +32,8 @@ class TestInstitutionSearchDoc {
return File("$dataPath/$fileName").readText(Charset.defaultCharset())
}
private val elasticSearchWrapperMocked = mockk<ElasticSearchWrapper>()
@Test
@Disabled
fun `test institution search doc with production es client`() {
......@@ -69,9 +72,9 @@ class TestInstitutionSearchDoc {
fun `integration test institution`() {
val settings = App.createSettings("kafkaTest1.yml")
every { TestUtilities.elasticSearchWrapperMocked.countNumberOfDocuments("testComplete") } returns 123
every { elasticSearchWrapperMocked.countNumberOfDocuments("testComplete") } returns 123
every {
TestUtilities.elasticSearchWrapperMocked.getDocumentTypesFromRecords(
elasticSearchWrapperMocked.getDocumentTypesFromRecords(
"testComplete",
"recordSet.facet"
)
......@@ -81,7 +84,7 @@ class TestInstitutionSearchDoc {
)
)
val topology =
KafkaTopology(settings, TestUtilities.translationMappers, TestUtilities.elasticSearchWrapperMocked)
KafkaTopology(settings, TestUtilities.translationMappers, elasticSearchWrapperMocked)
val testDriver = TopologyTestDriver(topology.build(), settings.kafkaStreamsSettings)
val factory = ConsumerRecordFactory(
StringSerializer(), StringSerializer()
......
......@@ -33,6 +33,13 @@ class TestRecordSetSearchDoc {
return File("$dataPath/$fileName").readText(Charset.defaultCharset())
}
private val elasticSearchWrapperMocked = run {
val internal = mockk<ElasticSearchWrapper>()
every { internal.getRecordSetName("") } returns LanguageContainer.EMPTY
internal
}
@Test
fun `test create default record set `() {
val searchDoc = RecordSetSearchDoc.DEFAULT
......@@ -99,14 +106,14 @@ class TestRecordSetSearchDoc {
fun `integration test record sets`() {
val settings = App.createSettings("kafkaTest1.yml")
every { TestUtilities.elasticSearchWrapperMocked.countNumberOfDocuments("") } returns 123
every { TestUtilities.elasticSearchWrapperMocked.getDocumentTypesFromRecords("", "") } returns listOf(
every { elasticSearchWrapperMocked.countNumberOfDocuments("") } returns 123
every { elasticSearchWrapperMocked.getDocumentTypesFromRecords("", "") } returns listOf(
FacetContainer(
LanguageContainer(listOf("Foto"), listOf("Foto"), listOf("Foto"), emptyList()), "Foto", emptyList()
)
)
val topology =
KafkaTopology(settings, TestUtilities.translationMappers, TestUtilities.elasticSearchWrapperMocked)
KafkaTopology(settings, TestUtilities.translationMappers, elasticSearchWrapperMocked)
val testDriver = TopologyTestDriver(topology.build(), settings.kafkaStreamsSettings)
val factory = ConsumerRecordFactory(
StringSerializer(), StringSerializer()
......
package org.memobase
import com.beust.klaxon.json
import io.mockk.every
import io.mockk.mockk
import java.io.File
import java.io.FileInputStream
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.assertThrows
import org.memobase.helpers.ElasticSearchWrapper
import org.memobase.helpers.JSON
import org.memobase.model.LanguageContainer
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class TestTransform {
private val elasticSearchWrapperMocked = run {
val internal = mockk<ElasticSearchWrapper>()
every { internal.getRecordSetName("") } returns LanguageContainer.EMPTY
internal
}
private val dataPath = "src/test/resources/data/transformer"
private val transformer = DocumentsSearchDocBuilder(TestUtilities.translationMappers, TestUtilities.mediaUrl)
private val transformer = DocumentsSearchDocBuilder(TestUtilities.translationMappers, elasticSearchWrapperMocked, TestUtilities.mediaUrl)
@Test
fun `test missing record`() {
......
......@@ -31,7 +31,6 @@ object TestUtilities {
TranslationMappers(institutionTypePath, documentTypePath, accessTermPath, reuseStatementPath)
val elasticSearchClient = mockk<RestHighLevelClient>()
val elasticSearchWrapperMocked = mockk<ElasticSearchWrapper>()
fun connectToElasticSearch(host: String, port: Int, documentsIndex: String): RestHighLevelClient {
......
{"title":[{"de":[],"fr":[],"it":[],"un":["Diaserie zum Thema Säuglingspflege; \"Ablesen des Thermometers.\" - Krankenschwester am Fieber messen bei einem Säugling; Deutsches Hygiene-Museum, Dresden; um 1930"]}],"type":{"name":{"de":["Fotografie"],"fr":["Photographie"],"it":["Fotografia"],"un":[]},"filter":"Foto"},"sourceID":"Sozarch_F_5146-Gb-40-042","oldMemobaseId":"SozArch-Sozarch_F_5146-Gb-40-042","rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Schweizerisches Sozialarchiv"]}],"sameAs":["http://www.bild-video-ton.ch/bestand/objekt/Sozarch_F_5146-Gb-40-042"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":["Glaspositiv"]},"name":{"de":["Fotoplatte"],"fr":["plaque photographique"],"it":["lastra fotografica"],"un":[]}}],"language":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":["ger"]},"name":{"de":["Deutsch"],"fr":["allemand"],"it":["tedesco"],"un":[]},"type":"content"}],"keywords":{"de":[],"fr":[],"it":[],"un":["soziale Fragen","Altersgliederung","Bevölkerung","Bevölkerungsaufbau","frühe Kindheit; soziale Fragen","Gesundheit","Gesundheitsförderung","Gesundheitspolitik"]},"personsFacet":{},"agentCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Unbekannt"]},"relation":{"de":[],"fr":[],"it":[],"un":["Author"]}}],"placeFacet":{},"temporal":[{"date":"1921-1930 / 1931-1940"}],"dateCreated":[{"date":"um 1930"}],"institution":[{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["soz"]}],"recordSet":{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["soz-004"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/soz-004-Sozarch_F_5146-Gb-40-042-1","mediaLocation":"local","accessDigital":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"}],"usageDigital":["http://rightsstatements.org/vocab/CNE/1.0/"],"usageDigitalGroup":[{"name":{"de":["Unklar (Copyright nicht bekannt)"],"fr":[""],"it":[""],"un":[]},"filter":"http://rightsstatements.org/vocab/CNE/1.0/"}],"digital":{},"callNumber":["Sozarch_F_5146-Gb-40-042"],"accessPhysical":[{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"usagePhysical":["http://rightsstatements.org/vocab/CNE/1.0/"],"colourPhysical":[{"de":[],"fr":[],"it":[],"un":["s-w"]}],"access":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"},{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"published":false,"suggest":{"title":["Diaserie zum Thema Säuglingspflege; \"Ablesen des Thermometers.\" - Krankenschwester am Fieber messen bei einem Säugling; Deutsches Hygiene-Museum, Dresden; um 1930"],"keywords":["soziale Fragen","Altersgliederung","Bevölkerung","Bevölkerungsaufbau","Gesundheit","frühe Kindheit; soziale Fragen","Gesundheitsförderung","Gesundheitspolitik"]},"id":"fad-001-DON3196"}
\ No newline at end of file
{"title":[{"de":[],"fr":[],"it":[],"un":["Diaserie zum Thema Säuglingspflege; \"Ablesen des Thermometers.\" - Krankenschwester am Fieber messen bei einem Säugling; Deutsches Hygiene-Museum, Dresden; um 1930"]}],"type":{"name":{"de":["Fotografie"],"fr":["Photographie"],"it":["Fotografia"],"un":[]},"filter":"Foto"},"sourceID":"Sozarch_F_5146-Gb-40-042","oldMemobaseId":"SozArch-Sozarch_F_5146-Gb-40-042","rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Schweizerisches Sozialarchiv"]}],"sameAs":["http://www.bild-video-ton.ch/bestand/objekt/Sozarch_F_5146-Gb-40-042"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":["Glaspositiv"]},"name":{"de":["Fotoplatte"],"fr":["plaque photographique"],"it":["lastra fotografica"],"un":[]}}],"language":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":["ger"]},"name":{"de":["Deutsch"],"fr":["allemand"],"it":["tedesco"],"un":[]},"type":"content"}],"keywords":{"de":[],"fr":[],"it":[],"un":["soziale Fragen","Altersgliederung","Bevölkerung","Bevölkerungsaufbau","frühe Kindheit; soziale Fragen","Gesundheit","Gesundheitsförderung","Gesundheitspolitik"]},"personsFacet":{},"agentCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Unbekannt"]},"relation":{"de":[],"fr":[],"it":[],"un":["Author"]}}],"placeFacet":{},"temporal":[{"date":"1921-1930 / 1931-1940"}],"dateCreated":[{"date":"um 1930"}],"institution":[{"name":{"de":["soz"],"fr":["soz"],"it":["soz"],"un":["soz"]},"filter":"soz","facet":["soz"]}],"recordSet":{"name":{"de":["soz-004"],"fr":["soz-004"],"it":["soz-004"],"un":["soz-004"]},"facet":["soz-004"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/soz-004-Sozarch_F_5146-Gb-40-042-1","mediaLocation":"local","accessDigital":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"}],"usageDigital":["http://rightsstatements.org/vocab/CNE/1.0/"],"usageDigitalGroup":[{"name":{"de":["Unklar (Copyright nicht bekannt)"],"fr":[""],"it":[""],"un":[]},"filter":"http://rightsstatements.org/vocab/CNE/1.0/"}],"digital":{},"callNumber":["Sozarch_F_5146-Gb-40-042"],"accessPhysical":[{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"usagePhysical":["http://rightsstatements.org/vocab/CNE/1.0/"],"colourPhysical":[{"de":[],"fr":[],"it":[],"un":["s-w"]}],"access":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"},{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"published":false,"suggest":{"title":["Diaserie zum Thema Säuglingspflege; \"Ablesen des Thermometers.\" - Krankenschwester am Fieber messen bei einem Säugling; Deutsches Hygiene-Museum, Dresden; um 1930"],"keywords":["soziale Fragen","Altersgliederung","Bevölkerung","Bevölkerungsaufbau","Gesundheit","frühe Kindheit; soziale Fragen","Gesundheitsförderung","Gesundheitspolitik"]},"id":"fad-001-DON3196"}
\ No newline at end of file
{"title":[{"de":[],"fr":[],"it":[],"un":["\"Auf der Alp Gitschenen - Projektleiter, Gemeindebehörden, Journalisten, Pro Juventute Mitarbeiter\"; 07.08.1974"]}],"type":{"name":{"de":["Fotografie"],"fr":["Photographie"],"it":["Fotografia"],"un":[]},"filter":"Foto"},"sourceID":"Sozarch_F_5146-Fc-0253","oldMemobaseId":"SozArch-Sozarch_F_5146-Fc-0253","rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Schweizerisches Sozialarchiv"]}],"sameAs":["http://www.bild-video-ton.ch/bestand/objekt/Sozarch_F_5146-Fc-0253"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":["Papierabzug"]},"name":{"de":["Abzug"],"fr":["épreuve photographique"],"it":["GALATEO MANCANTE"],"un":[]}}],"keywords":{"de":[],"fr":[],"it":[],"un":[]},"personsFacet":{},"agentCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Perrottet, Julia"]},"relation":{"de":[],"fr":[],"it":[],"un":["Author"]}}],"placeRelated":[{"name":{"de":[],"fr":[],"it":[],"un":["Schweiz, Uri, Isenthal"]},"filter":"Schweiz, Uri, Isenthal","facet":["0~S~","1~S~Schweiz, Uri, Isenthal~"]}],"placeFacet":{"facet":["0~S~","1~S~Schweiz, Uri, Isenthal~"],"filter":["Schweiz, Uri, Isenthal"]},"institution":[{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["soz"]}],"recordSet":{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["soz-004"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/soz-004-Sozarch_F_5146-Fc-0253-1","mediaLocation":"remote","accessDigital":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"}],"usageDigital":["http://rightsstatements.org/vocab/CNE/1.0/"],"usageDigitalGroup":[{"name":{"de":["Unklar (Copyright nicht bekannt)"],"fr":[""],"it":[""],"un":[]},"filter":"http://rightsstatements.org/vocab/CNE/1.0/"}],"digital":{},"callNumber":["Sozarch_F_5146-Fc-0253"],"accessPhysical":[{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"usagePhysical":["http://rightsstatements.org/vocab/CNE/1.0/"],"colourPhysical":[{"de":[],"fr":[],"it":[],"un":["s-w"]}],"access":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"},{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"published":false,"suggest":{"title":["\"Auf der Alp Gitschenen - Projektleiter, Gemeindebehörden, Journalisten, Pro Juventute Mitarbeiter\"; 07.08.1974"]},"id":"Burgerbib-Krebser-208576"}
\ No newline at end of file
{"title":[{"de":[],"fr":[],"it":[],"un":["\"Auf der Alp Gitschenen - Projektleiter, Gemeindebehörden, Journalisten, Pro Juventute Mitarbeiter\"; 07.08.1974"]}],"type":{"name":{"de":["Fotografie"],"fr":["Photographie"],"it":["Fotografia"],"un":[]},"filter":"Foto"},"sourceID":"Sozarch_F_5146-Fc-0253","oldMemobaseId":"SozArch-Sozarch_F_5146-Fc-0253","rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Schweizerisches Sozialarchiv"]}],"sameAs":["http://www.bild-video-ton.ch/bestand/objekt/Sozarch_F_5146-Fc-0253"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":["Papierabzug"]},"name":{"de":["Abzug"],"fr":["épreuve photographique"],"it":["GALATEO MANCANTE"],"un":[]}}],"keywords":{"de":[],"fr":[],"it":[],"un":[]},"personsFacet":{},"agentCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Perrottet, Julia"]},"relation":{"de":[],"fr":[],"it":[],"un":["Author"]}}],"placeRelated":[{"name":{"de":[],"fr":[],"it":[],"un":["Schweiz, Uri, Isenthal"]},"filter":"Schweiz, Uri, Isenthal","facet":["0~S~","1~S~Schweiz, Uri, Isenthal~"]}],"placeFacet":{"facet":["0~S~","1~S~Schweiz, Uri, Isenthal~"],"filter":["Schweiz, Uri, Isenthal"]},"institution":[{"name":{"de":["soz"],"fr":["soz"],"it":["soz"],"un":["soz"]},"filter":"soz","facet":["soz"]}],"recordSet":{"name":{"de":["soz-004"],"fr":["soz-004"],"it":["soz-004"],"un":["soz-004"]},"facet":["soz-004"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/soz-004-Sozarch_F_5146-Fc-0253-1","mediaLocation":"remote","accessDigital":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"}],"usageDigital":["http://rightsstatements.org/vocab/CNE/1.0/"],"usageDigitalGroup":[{"name":{"de":["Unklar (Copyright nicht bekannt)"],"fr":[""],"it":[""],"un":[]},"filter":"http://rightsstatements.org/vocab/CNE/1.0/"}],"digital":{},"callNumber":["Sozarch_F_5146-Fc-0253"],"accessPhysical":[{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"usagePhysical":["http://rightsstatements.org/vocab/CNE/1.0/"],"colourPhysical":[{"de":[],"fr":[],"it":[],"un":["s-w"]}],"access":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"},{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"published":false,"suggest":{"title":["\"Auf der Alp Gitschenen - Projektleiter, Gemeindebehörden, Journalisten, Pro Juventute Mitarbeiter\"; 07.08.1974"]},"id":"Burgerbib-Krebser-208576"}
\ No newline at end of file
{"title":[{"de":[],"fr":[],"it":[],"un":["\"Robinsonspielplatz 'Le Lignon', Genf\" - Drei Jungen beim Bauen einer Hütte; um 1975"]}],"type":{"name":{"de":["Fotografie"],"fr":["Photographie"],"it":["Fotografia"],"un":[]},"filter":"Foto"},"sourceID":"Sozarch_F_5146-Da-B004-0200","oldMemobaseId":"SozArch-Sozarch_F_5146-Da-B004-0200","rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Schweizerisches Sozialarchiv"]}],"sameAs":["http://www.bild-video-ton.ch/bestand/objekt/Sozarch_F_5146-Da-B004-0200"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":["Diapositiv"]},"name":{"de":["Diafilm"],"fr":["film inversible"],"it":["GALATEO MANCANTE"],"un":[]}}],"keywords":{"de":[],"fr":[],"it":[],"un":[]},"personsFacet":{},"agentCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Unbekannt"]},"relation":{"de":[],"fr":[],"it":[],"un":["Author"]}}],"placeRelated":[{"name":{"de":[],"fr":[],"it":[],"un":["Schweiz, Genf, Kanton, Genf, Stadt"]},"filter":"Schweiz, Genf, Kanton, Genf, Stadt","facet":["0~S~","1~S~Schweiz, Genf, Kanton, Genf, Stadt~"]}],"placeFacet":{"facet":["0~S~","1~S~Schweiz, Genf, Kanton, Genf, Stadt~"],"filter":["Schweiz, Genf, Kanton, Genf, Stadt"]},"dateCreated":[{"date":"um 1975"}],"institution":[{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["soz"]}],"recordSet":{"name":{"de":[],"fr":[],"it":[],"un":[]},"facet":["soz-004"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/soz-004-Sozarch_F_5146-Da-B004-0200-1","mediaLocation":"remote","accessDigital":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"}],"usageDigital":["http://rightsstatements.org/vocab/CNE/1.0/"],"usageDigitalGroup":[{"name":{"de":["Unklar (Copyright nicht bekannt)"],"fr":[""],"it":[""],"un":[]},"filter":"http://rightsstatements.org/vocab/CNE/1.0/"}],"digital":{},"callNumber":["Sozarch_F_5146-Da-B004-0200"],"accessPhysical":[{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"usagePhysical":["http://rightsstatements.org/vocab/CNE/1.0/"],"colourPhysical":[{"de":[],"fr":[],"it":[],"un":["Farbe"]}],"access":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"},{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"published":false,"suggest":{"title":["\"Robinsonspielplatz 'Le Lignon', Genf\" - Drei Jungen beim Bauen einer Hütte; um 1975"]},"id":"LS-film-162354"}
\ No newline at end of file
{"title":[{"de":[],"fr":[],"it":[],"un":["\"Robinsonspielplatz 'Le Lignon', Genf\" - Drei Jungen beim Bauen einer Hütte; um 1975"]}],"type":{"name":{"de":["Fotografie"],"fr":["Photographie"],"it":["Fotografia"],"un":[]},"filter":"Foto"},"sourceID":"Sozarch_F_5146-Da-B004-0200","oldMemobaseId":"SozArch-Sozarch_F_5146-Da-B004-0200","rightsHolder":[{"de":[],"fr":[],"it":[],"un":["Schweizerisches Sozialarchiv"]}],"sameAs":["http://www.bild-video-ton.ch/bestand/objekt/Sozarch_F_5146-Da-B004-0200"],"format":[{"displayLabel":{"de":[],"fr":[],"it":[],"un":["Diapositiv"]},"name":{"de":["Diafilm"],"fr":["film inversible"],"it":["GALATEO MANCANTE"],"un":[]}}],"keywords":{"de":[],"fr":[],"it":[],"un":[]},"personsFacet":{},"agentCreator":[{"name":{"de":[],"fr":[],"it":[],"un":["Unbekannt"]},"relation":{"de":[],"fr":[],"it":[],"un":["Author"]}}],"placeRelated":[{"name":{"de":[],"fr":[],"it":[],"un":["Schweiz, Genf, Kanton, Genf, Stadt"]},"filter":"Schweiz, Genf, Kanton, Genf, Stadt","facet":["0~S~","1~S~Schweiz, Genf, Kanton, Genf, Stadt~"]}],"placeFacet":{"facet":["0~S~","1~S~Schweiz, Genf, Kanton, Genf, Stadt~"],"filter":["Schweiz, Genf, Kanton, Genf, Stadt"]},"dateCreated":[{"date":"um 1975"}],"institution":[{"name":{"de":["soz"],"fr":["soz"],"it":["soz"],"un":["soz"]},"filter":"soz","facet":["soz"]}],"recordSet":{"name":{"de":["soz-004"],"fr":["soz-004"],"it":["soz-004"],"un":["soz-004"]},"facet":["soz-004"]},"memoriavClaim":true,"locator":"https://media.memobase.k8s.unibas.ch/memo/soz-004-Sozarch_F_5146-Da-B004-0200-1","mediaLocation":"remote","accessDigital":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"}],"usageDigital":["http://rightsstatements.org/vocab/CNE/1.0/"],"usageDigitalGroup":[{"name":{"de":["Unklar (Copyright nicht bekannt)"],"fr":[""],"it":[""],"un":[]},"filter":"http://rightsstatements.org/vocab/CNE/1.0/"}],"digital":{},"callNumber":["Sozarch_F_5146-Da-B004-0200"],"accessPhysical":[{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"usagePhysical":["http://rightsstatements.org/vocab/CNE/1.0/"],"colourPhysical":[{"de":[],"fr":[],"it":[],"un":["Farbe"]}],"access":[{"name":{"de":["Online"],"fr":["En ligne"],"it":["Online"],"un":[]},"filter":"public"},{"name":{"de":["vor Ort"],"fr":["Sur place"],"it":["Nel local"],"un":[]},"filter":"onsite"}],"published":false,"suggest":{"title":["\"Robinsonspielplatz 'Le Lignon', Genf\" - Drei Jungen beim Bauen einer Hütte; um 1975"]},"id":"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