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

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
)
}
}
{
"@graph": [
{
"@id": "https://memobase.ch/digital/Burgerbib-Krebser-216133-1",
"@id": "https://memobase.ch/digital/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1",
"@type": "https://www.ica.org/standards/RiC/ontology#Instantiation",
"identifiedBy": "https://memobase.ch/digital/Burgerbib-Krebser-216133-1#genida6aec47a-0957-4a89-933a-3d22034408b7",
"instantiates": "https://memobase.ch/record/Burgerbib-Krebser-216133",
"isDerivedFromInstantiation": "https://memobase.ch/physical/Burgerbib-Krebser-216133-1",
"isDistributedOn": "vimeo",
"locator": "https://vimeo.com/298157684",
"contains": "https://memobase.ch/digital/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1/derived",
"identifiedBy": "https://memobase.ch/digital/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid3daf5a86-80cb-4c92-842e-c4c2e7881318",
"instantiates": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647",
"isDerivedFromInstantiation": "https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1",
"regulatedBy": "https://memobase.ch/digital/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid73ffdf8b-34b6-4129-a57c-f42c6785bcda",
"type": "digitalObject"
},
{
"@id": "https://memobase.ch/digital/Burgerbib-Krebser-216133-1#genida6aec47a-0957-4a89-933a-3d22034408b7",
"@id": "https://memobase.ch/digital/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid3daf5a86-80cb-4c92-842e-c4c2e7881318",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "Burgerbib-Krebser-216133-1",
"identifier": "LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1",
"type": "main"
},
{
"@id": "https://memobase.ch/physical/Burgerbib-Krebser-216133-1",
"@id": "https://memobase.ch/digital/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid73ffdf8b-34b6-4129-a57c-f42c6785bcda",
"@type": "https://www.ica.org/standards/RiC/ontology#Rule",
"name": "public",
"regulates": "https://memobase.ch/digital/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1",
"type": "access"
},
{
"@id": "https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1",
"@type": "https://www.ica.org/standards/RiC/ontology#Instantiation",
"P60558": "S/W",
"duration": "00:00:43",
"hasCarrierType": [
"https://memobase.ch/physical/Burgerbib-Krebser-216133-1#genid4599794e-c0e2-4e60-b679-377d36294d83",
"https://memobase.ch/physical/Burgerbib-Krebser-216133-1#genidb67f6e52-30f6-4e88-af25-f73185bdb683"
"https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid0da52d17-3363-4531-bfbf-508d93407046",
"https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid677e13cc-8662-40b1-83c0-f6ec3b198db6"
],
"hasDerivedInstantiation": "https://memobase.ch/digital/Burgerbib-Krebser-216133-1",
"hasDerivedInstantiation": "https://memobase.ch/digital/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1",
"identifiedBy": [
"https://memobase.ch/physical/Burgerbib-Krebser-216133-1#genid333fa224-b73a-4866-8447-c1dbebb2c20e",
"https://memobase.ch/physical/Burgerbib-Krebser-216133-1#genid7b74b0fd-ef75-4dc4-a065-eda403b91d1e"
],
"instantiates": "https://memobase.ch/record/Burgerbib-Krebser-216133",
"physicalCharacteristics": [
"Weite: 85 mm",
"Höhe: 100 mm"
"https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genide9efa3ee-6bb3-4f0e-9dbd-4d1ca6b4b60e",
"https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid443f9a35-4222-4b67-a47d-9a48b4d08cfd"
],
"instantiates": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647",
"physicalCharacteristics": "Bemerkung: Länge Originalfilm 5m und Länge als Digitalisat 00:00:43 - Digitalisat in SD (standard definition)",
"regulatedBy": "https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid0c204580-4b54-4e0f-99be-5ac19b2a68e5",
"type": "physicalObject"
},
{
"@id": "https://memobase.ch/physical/Burgerbib-Krebser-216133-1#genid333fa224-b73a-4866-8447-c1dbebb2c20e",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "Historische Sammlung Krebser 13/2",
"type": "callNumber"
"@id": "https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid0c204580-4b54-4e0f-99be-5ac19b2a68e5",
"@type": "https://www.ica.org/standards/RiC/ontology#Rule",
"name": "onsite",
"regulates": "https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1",
"type": "access"
},
{
"@id": "https://memobase.ch/physical/Burgerbib-Krebser-216133-1#genid4599794e-c0e2-4e60-b679-377d36294d83",
"@id": "https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid0da52d17-3363-4531-bfbf-508d93407046",
"@type": "https://www.ica.org/standards/RiC/ontology#CarrierType",
"sameAs": "http://www.wikidata.org/entity/Q1138868",
"name": {
"@language": "de",
"@value": "Glasplatte"
},
"resultsFrom": "https://memobase.ch/physical/Burgerbib-Krebser-216133-1#genid3f2e2ad9-69c5-4f38-a8ae-1753cd3a6a72"
"name": "16 mm S/W-Film (Triacetat)"
},
{
"@id": "https://memobase.ch/physical/Burgerbib-Krebser-216133-1#genid7b74b0fd-ef75-4dc4-a065-eda403b91d1e",
"@id": "https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid443f9a35-4222-4b67-a47d-9a48b4d08cfd",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "Burgerbib-Krebser-216133-1",
"identifier": "LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1",
"type": "main"
},
{
"@id": "https://memobase.ch/physical/Burgerbib-Krebser-216133-1#genidb67f6e52-30f6-4e88-af25-f73185bdb683",
"@id": "https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genid677e13cc-8662-40b1-83c0-f6ec3b198db6",
"@type": "https://www.ica.org/standards/RiC/ontology#CarrierType",
"name": "Glasplatte"
"sameAs": "http://www.wikidata.org/entity/Q194383",
"name": [
{
"@language": "it",
"@value": "16 millimetri"
},
{
"@language": "fr",
"@value": "Format 16 mm"
},
{
"@language": "de",
"@value": "16-mm-Film"
}
],
"resultsFrom": "https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genida9eaa5f2-f98d-49c8-950d-47ddb1cf3ff1"
},
{
"@id": "https://memobase.ch/record/Burgerbib-Krebser-216133",
"@id": "https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1#genide9efa3ee-6bb3-4f0e-9dbd-4d1ca6b4b60e",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "LAGL PA 111 Sch Y13/005 Nr. 647",
"type": "callNumber"
},
{
"@id": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647",
"@type": "https://www.ica.org/standards/RiC/ontology#Record",
"eventType": "Create",
"created": "https://memobase.ch/record/Burgerbib-Krebser-216133#genid16e4d097-0fd2-4ea6-80a7-74a832bbf8f1",
"spatial": "https://memobase.ch/record/Burgerbib-Krebser-216133#genid169b1a51-432a-4aae-b8aa-f3058e9cd0bc",
"http://memobase.ch/internal/isPublished": false,
"abstract": "Vorspann: Agfa. Falter. <br><br> Beschrieb Schönwetter: Falter.",
"created": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid9bd02374-b024-4329-b8ce-b600f4cb58fd",
"P60441": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid2bcbff34-0b6c-4d17-8652-340894083190",
"P60451": "https://memobase.ch/institution/mrv",
"sameAs": "http://katalog.burgerbib.ch/detail.aspx?ID=216133",
"descriptiveNote": "Datierung: Bundesplatz / Büren-Besitzung<br>",
"sameAs": "https://archivverzeichnis.gl.ch/home/#/content/110700fae7994b628665add754139f2c",
"hasGenre": [
"https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid4f778f63-6b9b-4ec4-bee1-0266889a003b",
"https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genided83c5f6-2905-4f95-835c-6b3a2068b437"
],
"conditionsOfUse": "Das Nutzungsrecht für die Filme von Foto Schönwetter liegt beim Landesarchiv des Kantons Glarus. Deren Publikation durch Dritte benötigt eine Einwilligung des Landesarchivs. Es sind immer Ersteller (meistens H.J. Schönwetter) und Standort Original (Landesarchiv des Kt. GL) eines Films anzugeben.",
"descriptiveNote": "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>",
"hasInstantiation": [
"https://memobase.ch/physical/Burgerbib-Krebser-216133-1",
"https://memobase.ch/digital/Burgerbib-Krebser-216133-1"
"https://memobase.ch/physical/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1",
"https://memobase.ch/digital/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647-1"
],
"hasSubject": "https://memobase.ch/record/Burgerbib-Krebser-216133#genid9af530c6-3c11-4919-9637-33449d05c5cb",
"hasTitle": "https://memobase.ch/record/Burgerbib-Krebser-216133#genidb7c5cfed-7b4c-40a8-b085-ffa86b11bcb8",
"heldBy": "https://memobase.ch/institution/Burgerbib",
"identifiedBy": [
"https://memobase.ch/record/Burgerbib-Krebser-216133#genid580975cf-c92a-4a3a-b815-981b56cdea27",
"https://memobase.ch/record/Burgerbib-Krebser-216133#genid7b32fdfc-0f25-4f6c-abd4-329f37da9d98",
"https://memobase.ch/record/Burgerbib-Krebser-216133#genid4b3c6023-b701-401c-8857-a268f10a9389"
"hasTitle": [
"https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genidddd4ce75-36f9-469f-8748-f9ef1122de01",
"https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genide7b3c8f8-20ea-43f1-bf5b-07ad865ec836"
],
"isPartOf": "https://memobase.ch/recordSet/Burgerbib-Krebser",
"recordResourceOrInstantiationIsSourceOfCreationRelation": [
"https://memobase.ch/record/Burgerbib-Krebser-216133#genida0d4d021-b573-46da-b07c-29b312592735",
"https://memobase.ch/record/Burgerbib-Krebser-216133#genidcab4ea83-ceb4-4921-bf71-1683551a1580"
"heldBy": "https://memobase.ch/institution/LAGL",
"identifiedBy": [
"https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid03c2392e-d849-476d-afe0-7adaaf543972",
"https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid41dc0e0d-d4ef-43e1-b6da-1b8f454e23ea",
"https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid8eb922be-21f9-4e82-8c91-26e1122b58aa"
],
"regulatedBy": "https://memobase.ch/record/Burgerbib-Krebser-216133#genid0f34888b-7aaa-418e-9a26-8fdcd80d6ca5",
"title": "Bern: Altstadt, obere; Bundesplatz 4; Bärenplatz (31); Käfiggässchen; -- Fuhrwerk; Automobil; Lastwagen; Transport, Verkehr; Strassenbeleuchtung",
"type": "Foto"
"isPartOf": "https://memobase.ch/recordSet/LAGL-PA_111_Sch_Y",
"recordResourceOrInstantiationIsSourceOfCreationRelation": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid204347a7-e8fd-41a6-8bd7-83816a1ddd2c",
"regulatedBy": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid996112e5-dbd3-491a-ba44-c030dfbee5b3",
"scopeAndContent": "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].",
"title": "Falter",
"type": "Film"
},
{
"@id": "https://memobase.ch/record/Burgerbib-Krebser-216133#genid0f34888b-7aaa-418e-9a26-8fdcd80d6ca5",
"@type": "https://www.ica.org/standards/RiC/ontology#Rule",
"name": "Burgerbibliothek Bern",
"regulates": "https://memobase.ch/record/Burgerbib-Krebser-216133",
"type": "holder"
"@id": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid03c2392e-d849-476d-afe0-7adaaf543972",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "LAGL-PA_111_Sch_Y13_005_Nr_647",
"type": "oldMemobase"
},
{
"@id": "https://memobase.ch/record/Burgerbib-Krebser-216133#genid169b1a51-432a-4aae-b8aa-f3058e9cd0bc",
"@type": "https://www.ica.org/standards/RiC/ontology#Place",
"name": "Käfiggässchen"
"@id": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid204347a7-e8fd-41a6-8bd7-83816a1ddd2c",
"@type": "https://www.ica.org/standards/RiC/ontology#CreationRelation",
"creationRelationHasSource": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647",
"creationRelationHasTarget": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid9e4046f0-ef1a-440d-9477-3f1d44f481c4",
"name": "Author",
"type": "creator"
},
{
"@id": "https://memobase.ch/record/Burgerbib-Krebser-216133#genid16e4d097-0fd2-4ea6-80a7-74a832bbf8f1",
"@type": "https://www.ica.org/standards/RiC/ontology#DateRange",
"expressedDate": "1900/1909"
"@id": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid2bcbff34-0b6c-4d17-8652-340894083190",
"@type": "https://www.ica.org/standards/RiC/ontology#CorporateBody",
"eventType": "Create",
"name": "H.P. Schönwetter"
},
{
"@id": "https://memobase.ch/record/Burgerbib-Krebser-216133#genid4b3c6023-b701-401c-8857-a268f10a9389",
"@id": "https://memobase.ch/record/LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647#genid41dc0e0d-d4ef-43e1-b6da-1b8f454e23ea",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "Burgerbib-Krebser-216133",
"identifier": "LAGL-PA_111_Sch_Y-PA_111_Sch_Y13_005_Nr_647",
"type": "main"
},
{
"@id": "https://memobase.ch/record/Burgerbib-Krebser-216133#genid580975cf-c92a-4a3a-b815-981b56cdea27",
"@type": "https://www.ica.org/standards/RiC/ontology#Identifier",
"identifier": "Burgerbib-216133",
"type": "oldMemobase"
},
{
"@id": "https://memobase.ch/record/Burgerbib-Krebser-216133#genid72ee3cc8-b8ef-47ee-a5a8-5b1e627544b5",