catch more invalid inputs

parent 910788ef
Pipeline #20489 passed with stages
in 5 minutes and 2 seconds
2020.11.05 14:00:58 INFO started: Metals version 0.9.4 in workspace '/home/seb/code/switchgit/memoriav/memobase-2020/services/import-process/normalization-service' .
2020.11.05 14:00:58 INFO time: initialize in 0.35s
......@@ -23,12 +23,15 @@ import ch.memobase.configs.LocalTransformsLoader
import ch.memobase.kafka.utils.ConfigJoiner
import ch.memobase.kafka.utils.models.ImportService
import ch.memobase.kafka.utils.models.JoinedValues
import ch.memobase.rdf.InvalidInputException
import ch.memobase.rdf.MemobaseModel
import ch.memobase.reporting.Report
import ch.memobase.reporting.ReportStatus
import ch.memobase.settings.HeaderExtractionTransformSupplier
import ch.memobase.settings.HeaderMetadata
import ch.memobase.settings.SettingsLoader
import java.io.ByteArrayInputStream
import java.io.StringWriter
import org.apache.jena.rdf.model.Model
import org.apache.jena.riot.Lang
import org.apache.jena.riot.RDFDataMgr
......@@ -38,8 +41,6 @@ import org.apache.kafka.streams.KeyValue
import org.apache.kafka.streams.StreamsBuilder
import org.apache.kafka.streams.kstream.Predicate
import org.apache.logging.log4j.LogManager
import java.io.ByteArrayInputStream
import java.io.StringWriter
class KafkaTopology(
private val settings: SettingsLoader
......@@ -69,7 +70,6 @@ class KafkaTopology(
val joinedStream =
configJoiner.join(stream, configStream)
val filterInvalidLocalTransforms = joinedStream
.transformValues(HeaderExtractionTransformSupplier<JoinedValues<String, LocalTransformsLoader>>())
.branch(
......@@ -135,10 +135,22 @@ class KafkaTopology(
private fun transformations(key: String, input: PreparedInput): Pair<Report, Model> {
val transforms = input.localTransforms.get() + globalTransforms
val results = mutableListOf<String>()
for (transform in transforms) {
val listOfResources = input.model.listRicoResourceSubjects().toList()
for (resource in listOfResources)
results.addAll(transform.transform(resource, input.model))
try {
for (transform in transforms) {
val listOfResources = input.model.listRicoResourceSubjects().toList()
for (resource in listOfResources)
results.addAll(transform.transform(resource, input.model))
}
} catch (ex: InvalidInputException) {
return Pair(
Report(
key,
ReportStatus.fatal,
"Normalization failed: ${ex.message}".trim(),
Service.step
),
input.model
)
}
return Pair(
Report(
......
......@@ -8,4 +8,4 @@ data class PreparedInput(
val model: MemobaseModel,
val localTransforms: LocalTransformsLoader,
val metadata: HeaderMetadata
)
\ No newline at end of file
)
......@@ -16,9 +16,9 @@
*/
package org.memobase
import ch.memobase.settings.SettingsLoader
import org.apache.kafka.streams.KafkaStreams
import org.apache.logging.log4j.LogManager
import ch.memobase.settings.SettingsLoader
class Service(file: String = "app.yml") {
companion object {
......
......@@ -21,6 +21,10 @@ import ch.memobase.rdf.MemobaseModel
import ch.memobase.rdf.NS
import ch.memobase.reporting.Report
import com.beust.klaxon.Klaxon
import java.io.File
import java.io.FileOutputStream
import java.nio.charset.Charset
import java.util.stream.Stream
import org.apache.jena.riot.Lang
import org.apache.jena.riot.RDFDataMgr
import org.apache.jena.riot.RDFFormat
......@@ -35,10 +39,6 @@ import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.MethodSource
import org.memobase.params.KafkaTestParams
import java.io.File
import java.io.FileOutputStream
import java.nio.charset.Charset
import java.util.stream.Stream
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class TestIntegration {
......
......@@ -24,8 +24,8 @@
_:b0 a rico:Activity ;
rico:affects _:b1 ;
rico:beginningDate "2021-06-18T16:06:57+0000"^^xsd:dateTime ;
rico:endDate "2021-06-18T16:06:57+0000"^^xsd:dateTime ;
rico:beginningDate "2021-09-21T09:09:17+0000"^^xsd:dateTime ;
rico:endDate "2021-09-21T09:09:17+0000"^^xsd:dateTime ;
rico:performedBy [ a rico:Mechanism ;
rico:name "GenreNormalizer" ;
rico:performs _:b0
......@@ -33,21 +33,32 @@ _:b0 a rico:Activity ;
rico:resultsIn _:b2 ;
rico:type "enrichment" .
_:b3 a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Genre" ;
skos:prefLabel "Filmwochenschau"@de .
_:b3 a rico:Language ;
rico:name "dt"@de ;
rico:type "content" .
_:b4 a rico:Activity ;
rico:affects _:b5 ;
rico:beginningDate "2021-06-18T16:06:57+0000"^^xsd:dateTime ;
rico:endDate "2021-06-18T16:06:57+0000"^^xsd:dateTime ;
rico:beginningDate "2021-09-21T09:09:17+0000"^^xsd:dateTime ;
rico:endDate "2021-09-21T09:09:17+0000"^^xsd:dateTime ;
rico:performedBy [ a rico:Mechanism ;
rico:name "LanguagesNormalizer" ;
rico:name "CarrierTypeNormalizer" ;
rico:performs _:b4
] ;
rico:resultsIn _:b6 ;
rico:type "enrichment" .
_:b7 a rico:Activity ;
rico:affects _:b3 ;
rico:beginningDate "2021-09-21T09:09:17+0000"^^xsd:dateTime ;
rico:endDate "2021-09-21T09:09:17+0000"^^xsd:dateTime ;
rico:performedBy [ a rico:Mechanism ;
rico:name "LanguagesNormalizer" ;
rico:performs _:b7
] ;
rico:resultsIn _:b8 ;
rico:type "enrichment" .
mbr:sfw-SFW_1376-2 a rico:Record ;
dcterms:abstract "Abstract: <br> Schweiz, Seedorf, UR: Moderner Landwirtschaftsbetrieb der Nonnen des Benediktinerinnen-Klosters <br> <br> Sequenzbeschrieb: <br> Seedorf, UR (Schweiz) – Schwenk AA Kloster <br> Seedorf, UR (Schweiz) – Benediktinerinnen bei Gartenarbeit <br> Seedorf, UR (Schweiz) – Nonne bei Feldarbeit auf dem Traktor, Ordensschwestern Heu wendend <br> Seedorf, UR (Schweiz) – Aufladen von Heu mit Ladewagen <br> Seedorf, UR (Schweiz) – Einfahrt Traktor mit vollem Heuwagen in Scheune <br> <br> Communiqué: <br> In Seedorf, Kanton Uri, gehören seit vielen hundert Jahren 6 Stunden Feldarbeit zum Tagesprogramm des dortigen Benediktinerinnen-Klosters. Heute verfügt es auch über die modernsten Erntemaschinen. <br> <br> Begleittext: <br> Die frommen Klosterfrauen von Seedorf im Reusstal sind bekannt dafür, dass sie mindestens 6 Stunden ihres Tagesprogramms der Garten-und Feldarbeit widmen. / Modernste Landwirtschaftsmaschinen erlauben den Benediktinerinnen sowohl sich selbst als auch eine dem Kloster angeschlossene Haushaltungsschule mit 30 jungen Töchtern reichhaltig zu ernähren. / Zur Zeit der Kreuzzüge stand hier ein Siechenhaus, das dem heiligen Lazarus geweiht war und schon damals viele hilfreiche weibliche Geister aus der ganzen Innerschweiz anzog. / Im 16. Jahrhundert übergab Papst Paul IV. das vom Kanton renovierte Kloster den Benediktinerinnen, die es seither geradezu mustergültig betreut haben. / Wenn der viele Regen das Gras nicht trocknen lässt, dann betreiben die fleissigen Nonnen das Emden in zwei Gruppen. Während die eine das Gras schneidet, fährt die andere mit der Maschine direkt hintendrein und lädt alles auf. / Das nasse Gras wird dann ins Kloster gefahren und dort in einer Spezialanlage getrocknet. Bei den Seedorfer Klosterfrauen ist es Tradition, weitherum im Lande als besonders aufgeschlossen und fortschrittlich zu gelten. <br> <br> <![CDATA[<a href=\"https://media.zem.ch/01WS/1969/Communique_1376.pdf\" target=\"_blank\">Communiqué_1376.pdf</a>]]>"@de ;
dcterms:issued [ a rico:DateRange ;
......@@ -64,33 +75,29 @@ mbr:sfw-SFW_1376-2 a rico:Record ;
rico:name "Seedorf, UR (Schweiz)"@de
] ;
schema:sameAs "https://www.recherche.bar.admin.ch/recherche/#/de/suche/archivplan/21689176" ;
ebucore:hasGenre _:b1 , _:b3 , _:b7 , _:b8 , _:b9 , _:b2 ;
ebucore:hasGenre _:b9 , _:b1 , _:b10 , _:b11 , _:b12 , _:b2 ;
rico:descriptiveNote "Quellenangabe für Zitate und Publikationen: <br> Schweizerisches Bundesarchiv, J2.143#1996/386#1376-1#2*, Schweizer Filmwochenschau vom 19.09.1969, Klosterfrauen treiben Agrarkultur (1376-2)"@de ;
rico:hasInstantiation <https://memobase.ch/instantiation/digital/sfw-SFW_1376-2-1> , <https://memobase.ch/instantiation/physical/sfw-SFW_1376-2-0> ;
rico:hasLanguage _:b6 , _:b5 ;
rico:hasLanguage _:b8 , _:b3 ;
rico:hasSubject [ a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Deskriptoren" ;
skos:prefLabel "LANDWIRTSCHAFT"@de
] ;
rico:hasSubject [ a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Deskriptoren" ;
skos:prefLabel "CHRISTLICHE KIRCHE"@de
skos:prefLabel "RELIGION"@de
] ;
rico:hasSubject [ a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Deskriptoren" ;
skos:prefLabel "RELIGION"@de
skos:prefLabel "ORDENSGEMEINSCHAFT"@de
] ;
rico:hasSubject [ a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Deskriptoren" ;
skos:prefLabel "LANDWIRTSCHAFT"@de
skos:prefLabel "CHRISTLICHE KIRCHE"@de
] ;
rico:hasSubject [ a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Deskriptoren" ;
skos:prefLabel "ORDENSGEMEINSCHAFT"@de
] ;
rico:hasTitle [ a rico:Title ;
rico:title "Schweizer Filmwochenschau"@de ;
rico:type "series"
skos:prefLabel "LANDWIRTSCHAFT"@de
] ;
rico:hasTitle [ a rico:Title ;
rico:title "Schweizer Filmwochenschau vom 19.09.1969"@de ;
......@@ -100,21 +107,25 @@ mbr:sfw-SFW_1376-2 a rico:Record ;
rico:title "Klosterfrauen treiben Agrarkultur (1376-2)"@de ;
rico:type "main"
] ;
rico:heldBy mbcb:sfw ;
rico:identifiedBy [ a rico:Identifier ;
rico:identifier "SFW_1376-2" ;
rico:type "original"
rico:hasTitle [ a rico:Title ;
rico:title "Schweizer Filmwochenschau"@de ;
rico:type "series"
] ;
rico:heldBy mbcb:sfw ;
rico:identifiedBy [ a rico:Identifier ;
rico:identifier "https://memobase.ch/record/sfw-SFW_1376-2" ;
rico:type "main"
] ;
rico:identifiedBy [ a rico:Identifier ;
rico:identifier "SFW_1376-2" ;
rico:type "original"
] ;
rico:isPartOf mbrs:fbfws ;
rico:publishedBy [ a rico:CorporateBody ;
rico:name "SFW"@de
] ;
rico:recordResourceOrInstantiationIsSourceOfCreationRelation
_:b10 ;
_:b13 ;
rico:regulatedBy [ a rico:Rule ;
rico:name "Cinémathèque suisse, Schweizerisches Bundesarchiv" ;
rico:regulates mbr:sfw-SFW_1376-2 ;
......@@ -123,20 +134,17 @@ mbr:sfw-SFW_1376-2 a rico:Record ;
rico:title "Klosterfrauen treiben Agrarkultur (1376-2)"@de ;
rico:type "Film" .
_:b11 a rico:Activity ;
rico:affects _:b3 ;
rico:beginningDate "2021-06-18T16:06:57+0000"^^xsd:dateTime ;
rico:endDate "2021-06-18T16:06:57+0000"^^xsd:dateTime ;
_:b14 a rico:Activity ;
rico:affects _:b11 ;
rico:beginningDate "2021-09-21T09:09:17+0000"^^xsd:dateTime ;
rico:endDate "2021-09-21T09:09:17+0000"^^xsd:dateTime ;
rico:performedBy [ a rico:Mechanism ;
rico:name "GenreNormalizer" ;
rico:performs _:b11
rico:performs _:b14
] ;
rico:resultsIn _:b9 ;
rico:type "enrichment" .
_:b12 a rico:CarrierType ;
rico:name "35mm Zelluloseazetat"@de .
<https://memobase.ch/instantiation/digital/sfw-SFW_1376-2-1>
a rico:Instantiation ;
ebucore:locator "<![CDATA[https://media.zem.ch/01WS/1969/SFW_1376.mp4?start=109&end=187]]>" ;
......@@ -160,89 +168,81 @@ _:b12 a rico:CarrierType ;
] ;
rico:type "digitalObject" .
_:b8 a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Genre" ;
skos:prefLabel "Canzone"@de .
_:b13 a rico:CarrierType ;
schema:sameAs "http://www.wikidata.org/entity/Q226528" ;
rico:name "35-mm-Film"@de , "format 35 mm"@fr , "35 millimetri"@it ;
rico:resultsFrom _:b14 .
<https://memobase.ch/instantiation/physical/sfw-SFW_1376-2-0>
a rico:Instantiation ;
rdau:P60558 "SW"@de ;
ebucore:duration "78" ;
rico:hasCarrierType _:b12 , _:b13 ;
rico:hasCarrierType _:b5 , _:b6 ;
rico:hasDerivedInstantiation <https://memobase.ch/instantiation/digital/sfw-SFW_1376-2-1> ;
rico:identifiedBy [ a rico:Identifier ;
rico:identifier "J2.143#1996/386#1376-1#2*" ;
rico:type "callNumber"
] ;
rico:identifiedBy [ a rico:Identifier ;
rico:identifier "https://memobase.ch/instantiation/physical/sfw-SFW_1376-2-0" ;
rico:type "main"
] ;
rico:identifiedBy [ a rico:Identifier ;
rico:identifier "J2.143#1996/386#1376-1#2*" ;
rico:type "callNumber"
] ;
rico:instantiates mbr:sfw-SFW_1376-2 ;
rico:type "physicalObject" .
_:b10 a rico:CreationRelation ;
rico:creationRelationHasSource mbr:sfw-SFW_1376-2 ;
rico:creationRelationHasTarget [ a rico:CorporateBody ;
rico:agentIsTargetOfCreationRelation
_:b10 ;
rico:name "Schweizer Filmwochenschau (SFW)"@de
] ;
rico:name "Autor" ;
rico:type "creator" .
_:b7 a skos:Concept ;
_:b12 a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Genre" ;
skos:prefLabel "Musik"@de , "Musique"@fr , "Musica"@it ;
skos:prefLabel "Filmwochenschau"@de , "Filmwochenschau"@fr , "Filmwochenschau"@it ;
rico:resultsFrom _:b15 .
_:b14 a rico:Activity ;
rico:affects _:b12 ;
rico:beginningDate "2021-06-18T16:06:57+0000"^^xsd:dateTime ;
rico:endDate "2021-06-18T16:06:57+0000"^^xsd:dateTime ;
rico:performedBy [ a rico:Mechanism ;
rico:name "CarrierTypeNormalizer" ;
rico:performs _:b14
] ;
rico:resultsIn _:b13 ;
rico:type "enrichment" .
_:b2 a skos:Concept ;
_:b11 a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Genre" ;
skos:prefLabel "Performance"@de , "Performance"@fr , "Prestazioni"@it ;
rico:resultsFrom _:b0 .
skos:prefLabel "Ballett"@de .
_:b15 a rico:Activity ;
rico:affects _:b8 ;
rico:beginningDate "2021-06-18T16:06:57+0000"^^xsd:dateTime ;
rico:endDate "2021-06-18T16:06:57+0000"^^xsd:dateTime ;
rico:affects _:b10 ;
rico:beginningDate "2021-09-21T09:09:17+0000"^^xsd:dateTime ;
rico:endDate "2021-09-21T09:09:17+0000"^^xsd:dateTime ;
rico:performedBy [ a rico:Mechanism ;
rico:name "GenreNormalizer" ;
rico:performs _:b15
] ;
rico:resultsIn _:b7 ;
rico:resultsIn _:b12 ;
rico:type "enrichment" .
_:b9 a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Genre" ;
skos:prefLabel "Filmwochenschau"@de , "Filmwochenschau"@fr , "Filmwochenschau"@it ;
rico:resultsFrom _:b11 .
_:b13 a rico:CreationRelation ;
rico:creationRelationHasSource mbr:sfw-SFW_1376-2 ;
rico:creationRelationHasTarget [ a rico:CorporateBody ;
rico:agentIsTargetOfCreationRelation
_:b13 ;
rico:name "Schweizer Filmwochenschau (SFW)"@de
] ;
rico:name "Autor" ;
rico:type "creator" .
_:b1 a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Genre" ;
skos:prefLabel "Ballett"@de .
skos:prefLabel "Canzone"@de .
_:b6 a rico:CarrierType ;
schema:sameAs "http://www.wikidata.org/entity/Q226528" ;
rico:name "35-mm-Film"@de , "format 35 mm"@fr , "35 millimetri"@it ;
rico:resultsFrom _:b4 .
_:b10 a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Genre" ;
skos:prefLabel "Filmwochenschau"@de .
_:b5 a rico:CarrierType ;
rico:name "35mm Zelluloseazetat"@de .
_:b6 a rico:Language ;
_:b8 a rico:Language ;
schema:sameAs "http://www.wikidata.org/entity/Q188" ;
rico:name "Deutsch"@de , "allemand"@fr , "tedesco"@it ;
rico:resultsFrom _:b4 ;
rico:resultsFrom _:b7 ;
rico:type "content" .
_:b5 a rico:Language ;
rico:name "dt"@de ;
rico:type "content" .
_:b9 a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Genre" ;
skos:prefLabel "Performance"@de , "Performance"@fr , "Prestazioni"@it ;
rico:resultsFrom _:b14 .
_:b2 a skos:Concept ;
skos:editorialNote "Ursprungsfeld: Genre" ;
skos:prefLabel "Musik"@de , "Musique"@fr , "Musica"@it ;
rico:resultsFrom _:b0 .
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