Commit 448c7a31 authored by Jonas Waeber's avatar Jonas Waeber
Browse files

Update basics

parent 8fd39835
......@@ -4,21 +4,23 @@ Transforms json objects into RDF Resources.
### Canton Query
Here the codes were added manually and the names adjusted to exclude the word canton. Just kept the name.
https://query.wikidata.org/
```sparql
SELECT ?item ?labelDE ?labelFR ?labelIT
SELECT ?item ?de ?fr ?it
WHERE
{
?item wdt:P31 wd:Q23058.
?item rdfs:label ?labelDE .
FILTER(LANG(?labelDE) = "de")
?item rdfs:label ?de .
FILTER(LANG(?de) = "de")
?item rdfs:label ?labelFR .
FILTER(LANG(?labelFR) = "fr")
?item rdfs:label ?fr .
FILTER(LANG(?fr) = "fr")
?item rdfs:label ?labelIT .
FILTER(LANG(?labelIT) = "fr")
?item rdfs:label ?it .
FILTER(LANG(?it) = "it")
}
```
......@@ -26,22 +28,27 @@ WHERE
https://query.wikidata.org/
```sql
SELECT ?item (GROUP_CONCAT(DISTINCT ?postalCode; SEPARATOR=",") as ?groupedPostalCode) ?canton (GROUP_CONCAT(DISTINCT ?coordinates; SEPARATOR=",") as ?groupedCoordinates)
```sparql
SELECT (GROUP_CONCAT(DISTINCT ?postalCode; SEPARATOR=",") as ?code) ?id (SAMPLE(?de) as ?de) (SAMPLE(?fr) as ?fr) (SAMPLE(?it) as ?it)
WHERE
{
?item wdt:P31 wd:Q70208. # swiss municipalities
?item wdt:P281 ?postalCode .
?item wdt:P625 ?coordinates .
?item wdt:P131 ?canton .
?canton wdt:P31 wd:Q23058 . # adminUnit is canton of switzerland
?id wdt:P31 wd:Q70208. # swiss municipalities
?id wdt:P281 ?postalCode .
?id rdfs:label ?de .
FILTER(LANG(?de) = "de")
?id rdfs:label ?fr .
FILTER(LANG(?fr) = "fr")
?id rdfs:label ?it .
FILTER(LANG(?it) = "it")
MINUS {
?item wdt:P31 wd:Q685309 # removes former municipalities
?id wdt:P31 wd:Q685309 # removes former municipalities
}
}
GROUP BY ?item ?canton
GROUP BY ?id
```
### More Complete Query
......
......@@ -86,10 +86,10 @@ test {
sourceSets {
main.kotlin.srcDirs += 'src/main/kotlin'
main.resources.srcDirs = [ "src/main/resources" ]
main.resources.includes = [ "**/*.yml", "**/*.xml", "**/*.tsv"]
main.resources.includes = [ "**/*.yml", "**/*.xml", "**/*.tsv", "**/*.csv"]
test.kotlin.srcDirs += 'src/test/kotlin'
test.resources.srcDirs = [ "src/test/resources" ]
test.resources.includes = [ "**/*.yml", "**/*.xml", "**/*.tsv"]
test.resources.includes = [ "**/*.yml", "**/*.xml", "**/*.tsv", "**/*.csv"]
}
plugins.withType(DistributionPlugin) {
......
deploymentName: drupal-sync
inputTopic: drupal-json-api-input
outputTopic: drupal-sync-output
kafkaConfigs: prod-kafka-bootstrap-servers
\ No newline at end of file
......@@ -17,10 +17,10 @@
*/
package org.memobase
import kotlin.system.exitProcess
import org.apache.logging.log4j.LogManager
import org.memobase.model.Institution
import org.memobase.model.Canton
import org.memobase.model.Municipality
import kotlin.system.exitProcess
object Helpers {
......@@ -30,22 +30,19 @@ object Helpers {
val stream = ClassLoader.getSystemResourceAsStream("municipalities.tsv")
if (stream != null) {
return stream.bufferedReader().lineSequence().filterNot {
it.startsWith("item")
it.startsWith("code")
}.map {
val values = it.split("\t")
Municipality(
values[1].trim('"')
.split(",")
.map { code -> code.trim() }
.flatMap { code -> code.split("-") }
.map { code -> code.trim() },
values[2].trim('<', '>'),
values[0].trim('<', '>'),
values[3].split(",")
)
}.map { municipality ->
municipality.postalCodes.map { code ->
Pair(code, municipality)
val codes = values[0].split(",").map { code -> code.trim() }
codes.flatMap { code ->
code.split("-").map { c -> c.trim() }
}.map { code ->
Pair(code, Municipality(
values[1].trim(),
values[2].trim(),
values[3].trim(),
values[4].trim()
))
}
}.flatten().toMap()
} else {
......@@ -53,4 +50,20 @@ object Helpers {
exitProcess(1)
}
}
fun getCantons(): Map<String, Canton> {
val stream = ClassLoader.getSystemResourceAsStream("cantons.csv")
if (stream != null) {
return stream.bufferedReader().lineSequence().filterNot {
it.startsWith("code")
}.map {
val values = it.split(",")
Pair(values[0].trim(), Canton(values[1].trim(), values[2].trim(), values[3].trim(), values[4].trim()))
}.toMap()
} else {
log.error("Could not load cantons.csv from classpath!")
exitProcess(1)
}
}
}
\ No newline at end of file
......@@ -31,9 +31,7 @@ import java.io.StringReader
class KafkaTopology(private val settings: SettingsLoader) {
private val log = LogManager.getLogger("StreamsProcessing")
private val municipalities = Helpers.getMunicipalities()
private val transformer = Transform(municipalities)
private val transformer = Transform()
fun build(): Topology {
val builder = StreamsBuilder()
......
......@@ -23,15 +23,21 @@ import org.apache.jena.riot.RDFDataMgr
import org.apache.jena.riot.RDFFormat
import org.apache.kafka.streams.KeyValue
import org.apache.logging.log4j.LogManager
import org.memobase.model.*
import org.memobase.model.Municipality
import org.memobase.rdf.NS
import org.memobase.rdf.RDF
import org.memobase.rdf.RICO
import org.memobase.rdf.WD
import rdf.WD
import java.io.StringWriter
import org.memobase.model.Address
import org.memobase.model.Institution
import org.memobase.model.RecordSet
import org.memobase.rdf.SCHEMA
class Transform(private val municipalities: Map<String, Municipality>) {
private val log = LogManager.getLogger("Transform")
class Transform {
private val log = LogManager.getLogger("InstitutionTransform")
private val cantons = Helpers.getCantons()
private val municipalities = Helpers.getMunicipalities()
fun createInstitution(input: Institution): Pair<String, Model> {
......@@ -45,7 +51,12 @@ class Transform(private val municipalities: Map<String, Municipality>) {
identifier.addProperty(RICO.identifier, literal(input.field_memobase_id))
resource.addProperty(RICO.identifiedBy, identifier)
// TODO: proper multi language integration!
val oldIdentifier = model.createResource()
oldIdentifier.addProperty(RDF.type, RICO.Identifier)
oldIdentifier.addProperty(RICO.type, literal("oldMemobase"))
oldIdentifier.addProperty(RICO.identifier, literal(input.field_old_memobase_id))
resource.addProperty(RICO.identifiedBy, identifier)
resource.addProperty(RICO.name, langLiteral(input.title, "de"))
resource.addProperty(RICO.name, langLiteral(input.title_fr, "fr"))
resource.addProperty(RICO.name, langLiteral(input.title_it, "it"))
......@@ -76,6 +87,9 @@ class Transform(private val municipalities: Map<String, Municipality>) {
if (it != null)
resource.addProperty(WD.onlineArchive, literal(it.uri))
}
input.field_institution_types.forEach {
resource.addProperty(WD.typeOfInstitution, model.createResource(NS.wd + it.substringAfterLast("/")))
}
return Pair(resource.uri, model)
}
......@@ -101,24 +115,40 @@ class Transform(private val municipalities: Map<String, Municipality>) {
val postalCode = address.postal_code.trim()
val municipality = if (municipalities.containsKey(postalCode)) {
municipalities[postalCode]
} else {
// the input validation in drupal should ensure that this never happens.
log.error("Invalid postal code: $postalCode")
null
}
location.addProperty(RDF.type, RICO.Place)
location.addProperty(WD.postalCode, literal(postalCode))
location.addProperty(WD.coordinates, literal(address.coordinates))
// does not enrich city, canton or cantons, if the postal code is not in the list.
if (municipality != null) {
// canton
location.addProperty(WD.adminUnit, ResourceFactory.createResource(municipality.canton))
// city
location.addProperty(WD.adminUnit, ResourceFactory.createResource(municipality.id))
// TODO: Replace this with the coordinates from source!
municipality.coordinates.forEach { coordinate ->
location.addProperty(WD.coordinates, literal(coordinate))
val canton = ResourceFactory.createResource()
canton.addProperty(RDF.type, RICO.Place)
location.addProperty(WD.adminUnit, canton)
cantons[address.administrative_area].let {
// this should always be the case!
if (it != null) {
canton.addProperty(RICO.name, langLiteral(it.de, "de"))
canton.addProperty(RICO.name, langLiteral(it.fr, "fr"))
canton.addProperty(RICO.name, langLiteral(it.it, "it"))
canton.addProperty(SCHEMA.sameAs, it.id)
} else {
// this shouldn't happen!
canton.addProperty(RICO.name, literal("Unknown"))
}
}
val municipality = ResourceFactory.createResource()
municipality.addProperty(RDF.type, RICO.Place)
location.addProperty(WD.adminUnit, municipality)
municipalities[postalCode].let {
if (it != null) {
municipality.addProperty(RICO.name, langLiteral(it.de, "de"))
municipality.addProperty(RICO.name, langLiteral(it.fr, "fr"))
municipality.addProperty(RICO.name, langLiteral(it.it, "it"))
municipality.addProperty(SCHEMA.sameAs, it.id)
} else {
municipality.addProperty(RICO.name, literal(address.locality))
}
}
// country is currently hard coded to switzerland!
......
package org.memobase.model
data class Address(
val langcode: String?,
val country_code: String,
val address_line1: String,
val address_line2: String?,
val administrative_area: String,
val locality: String,
val postal_code: String,
val administrative_area: String?,
val dependent_locality: String?,
val langcode: String?,
val postal_code: String,
val sorting_code: String?,
val address_line1: String,
val address_line2: String?,
val organization: String?,
val given_name: String?,
val additional_name: String?,
val family_name: String?
val family_name: String?,
val coordinates: String
)
\ No newline at end of file
/*
* Drupal Sync 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 Canton(
val id: String,
val de: String,
val fr: String,
val it: String
)
......@@ -25,13 +25,19 @@ data class Institution(
val title_it: String,
val field_address: List<Address>,
val field_isil: String?,
val field_memobase_id: String,
val field_old_memobase_id: String,
val field_email: String?,
val field_link_archive_catalog: Link?,
val field_website: Link?,
val field_link_archive_catalog: Link?,
val field_text: RichText,
val field_text_fr: RichText,
val field_text_it: RichText
val field_text_it: RichText,
val field_institution_types: List<String>,
val field_wikidata_id: Link
) : Input("Institution")
\ No newline at end of file
......@@ -18,8 +18,8 @@
package org.memobase.model
data class Municipality(
val postalCodes: List<String>,
val canton: String,
val id: String,
val coordinates: List<String>
val de: String,
val fr: String,
val it: String
)
\ No newline at end of file
package org.memobase.rdf
import org.apache.jena.rdf.model.Property
import org.apache.jena.rdf.model.Resource
import org.apache.jena.rdf.model.ResourceFactory
object WD {
val location = res("Q17334923")
val switzerland = res("Q39")
val isil = prop("P791")
val street = prop("P669")
val streetNumber = prop("P670")
val streetAddress = prop("P6375")
val adminUnit = prop("P131")
val postalCode = prop("P281")
val country = prop("P17")
val website = prop("P856")
val emailAddress = prop("P968")
val onlineArchive = prop("P2699")
val coordinates = prop("P625")
val image = prop("P18")
val logo = prop("P154")
val typeOfInstitution = prop("P31")
private fun prop(name: String): Property {
return ResourceFactory.createProperty(NS.wdt, name)
}
fun res(name: String): Resource {
return ResourceFactory.createResource(NS.wd + name)
}
}
\ No newline at end of file
item,labelDE,labelFR,labelIT
http://www.wikidata.org/entity/Q834,Kanton Wallis,canton du Valais,canton du Valais
http://www.wikidata.org/entity/Q11922,Kanton Glarus,canton de Glaris,canton de Glaris
http://www.wikidata.org/entity/Q11911,Kanton Bern,canton de Berne,canton de Berne
http://www.wikidata.org/entity/Q11929,Kanton Solothurn,canton de Soleure,canton de Soleure
http://www.wikidata.org/entity/Q11917,Kanton Genf,canton de Genève,canton de Genève
http://www.wikidata.org/entity/Q11925,Kanton Graubünden,canton des Grisons,canton des Grisons
http://www.wikidata.org/entity/Q11933,Kanton Zug,canton de Zoug,canton de Zoug
http://www.wikidata.org/entity/Q11943,Kanton Zürich,canton de Zurich,canton de Zurich
http://www.wikidata.org/entity/Q11972,Kanton Aargau,canton d'Argovie,canton d'Argovie
http://www.wikidata.org/entity/Q12079,Kanton Appenzell Ausserrhoden,Appenzell Rhodes-Extérieures,Appenzell Rhodes-Extérieures
http://www.wikidata.org/entity/Q12121,Kanton Luzern,canton de Lucerne,canton de Lucerne
http://www.wikidata.org/entity/Q12146,Kanton Basel-Landschaft,canton de Bâle-Campagne,canton de Bâle-Campagne
http://www.wikidata.org/entity/Q12094,Kanton Appenzell Innerrhoden,canton de Appenzell Rhodes-Intérieures,canton de Appenzell Rhodes-Intérieures
http://www.wikidata.org/entity/Q12172,Kanton Basel-Stadt,canton de Bâle-Ville,canton de Bâle-Ville
http://www.wikidata.org/entity/Q12404,Kanton Uri,canton d'Uri,canton d'Uri
http://www.wikidata.org/entity/Q12592,Kanton Nidwalden,canton de Nidwald,canton de Nidwald
http://www.wikidata.org/entity/Q12713,Kanton Thurgau,canton de Thurgovie,canton de Thurgovie
http://www.wikidata.org/entity/Q12724,Kanton Tessin,canton du Tessin,canton du Tessin
http://www.wikidata.org/entity/Q12640,Kanton Freiburg,canton de Fribourg,canton de Fribourg
http://www.wikidata.org/entity/Q12573,Kanton Obwalden,canton d'Obwald,canton d'Obwald
http://www.wikidata.org/entity/Q12433,Kanton Schwyz,canton de Schwytz,canton de Schwytz
http://www.wikidata.org/entity/Q12746,Kanton St. Gallen,canton de Saint-Gall,canton de Saint-Gall
http://www.wikidata.org/entity/Q12697,Kanton Schaffhausen,canton de Schaffhouse,canton de Schaffhouse
http://www.wikidata.org/entity/Q12738,Kanton Neuenburg,canton de Neuchâtel,canton de Neuchâtel
http://www.wikidata.org/entity/Q12755,Kanton Jura,canton du Jura,canton du Jura
http://www.wikidata.org/entity/Q12771,Kanton Waadt,canton de Vaud,canton de Vaud
code,item,de,fr,it
VS,http://www.wikidata.org/entity/Q834,Wallis,Valais,Valais
GL,http://www.wikidata.org/entity/Q11922,Glarus,Glaris,Glaris
BE,http://www.wikidata.org/entity/Q11911,Bern,Berne,Berne
SO,http://www.wikidata.org/entity/Q11929,Solothurn,Soleure,Soleure
GE,http://www.wikidata.org/entity/Q11917,Genf,Genève,Genève
GR,http://www.wikidata.org/entity/Q11925,Graubünden,Grisons,Grisons
ZG,http://www.wikidata.org/entity/Q11933,Zug,Zoug,Zoug
ZH,http://www.wikidata.org/entity/Q11943,Zürich,Zurich,Zurich
AG,http://www.wikidata.org/entity/Q11972,Aargau,Argovie,Argovie
AR,http://www.wikidata.org/entity/Q12079,Appenzell Ausserrhoden,Appenzell Rhodes-Extérieures,Appenzell Rhodes-Extérieures
LU,http://www.wikidata.org/entity/Q12121,Luzern,Lucerne,Lucerne
BL,http://www.wikidata.org/entity/Q12146,Basel-Landschaft,Bâle-Campagne,Bâle-Campagne
AI,http://www.wikidata.org/entity/Q12094,Appenzell Innerrhoden,Appenzell Rhodes-Intérieures,Appenzell Rhodes-Intérieures
BS,http://www.wikidata.org/entity/Q12172,Basel-Stadt,Bâle-Ville,Bâle-Ville
UR,http://www.wikidata.org/entity/Q12404,Uri,Uri,Uri
NW,http://www.wikidata.org/entity/Q12592,Nidwalden,Nidwald,Nidwald
TG,http://www.wikidata.org/entity/Q12713,Thurgau,Thurgovie,Thurgovie
TI,http://www.wikidata.org/entity/Q12724,Tessin,Tessin,Tessin
FR,http://www.wikidata.org/entity/Q12640,Freiburg,Fribourg,Fribourg
OW,http://www.wikidata.org/entity/Q12573,Obwalden,Obwald,Obwald
SZ,http://www.wikidata.org/entity/Q12433,Schwyz,Schwytz,Schwytz
SG,http://www.wikidata.org/entity/Q12746,St. Gallen,Saint-Gall,Saint-Gall
SH,http://www.wikidata.org/entity/Q12697,Schaffhausen,Schaffhouse,Schaffhouse
NE,http://www.wikidata.org/entity/Q12738,Neuenburg,Neuchâtel,Neuchâtel
JU,http://www.wikidata.org/entity/Q12755,Jura,Jura,Jura
VD,http://www.wikidata.org/entity/Q12771,Waadt,Vaud,Vaud
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -42,7 +42,13 @@ class Test {
fun `test municipalities loader`() {
val result = Helpers.getMunicipalities()
assertThat(result)
.isNotNull
.isNotEmpty
}
@Test
fun `test cantons loader`() {
val result = Helpers.getCantons()
assertThat(result)
.isNotEmpty
}
......
code,item,de,fr,it
VS,http://www.wikidata.org/entity/Q834,Wallis,Valais,Vallese
GL,http://www.wikidata.org/entity/Q11922,Glarus,Glaris,Glarona
BE,http://www.wikidata.org/entity/Q11911,Bern,Berne,Berna
SO,http://www.wikidata.org/entity/Q11929,Solothurn,Soleure,Soletta
GE,http://www.wikidata.org/entity/Q11917,Genf,Genève,Ginevra
GR,http://www.wikidata.org/entity/Q11925,Graubünden,Grisons,Grigioni
ZG,http://www.wikidata.org/entity/Q11933,Zug,Zoug,Zugo
ZH,http://www.wikidata.org/entity/Q11943,Zürich,Zurich,Zurigo
AG,http://www.wikidata.org/entity/Q11972,Aargau,Argovie,Argovia
AR,http://www.wikidata.org/entity/Q12079,Appenzell Ausserrhoden,Appenzell Rhodes-Extérieures,Appenzello Esterno
LU,http://www.wikidata.org/entity/Q12121,Luzern,Lucerne,Lucerna
BL,http://www.wikidata.org/entity/Q12146,Basel-Landschaft,Bâle-Campagne,Basilea Campagna
AI,http://www.wikidata.org/entity/Q12094,Appenzell Innerrhoden,Appenzell Rhodes-Intérieures,Appenzello Interno
BS,http://www.wikidata.org/entity/Q12172,Basel-Stadt,Bâle-Ville,Basilea Città
UR,http://www.wikidata.org/entity/Q12404,Uri,Uri,Uri
NW,http://www.wikidata.org/entity/Q12592,Nidwalden,Nidwald,Nidvaldo
TG,http://www.wikidata.org/entity/Q12713,Thurgau,Thurgovie,Turgovia
TI,http://www.wikidata.org/entity/Q12724,Tessin,Tessin,Ticino
FR,http://www.wikidata.org/entity/Q12640,Freiburg,Fribourg,Friburgo
OW,http://www.wikidata.org/entity/Q12573,Obwalden,Obwald,Obvaldo
SZ,http://www.wikidata.org/entity/Q12433,Schwyz,Schwytz,Svitto
SG,http://www.wikidata.org/entity/Q12746,St. Gallen,Saint-Gall,San Gallo
SH,http://www.wikidata.org/entity/Q12697,Schaffhausen,Schaffhouse,Sciaffusa
NE,http://www.wikidata.org/entity/Q12738,Neuenburg,Neuchâtel,Neuchâtel
JU,http://www.wikidata.org/entity/Q12755,Jura,Jura,Giura
VD,http://www.wikidata.org/entity/Q12771,Waadt,Vaud,Vaud
{
"type": "node--institution",
"status": true,
"title": "Staatsarchiv des Kantons Aargau",
"title_fr": "Archives de l’Etat Argovie",
"title_it": "Archivio cantonale del Argovia",
"title": "Test institution Oana",
"title_fr": "Test institution Oana (FR)",
"title_it": "Test institution Oana (IT)",
"field_address": [
{
"langcode": "",
"langcode": "de",
"country_code": "CH",
"administrative_area": null,
"locality": "Aarau",
"administrative_area": "BS",
"locality": "Basel",
"dependent_locality": null,
"postal_code": "5001",
"postal_code": "4051",
"sorting_code": null,
"address_line1": "Entfelderstrasse 22",
"address_line1": "Petersplatz 1",
"address_line2": "",
"organization": "",
"organization": "Universität Basel",
"given_name": null,
"additional_name": null,
"family_name": null
},
{
"lat": 47.5602571,
"lng": 7.5804113,
"data": [],
"value": "47.5602571, 7.5804113"
},
{
"langcode": "de",
"country_code": "CH",
"administrative_area": "BE",
"locality": "Bern",
"dependent_locality": null,
"postal_code": "3005",
"sorting_code": null,
"address_line1": "Helvetiapl. 5",
"address_line2": "",
"organization": "Bernisches Historisches Museum ",
"given_name": null,
"additional_name": null,
"family_name": null
},
{
"lat": 46.9531243,
"lng": 7.434256,
"data": [],
"value": "46.9531243, 7.434256"
}
],
"field_isil": null,
"field_memobase_id": "aag",
"field_email": "staatsarchiv@ag.ch",
"field_isil": "isil_test",
"field_memobase_id": "RadioX",
"field_old_memobase_id": "test_old_memobase_id",
"field_email": "email@test.test",
"field_website": {
"uri": "https://www.ag.ch/staatsarchiv",
"title": "",
"uri": "http://institution-website.website",
"title": "Institution Website",
"options": []
},
"field_wikidata_id": "http://test.test",
"field_link_archive_catalog": {
"uri": "https://www.ag.ch/staatsarchiv/suche/suchinfo.aspx",
"title": "",
"uri": "http://online-archiv-catalog.website",
"title": "Online-Archivkatalog",
"options": []
},
"field_text": {
"value": "<p>Das Staatsarchiv Aargau ist das zentrale Archiv des Kantons und seiner Rechtsvorgänger. Es sammelt das archivalische Kulturgut des Kantons und sorgt für die fachgerechte Aufbewahrung, Erschliessung und Vermittlung.<br />\r\nSeine Bestände reichen vom Hochmittelalter bis in die Gegenwart. Neben wertvollen Urkunden und Zeugnissen vormoderner Herrschaftsfixierung bewahrt das Staatsarchiv die systematische Dokumentation der Verwaltungstätigkeit seit der Kantonsgründung 1803. Seine Kernbestände ergänzt es durch Nachlässe privater Herkunft, die von öffentlichem Interesse sind. Seit 2009 ist das Staatsarchiv Aargau im Besitz der Fotobestände aus dem Pressehaus Ringier. Diese umfassen ca. 6-7 Mio Bilder. Die Bilder decken ungefähr den Zeitraum 1930-2000 ab, mit einem Schwerpunkt auf der Zeit zwischen 1950-2000.</p>\r\n",
"value": "<p>test_description</p>\r\n",
"format": "editorial",
"processed": "Das Staatsarchiv Aargau ist das zentrale Archiv des Kantons und seiner Rechtsvorgänger. Es sammelt das archivalische Kulturgut des Kantons und sorgt für die fachgerechte Aufbewahrung, Erschliessung und Vermittlung.\nSeine Bestände reichen vom Hochmittelalter bis in die Gegenwart. Neben wertvollen Urkunden und Zeugnissen vormoderner Herrschaftsfixierung bewahrt das Staatsarchiv die systematische Dokumentation der Verwaltungstätigkeit seit der Kantonsgründung 1803. Seine Kernbestände ergänzt es durch Nachlässe privater Herkunft, die von öffentlichem Interesse sind. Seit 2009 ist das Staatsarchiv Aargau im Besitz der Fotobestände aus dem Pressehaus Ringier. Diese umfassen ca. 6-7 Mio Bilder. Die Bilder decken ungefähr den Zeitraum 1930-2000 ab, mit einem Schwerpunkt auf der Zeit zwischen 1950-2000."
"processed": "test_description"
},
"field_text_fr": {
"value": "<p>Das Staatsarchiv Aargau ist das zentrale Archiv des Kantons und seiner Rechtsvorgänger. Es sammelt das archivalische Kulturgut des Kantons und sorgt für die fachgerechte Aufbewahrung, Erschliessung und Vermittlung.<br />\r\nSeine Bestände reichen vom Hochmittelalter bis in die Gegenwart. Neben wertvollen Urkunden und Zeugnissen vormoderner Herrschaftsfixierung bewahrt das Staatsarchiv die systematische Dokumentation der Verwaltungstätigkeit seit der Kantonsgründung 1803. Seine Kernbestände ergänzt es durch Nachlässe privater Herkunft, die von öffentlichem Interesse sind. Seit 2009 ist das Staatsarchiv Aargau im Besitz der Fotobestände aus dem Pressehaus Ringier. Diese umfassen ca. 6-7 Mio Bilder. Die Bilder decken ungefähr den Zeitraum 1930-2000 ab, mit einem Schwerpunkt auf der Zeit zwischen 1950-2000.</p>\r\n",
"value": "<p>test_description&nbsp;(FR)</p>\r\n",
"format": "editorial",
"processed": "Das Staatsarchiv Aargau ist das zentrale Archiv des Kantons und seiner Rechtsvorgänger. Es sammelt das archivalische Kulturgut des Kantons und sorgt für die fachgerechte Aufbewahrung, Erschliessung und Vermittlung.\nSeine Bestände reichen vom Hochmittelalter bis in die Gegenwart. Neben wertvollen Urkunden und Zeugniss