Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
memoriav
Memobase 2020
services
Elasticsearch Services
Search Doc Service
Commits
dc714882
Commit
dc714882
authored
Aug 25, 2020
by
Jonas Waeber
Browse files
Add suggest fields
parent
b7b08fc0
Pipeline
#13245
passed with stages
in 6 minutes and 5 seconds
Changes
10
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
src/main/kotlin/KEYS.kt
View file @
dc714882
...
...
@@ -25,12 +25,31 @@ object KEYS {
const
val
firstName
=
"firstName"
const
val
lastName
=
"lastName"
const
val
name
=
"name"
const
val
title
=
"title"
const
val
prefLabel
=
"prefLabel"
const
val
agentIsTargetOfCreationRelation
=
"agentIsTargetOfCreationRelation"
const
val
hasSubject
=
"hasSubject"
const
val
placeOfCapture
=
"P60556"
const
val
spatial
=
"spatial"
const
val
producer
=
"P60441"
const
val
publishedBy
=
"publishedBy"
const
val
contributor
=
"contributor"
const
val
creator
=
"creator"
const
val
Person
=
"Person"
const
val
Instantiation
=
"Instantiation"
const
val
Place
=
"Place"
const
val
Title
=
"Title"
const
val
Instantiation
=
"Instantiation"
const
val
Record
=
"Record"
const
val
Concept
=
"Concept"
object
TitleTypes
{
const
val
main
=
"main"
const
val
series
=
"series"
const
val
broadcast
=
"broadcast"
}
}
src/main/kotlin/SearchDocTransform.kt
View file @
dc714882
...
...
@@ -25,6 +25,7 @@ import org.memobase.builders.IFieldBuilder
import
org.memobase.builders.PersonContainerBuilder
import
org.memobase.builders.PersonFacetBuilder
import
org.memobase.builders.PlaceFacetBuilder
import
org.memobase.builders.SuggestContainerBuilder
import
org.memobase.helpers.CarrierType
import
org.memobase.helpers.Extract
import
org.memobase.helpers.FacetBuildHelpers
...
...
@@ -45,18 +46,27 @@ class SearchDocTransform {
val
physicalObject
=
input
.
values
.
firstOrNull
{
it
[
"@type"
]
==
NS
.
rico
+
"Instantiation"
&&
it
[
"type"
]
==
"physicalObject"
}
val
hasSubjectIds
=
Extract
.
identifiers
(
record
[
KEYS
.
hasSubject
])
val
publishedByIds
=
Extract
.
identifiers
(
record
[
KEYS
.
publishedBy
])
val
producerIds
=
Extract
.
identifiers
(
record
[
KEYS
.
producer
])
val
spatialIds
=
Extract
.
identifiers
(
record
[
KEYS
.
spatial
])
val
placeOfCaptureIds
=
Extract
.
identifiers
(
record
[
KEYS
.
placeOfCapture
])
val
personFacetBuilder
=
PersonFacetBuilder
()
val
subjectPersonBuilder
=
PersonContainerBuilder
(
"
hasSubject
"
,
record
,
null
,
input
)
val
publisherPersonBuilder
=
PersonContainerBuilder
(
"
publishedBy
"
,
record
,
null
,
input
)
val
producersPersonBuilder
=
PersonContainerBuilder
(
"P60441"
,
record
,
null
,
input
)
val
contributorPersonBuilder
=
PersonContainerBuilder
(
""
,
record
,
KEYS
.
contributor
,
input
)
val
creatorPersonBuilder
=
PersonContainerBuilder
(
""
,
record
,
KEYS
.
creator
,
input
)
val
subjectPersonBuilder
=
PersonContainerBuilder
(
hasSubject
Ids
,
null
,
input
)
val
publisherPersonBuilder
=
PersonContainerBuilder
(
publishedBy
Ids
,
null
,
input
)
val
producersPersonBuilder
=
PersonContainerBuilder
(
producerIds
,
null
,
input
)
val
contributorPersonBuilder
=
PersonContainerBuilder
(
emptyList
()
,
KEYS
.
contributor
,
input
)
val
creatorPersonBuilder
=
PersonContainerBuilder
(
emptyList
()
,
KEYS
.
creator
,
input
)
val
placesRelatedBuilder
=
FacettedContainerBuilder
(
"spatial"
,
record
,
KEYS
.
Place
,
KEYS
.
name
,
FacetBuildHelpers
::
place
)
val
placeCapturedBuilder
=
FacettedContainerBuilder
(
"P60556"
,
record
,
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
placeFacetBuilder
=
PlaceFacetBuilder
()
val
suggestContainerBuilder
=
SuggestContainerBuilder
(
hasSubjectIds
)
for
(
item
in
input
.
values
)
{
for
(
builder
:
IFieldBuilder
in
listOf
(
personFacetBuilder
,
...
...
@@ -67,7 +77,8 @@ class SearchDocTransform {
creatorPersonBuilder
,
placeFacetBuilder
,
placeCapturedBuilder
,
placesRelatedBuilder
placesRelatedBuilder
,
suggestContainerBuilder
))
{
if
(
builder
.
filter
(
item
))
{
builder
.
append
(
item
)
...
...
@@ -221,7 +232,8 @@ class SearchDocTransform {
usagePhysical
=
Extract
.
typedEntityByType
(
physicalRules
,
"type"
,
"usage"
,
"sameAs"
).
flatMap
{
it
.
toList
()
},
callNumber
=
Extract
.
typedEntityByType
(
physicalIdentifiers
,
"type"
,
"callNumber"
,
"identifier"
)
.
flatMap
{
it
.
toList
()
},
format
=
format
format
=
format
,
suggest
=
suggestContainerBuilder
.
build
()[
0
]
)
}
}
src/main/kotlin/builders/FacettedContainerBuilder.kt
View file @
dc714882
...
...
@@ -18,16 +18,17 @@
package
org.memobase.builders
import
com.beust.klaxon.JsonArray
import
com.beust.klaxon.JsonObject
import
org.memobase.KEYS
import
org.memobase.helpers.Extract
import
org.memobase.model.FacettedContainer
import
org.memobase.rdf.NS
/**
* @param identifiers: A list of identifiers to filter on.
*/
class
FacettedContainerBuilder
(
private
val
sourceProperty
:
String
,
private
val
sourceResource
:
JsonObject
,
private
val
identifiers
:
List
<
String
>,
private
val
targetType
:
String
,
private
val
nameProperty
:
String
,
private
val
facetFunction
:
(
jsonObject
:
JsonObject
)
->
List
<
String
>
...
...
@@ -37,22 +38,7 @@ class FacettedContainerBuilder(
override
fun
filter
(
jsonObject
:
JsonObject
):
Boolean
{
if
(
jsonObject
[
KEYS
.
atType
]
!=
NS
.
rico
+
targetType
)
return
false
return
sourceResource
[
sourceProperty
].
let
{
when
(
it
)
{
is
String
->
it
==
jsonObject
[
KEYS
.
entityId
]
as
String
is
JsonObject
->
it
[
KEYS
.
entityId
]
as
String
==
jsonObject
[
KEYS
.
entityId
]
as
String
is
JsonArray
<
*
>
->
{
it
.
any
{
child
->
when
(
child
)
{
is
String
->
child
==
jsonObject
[
KEYS
.
entityId
]
as
String
is
JsonObject
->
child
[
KEYS
.
entityId
]
as
String
==
jsonObject
[
KEYS
.
entityId
]
as
String
else
->
false
}
}
}
else
->
false
}
}
return
identifiers
.
contains
(
jsonObject
[
KEYS
.
entityId
])
}
override
fun
append
(
jsonObject
:
JsonObject
):
String
{
...
...
src/main/kotlin/builders/PersonContainerBuilder.kt
View file @
dc714882
...
...
@@ -18,7 +18,6 @@
package
org.memobase.builders
import
com.beust.klaxon.JsonArray
import
com.beust.klaxon.JsonObject
import
org.memobase.KEYS
import
org.memobase.helpers.Extract
...
...
@@ -27,8 +26,7 @@ import org.memobase.model.PersonContainer
import
org.memobase.rdf.NS
class
PersonContainerBuilder
(
private
val
sourceProperty
:
String
,
private
val
sourceResource
:
JsonObject
,
private
val
identifiers
:
List
<
String
>,
private
val
creationRelationType
:
String
?,
private
val
inputMap
:
Map
<
String
,
JsonObject
>
)
:
...
...
@@ -48,22 +46,7 @@ class PersonContainerBuilder(
false
}
}
else
{
sourceResource
[
sourceProperty
].
let
{
when
(
it
)
{
is
String
->
it
==
jsonObject
[
KEYS
.
entityId
]
as
String
is
JsonObject
->
it
[
KEYS
.
entityId
]
as
String
==
jsonObject
[
KEYS
.
entityId
]
as
String
is
JsonArray
<
*
>
->
{
it
.
any
{
child
->
when
(
child
)
{
is
String
->
child
==
jsonObject
[
KEYS
.
entityId
]
as
String
is
JsonObject
->
child
[
KEYS
.
entityId
]
as
String
==
jsonObject
[
KEYS
.
entityId
]
as
String
else
->
false
}
}
}
else
->
false
}
}
identifiers
.
contains
(
jsonObject
[
KEYS
.
entityId
])
}
}
...
...
src/main/kotlin/builders/SuggestContainerBuilder.kt
0 → 100644
View file @
dc714882
/*
* search-doc-service
* Copyright (C) 2020 Memoriav
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package
org.memobase.builders
import
com.beust.klaxon.JsonObject
import
org.memobase.KEYS
import
org.memobase.helpers.Extract
import
org.memobase.model.SuggestContainer
import
org.memobase.rdf.NS
class
SuggestContainerBuilder
(
private
val
hasSubjectIds
:
List
<
String
>)
:
IFieldBuilder
{
private
val
titles
=
mutableListOf
<
String
>()
private
val
seriesTitles
=
mutableListOf
<
String
>()
private
val
broadcastTitles
=
mutableListOf
<
String
>()
private
val
keywords
=
mutableListOf
<
String
>()
override
fun
filter
(
jsonObject
:
JsonObject
):
Boolean
{
return
when
{
jsonObject
[
KEYS
.
atType
]
==
NS
.
skos
+
KEYS
.
Concept
->
{
hasSubjectIds
.
contains
(
jsonObject
[
KEYS
.
entityId
])
}
jsonObject
[
KEYS
.
atType
]
==
NS
.
rico
+
KEYS
.
Title
->
true
else
->
false
}
}
override
fun
append
(
jsonObject
:
JsonObject
):
String
{
return
when
(
jsonObject
[
KEYS
.
atType
])
{
NS
.
skos
+
KEYS
.
Concept
->
parseKeywords
(
jsonObject
)
NS
.
rico
+
KEYS
.
Title
->
parseTitles
(
jsonObject
)
else
->
""
}
}
private
fun
parseTitles
(
jsonObject
:
JsonObject
):
String
{
return
when
(
jsonObject
[
KEYS
.
ricoType
])
{
KEYS
.
TitleTypes
.
main
->
{
titles
.
addAll
(
Extract
.
languageContainer
(
"main-title"
,
jsonObject
[
KEYS
.
title
])
.
reduce
{
acc
,
languageContainer
->
acc
.
merge
(
languageContainer
)
}.
toList
()
)
""
}
KEYS
.
TitleTypes
.
series
->
{
seriesTitles
.
addAll
(
Extract
.
languageContainer
(
"series-title"
,
jsonObject
[
KEYS
.
title
])
.
reduce
{
acc
,
languageContainer
->
acc
.
merge
(
languageContainer
)
}.
toList
()
)
""
}
KEYS
.
TitleTypes
.
broadcast
->
{
broadcastTitles
.
addAll
(
Extract
.
languageContainer
(
"broadcast-title"
,
jsonObject
[
KEYS
.
title
])
.
reduce
{
acc
,
languageContainer
->
acc
.
merge
(
languageContainer
)
}.
toList
()
)
""
}
else
->
"Unknown title type ${jsonObject[KEYS.ricoType]}."
}
}
private
fun
parseKeywords
(
jsonObject
:
JsonObject
):
String
{
keywords
.
addAll
(
Extract
.
languageContainer
(
"keywords-concept"
,
jsonObject
[
KEYS
.
prefLabel
])
.
reduce
{
acc
,
languageContainer
->
acc
.
merge
(
languageContainer
)
}.
toList
()
)
return
""
}
override
fun
build
():
List
<
SuggestContainer
>
{
return
listOf
(
SuggestContainer
(
title
=
titles
,
seriesTitle
=
seriesTitles
,
broadcastTitle
=
broadcastTitles
,
keywords
=
keywords
)
)
}
}
src/main/kotlin/helpers/Extract.kt
View file @
dc714882
...
...
@@ -134,12 +134,6 @@ object Extract {
}
}
fun
extractPlaces
(
entities
:
List
<
JsonObject
>):
List
<
LanguageContainer
>
{
return
entities
.
flatMap
{
languageContainer
(
it
[
"@id"
]
as
String
,
it
[
"name"
])
}
}
fun
extractSourceId
(
entities
:
List
<
JsonObject
>):
String
{
return
entities
.
first
{
it
[
"type"
]
as
String
==
"original"
...
...
@@ -188,7 +182,7 @@ object Extract {
}
}
fun
identifier
(
value
:
Any
?):
List
<
String
>
{
fun
identifier
s
(
value
:
Any
?):
List
<
String
>
{
return
when
(
value
)
{
is
String
->
listOf
(
value
)
is
JsonObject
->
value
[
"@id"
].
let
{
if
(
it
is
String
)
listOf
(
it
)
else
emptyList
()
}
...
...
src/main/kotlin/model/SearchDoc.kt
View file @
dc714882
...
...
@@ -103,5 +103,8 @@ data class SearchDoc(
val
format
:
List
<
FacettedContainer
>,
// Combined
val
access
:
List
<
String
>
val
access
:
List
<
String
>,
// auto complete source
val
suggest
:
SuggestContainer
)
src/main/kotlin/model/SuggestContainer.kt
0 → 100644
View file @
dc714882
/*
* search-doc-service
* Copyright (C) 2020 Memoriav
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package
org.memobase.model
data class
SuggestContainer
(
val
title
:
List
<
String
>,
val
seriesTitle
:
List
<
String
>,
val
broadcastTitle
:
List
<
String
>,
val
keywords
:
List
<
String
>
)
src/test/resources/data/1/output.json
View file @
dc714882
{
"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"
,
"id"
:
"https://memobase.ch/record/Burgerbib-Krebser-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"
]},
"facet"
:[
"0~A~#"
,
"1~A~Anonym~#"
]}],
"personContributor"
:[{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[
"Familie Krebser"
]},
"relation"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[
"Collector/Sammler"
]},
"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"
]},
"facet"
:[
"0~K~#"
,
"1~K~Käfiggässchen~#"
]}],
"placeFacet"
:[
"0~K~#"
,
"1~K~Käfiggässchen~#"
],
"dateCreated"
:[{
"date"
:
"1900/1909"
,
"facet"
:[]}],
"institution"
:[{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[]},
"facet"
:[
"https://memobase.ch/institution/Burgerbib"
]}],
"recordSet"
:{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[]},
"facet"
:[
"https://memobase.ch/recordSet/Burgerbib-Krebser"
]},
"memoriavClaim"
:
true
,
"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"
]},
"facet"
:[]}]}
\ No newline at end of file
{
"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"
,
"id"
:
"https://memobase.ch/record/Burgerbib-Krebser-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"
]},
"facet"
:[
"0~A~#"
,
"1~A~Anonym~#"
]}],
"personContributor"
:[{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[
"Familie Krebser"
]},
"relation"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[
"Collector/Sammler"
]},
"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"
]},
"facet"
:[
"0~K~#"
,
"1~K~Käfiggässchen~#"
]}],
"placeFacet"
:[
"0~K~#"
,
"1~K~Käfiggässchen~#"
],
"dateCreated"
:[{
"date"
:
"1900/1909"
,
"facet"
:[]}],
"institution"
:[{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[]},
"facet"
:[
"https://memobase.ch/institution/Burgerbib"
]}],
"recordSet"
:{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[]},
"facet"
:[
"https://memobase.ch/recordSet/Burgerbib-Krebser"
]},
"memoriavClaim"
:
true
,
"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"
]},
"facet"
:[]}],
"suggest"
:{
"title"
:[
"Bern: Altstadt, obere; Bundesplatz 4; Bärenplatz (31); Käfiggässchen; -- Fuhrwerk; Automobil; Lastwagen; Transport, Verkehr; Strassenbeleuchtung"
],
"seriesTitle"
:[],
"broadcastTitle"
:[],
"keywords"
:[
"Transport, Verkehr"
]}}
\ No newline at end of file
src/test/resources/data/2/output.json
View file @
dc714882
{
"title"
:[{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[
"Anonym -- Armut"
]}],
"type"
:
"Foto"
,
"sourceID"
:
"208576"
,
"id"
:
"https://memobase.ch/record/Burgerbib-Krebser-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"
]},
"facet"
:[
"0~M~#"
,
"1~M~Moeglé, Jean~#"
]}],
"personContributor"
:[{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[
"Familie Krebser"
]},
"relation"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[
"Collector/Sammler"
]},
"facet"
:[
"0~F~#"
,
"1~F~Familie Krebser~#"
]}],
"personsFacet"
:[
"0~F~#"
,
"1~F~Familie Krebser~#"
,
"0~M~#"
,
"1~M~Moeglé, Jean~#"
],
"dateCreated"
:[{
"date"
:
"20. Jh."
,
"facet"
:[]}],
"institution"
:[{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[]},
"facet"
:[
"https://memobase.ch/institution/Burgerbib"
]}],
"recordSet"
:{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[]},
"facet"
:[
"https://memobase.ch/recordSet/Burgerbib-Krebser"
]},
"memoriavClaim"
:
true
,
"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"
]},
"facet"
:[]}]}
\ No newline at end of file
{
"title"
:[{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[
"Anonym -- Armut"
]}],
"type"
:
"Foto"
,
"sourceID"
:
"208576"
,
"id"
:
"https://memobase.ch/record/Burgerbib-Krebser-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"
]},
"facet"
:[
"0~M~#"
,
"1~M~Moeglé, Jean~#"
]}],
"personContributor"
:[{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[
"Familie Krebser"
]},
"relation"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[
"Collector/Sammler"
]},
"facet"
:[
"0~F~#"
,
"1~F~Familie Krebser~#"
]}],
"personsFacet"
:[
"0~F~#"
,
"1~F~Familie Krebser~#"
,
"0~M~#"
,
"1~M~Moeglé, Jean~#"
],
"dateCreated"
:[{
"date"
:
"20. Jh."
,
"facet"
:[]}],
"institution"
:[{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[]},
"facet"
:[
"https://memobase.ch/institution/Burgerbib"
]}],
"recordSet"
:{
"name"
:{
"de"
:[],
"fr"
:[],
"it"
:[],
"un"
:[]},
"facet"
:[
"https://memobase.ch/recordSet/Burgerbib-Krebser"
]},
"memoriavClaim"
:
true
,
"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"
]},
"facet"
:[]}],
"suggest"
:{
"title"
:[
"Anonym -- Armut"
],
"seriesTitle"
:[],
"broadcastTitle"
:[],
"keywords"
:[
"Armut"
]}}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment