NFDI4Culture Workshop | Task Area 5 | 23.11.2023

Culture Data Dojo

Lets practice to
become a Data Sensei

Torsten Schrade | Akademie der Wissenschaften und der Literatur | Mainz

WebslidesDaten & Code | CC-BY 4.0

Wie gut kennt Ihr NFDI4Culture?

Wie viele Task Areas hat NFDI4Culture?

  • 7 (Quelle: Portal)

Wie viele Partner wirken mit?

  • 9 Co-Applicants, 66 Participants
    (Quelle: Knowledge Graph)

Wie viele davon sind Universitäten?

  • 18 (Quelle: Knowledge Graph)

Wie gut kennt Ihr NFDI4Culture?

Was war das häufigste Thema in Helpdesk Beratungen?

  • Urheberrecht (79 / Quelle: OpenProject)

Wie viele Dienste bieten wir aktuell an?

  • 16 (Quelle: Portal)

Wie viele Outputs haben wir seit 2020 erzeugt?

  • 347

Unsere Ziele im Dojo

  • Datenquellen im Konsortium kennenlernen, kuratieren und selbstständig nutzen
  • Grundlagen der Datenanalyse mit Nextcloud, OpenProject und KnowledgeGraph lernen
  • FAIRe Reports und Visualisierungen aus den Daten(quellen) erzeugen und publizieren
  • Indikatorik teamspezifisch weiterentwickeln und konsortiumsübergreifend harmonisieren

Teil I

Definitionen, Datenquellen, Workflows

Data Report: Definition

Unter einem Report verstehen wir eine Auswertung von Daten aus einer Datenquelle zu einer spezifischen Frage. Jeder Report besitzt Dimensionen (Zeit, Schlagwort, Typ, Geografie etc.). Das Ausgangsformat für einen Report ist immer CSV. Zielformate können Tabellen und/oder Visualisierungen sein.

Organisatorisch hat jeder Report einen Identifikator, bestehend aus einem Kürzel für die Datenquelle, der Report-Kategorie (z. B. Helpdesk, Portal etc.) sowie der ID des Arbeitspaketes in OpenProject, unter der die Dokumentation für den Report geführt wird.

Report: Prinzipien

  • Unsere NFDI4Culture Reports sind FAIR!
  • Alle Teams können Daten und Visualisierungen jedes Reports nutzen und weiterenwickeln (Übersicht)
  • Reports werden durch Team Documentation & Reporting kuratiert (Teamseite)
  • Jeder kann eigene Reports erstellen. Erreicht ein Report offiziellen Charakter, wird er zusammen mit Team Documentation & Reporting verzeichnet und dokumentiert (Ticket erstellen)

Report: Tipps

  • Am Anfang steht immer die Frage: Was will ich wissen? Die Frage am besten schriftlich formulieren.
  • Als nächstes identifizieren wir die Datenquelle: Wo finde ich Daten zu meiner Frage?
  • Dann konzipieren wir den Workflow: Wie erhalte ich die Daten aus der Datenquelle?
  • Als letztes folgt die Auswertung (hier ist Kreativität gefragt): Wie mache ich das Ergebnis sichtbar?

Praxisbeispiel: Helpdesk

Frage

Was sind die häufigsten Themen in Helpdesk-Beratungen?

Praxisbeispiel: Datenquelle

  • Datenquelle: Gespeicherte Abfrage (inkl. Filterung und Spalten) in OpenProject
  • Auswertung: Arbeitspakete vom Typ “ANFRAGE”
  • Dimension: Keywords (Mehrfachzuweisungen beachten)
  • Merke: Datenquellen können unterschiedliche Berechtigungen aufweisen (Vertraulichkeit)

Dokumentation: Report-Ticket in OpenProject
Ergebnis: Publikation in Knowledge Base

Datenquelle: Definition

Eine Datenquelle verfügt (in den meisten Fällen) über eine HTTP-Schnittstelle, die mittels eines restful Queries entsprechende Daten zurückliefert. Nur in Ausnahmefälle sollten Daten für NFDI4Culture Reports manuell zusammengetragen werden. Zielformat für Daten aus einer Datenquelle ist immer CSV.

Praxisbeispiel: Workflow

Dateien: Report-Ordner in Nextcloud

Workflows: Definition

Unter einem Workflow verstehen wir die (ggf. skriptbasierte) Verarbeitung von Daten aus einer Datenquelle in das Zielformat für eine Auswertung (immer CSV). Workflows werden automatisiert über das Nextcloud Workflow-Modul realisiert. Herstellungsprozesse für Auswertungen sollten niemals an einzelne Personen/Software/Skripte geknüpft sondern immer transparent und reproduzierbar über Nextcloud organisiert werden.

Praxisbeispiel: Datenanalyse (1)

Merke: CSV-Dateien können direkt in Reintext-Ansicht in Nextcloud geöffnet werden

report_op_helpdesk_1346.csv

row,Anfangstermin,Co-Applicants,DFG Fächerkategorien,Endtermin,Fortschritt (%),Keywords,Konsortien,Participants,Thema,id
2,2023-10-23,SPK,101-05 Ägyptische und Vorderasiatische Altertumswissenschaften,2023-11-03,100,Lehre; Forschungsprojekt,,Freie Universität Berlin (FU Berlin),"Digital Storytelling Projekt, Transferpartner",7003
9,2023-04-05,UMR; UPB,"409 Informatik; 103 Kunst-, Musik-, Theater- und Medienwissenschaften; 111-03 Publizistik und Kommunikationswissenschaft",2023-07-03,100,Angebotsentwicklung; Data and Code Literacy; Lehre,,Universität der Künste Berlin (UdK),Workshop für interdisziplinären Studiengang,5200

Tipp: Rechtsklick öffnet Menüpunkt “In ONLYOFFICE öffnen”. Es folgt ein CSV-Import Dialog und die Daten werden in einer komfortablen Spreadsheet-Ansicht angezeigt.

  • Jede Zeile in der CSV Datei stellt einen Datensatz dar
  • Die Kopfzeile enthält die Spaltennamen bzw. Feldnamen aus OpenProject
  • Für die Auswertung relevant ist die Spalte Keywords
  • In der Exportdatei sind alle Schlagworte mit Semikolon getrennt in dieser Spalte
  • Wir benötigen einen Mechnismus, um mehrwertige Spalten aufzutrennen

Praxisbeispiel: Datenanalyse (2)

report_op_helpdesk_1346.yml

op_csv_export:
    output_file: report_op_helpdesk_1346.csv
op_csv_process:
    input_file: report_op_helpdesk_1346.csv
    output_file: report_op_helpdesk_1346_processed.csv
    split_fields: 'Keywords'
op_csv_count:
   input_file: report_op_helpdesk_1346_processed.csv
   output_file: report_op_helpdesk_1346_counted.csv
   column_to_count: "Keywords"
  • Nextcloud Workflow wird über YAML-Datei gesteuert
  • Schritt 1: Export aller Spalten/Zeilen eines gespeicherten Query (matching via ID)
  • Schritt 2: Auftrennung mehrwertiger Spalten (Definition in der Variable “split_fields”)
  • Schritt 3: Zählung nach Werten einer Spalte
  • Schritt 4: Aggregierung nach Werten einer Spalte und Summe pro Aggregat aus Werten einer zweiten Spalte

Praxisbeispiel: Visualisierung

www.rawgraphs.io

RAWGraphs is an open source data visualization framework built with the goal of making the visual representation of complex data easy for everyone.

Visualisierung: Definition

Visualisierungen können die Form von Diagrammen, Charts, Karten oder komplexeren Darstellungen haben. Alle Visualisierungen müssen neben Raster-/Bildformaten oder interaktiven Darstellungen immer auch in einem offenen bzw. nachhaltigen Format als SVG vorliegen.

Praxisbeispiel: RAWGraphs (1)

  • RAWGraphs ist eine OpenSource Webanwendung, die datensparsam lokal im Browser läuft
  • RAWGraphs kann eine Vielzahl von Formaten (TSV, CSV, DSV, JSON) importieren und erlaubt dynamische API und/oder SPARQL-Queries
  • RAWGraphs kennt eine Vielzahl (über 30) unterschiedlicher Diagrammtypen (basierend auf d3.js)
  • RAWGraphs ermöglicht die interaktive Erstellung und den Export von Visualisierungen in quelloffenen Formaten (PNG, SVG)
  • RAWGraphs Projekte können vollständig mit allen Daten exportiert werden (Reproduzierbarkeit der Visualisierungen!)

Praxisbeispiel: RAWGraphs (2)

  1. report_op_helpdesk_1346_counted.csv in Nextcloud öffnen, Daten kopieren und in RAWGraphs im Feld “Paste you data” einfügen
  2. Import der Daten überprüfen
  3. Diagrammtyp “Circle Packing” auswählen
  4. Dimensionen mappen: Hierarchy = Keywords, Size = Summe, Color = Summe, Label = Keywords und Summe
  5. Feintuning des Diagramms (Farbe, Padding und Label optimieren)

Praxisbeispiel: RAWGraphs (3)

  1. Diagrammtyp “Treemap (Voronoi)” auswählen
  2. Dimensionen mappen: Hierarchy = Keywords, Size = Summe, Color = Summe, Label = Keywords und Summe
  3. Feintuning des Charts (Polygon Edges: 6, Seed for random computation: 8, Color scheme: Spectral discrete)

FAIRe Reports (F)

Findable: Unsere Reports und alle dazugehörigen Daten, Skripte und Visualisierungen sind intern findbar für alle Mitwirkenden von NFDI4Culture durch einen eindeutigen Identifikator und Eintrag in OpenProject sowie einen verknüfpten Dateiordner in Nextcloud. Veröffentlichte Reports extern findbar im Rahmen der Culture Jahresberichte, Folien sowie auf dem Culture Portal. Metadaten zu jedem Report und eine persistente Verlinkung zu den versionskontrollierten Ausgangsdateien steigern zusätzlich die Findbarkeit externer bzw. veröffentlichter Reports

FAIRe Reports (A)

Accessible: Intern sind alle Reports für alle Mitwirkenden von NFDI4Culture über eine Ordnersystematik in der Nextcloud zugänglich. Publizierte Reports werden immer mit einer CC-BY Angabe und einem Link zu den Quelldateien zugänglich gemacht.

FAIRe Reports (I)

Interoperable: Unsere Reports sind interoperabel durch die Verwendung ausschließlich offener Formate. Für die Ausgangsdaten werden ausschließlich Reintextformate verwendet (insbesondere CSV als Zielformat für alle Auswertugnen), alle Visualisierungen werden immer auch als SVG verfügbar gemacht

FAIRe Reports (R)

Reusable: Neben der konkreten Verwendun eines Reports in einer Culture Publikation (Folien, Jahresberichte etc.) werden für die Nachnutzung und Reproduzierbarkeit alle Ausgangsdaten, Queries, Skripte und Visualisierungen eines Reports in Nextcloud gebündelt und im Falle eines veröffentlichten Reports in GitLab/Zenodo veröffentlicht.

Teil II

Datenanalyse mit OpenProject

Trainingsaufgabe 1

Frage

In welchen Measures sind welche Akteure involviert?

Datenquelle: Measures

report_op_measures_1652.yml

op_csv_export:
    output_file: report_op_measures_1652.csv
op_csv_process:
    input_file: report_op_measures_1652.csv
    output_file: report_op_measures_1652_processed.csv
    split_fields: 'Involved Actors'
op_csv_aggregate:
    input_file: report_op_measures_1652_processed.csv
    output_file: report_op_measures_1652_aggregated.csv
    group_by_field: "Involved Actors"
    sum_field: "Fortschritt (%)"
  • Datenquelle: Gespeicherte Abfrage (inkl. Filterung und Spalten) in OpenProject
  • Auswertung: Arbeitspakete vom Typ “MEASURE”
  • Dimension: Involved Actors (Mehrfachzuweisungen beachten)

RAWGraphs: Measures zu Akteuren

  1. report_op_measures_1652.csv in Nextcloud öffnen, Daten kopieren und in RAWGraphs im Feld “Paste you data” einfügen
  2. Import der Daten überprüfen
  3. Diagrammtyp “Alluvial Diagram” auswählen
  4. Dimensionen mappen: Hierarchy = Thema und Involved Actors, Size = Fortschritt split (%)
  5. Feintuning des Diagramms (Farbe: #B8E986, Padding: 5, Height: 900)

Trainingsaufgabe 2

Frage

Wie ist das Verhältnis von KPIs zu Community Interaktionen?

Datenquelle: KPIs

report_op_kpi_954.yml

op_csv_export:
    output_file: report_op_kpi_954.csv
op_csv_process:
    input_file: report_op_kpi_954.csv
    output_file: report_op_kpi_954_processed.csv
    split_fields: 'NFDI Service Type'
  • Datenquelle: Gespeicherte Abfrage (inkl. Filterung und Spalten) in OpenProject
  • Auswertung: Arbeitspakete vom Typ “KPI”
  • Dimension: Community Interaktion (primär)

RAWGraphs: KPIs zu Community Interaktion zu Servicetypen

  1. report_op_measures_1652.csv in Nextcloud öffnen, Daten kopieren und in RAWGraphs im Feld “Paste you data” einfügen
  2. Import der Daten überprüfen
  3. Diagrammtyp “Matrix Plot” auswählen
  4. Dimensionen mappen: X = NFDI Service Type, Y = Community Interaktion (primär), Size = Fortschritt split (%)
  5. Feintuning des Diagramms (Color: Fortschritt split (%), Margin top: 150, Margin left: 250)

Teil III

Datenanalysen mit dem Culture Knowledge Graph

Was ist der Knowledge Graph?

Der Culture Knowledge Graph schafft eine Verbindung zwischen Forschungsdaten, die in den NFDI4Culture Communities erzeugt werden, um deren Auffindbarkeit, Zugänglichkeit, Interoperabilität und Wiederverwendbarkeit zu verbessern. Als übergreifende Datenstruktur vernetzt der Culture Knowledge Graph von NFDI4Culture erzeugte Forschungsinformationen mit Kulturdaten aus unseren Fachcommunities.

Was ist der Knowledge Graph?

Hierbei kommen etablierte W3C Standards und einschlägige Metadatenformate (z.B. LIDO, CIDOC, MEI, etc.) aus unseren Communities zum Einsatz. Als übergreifender Beschreibungsstandard wird die NFDI Core Ontology verwendet, die entlang der Bedarfe mehrerer NFDI Konsortien kontinuierlich entwickelt wird.

Welche strukturellen Fragen beantwortet der Knowledge Graph?

  • Wieviele Partner aus welchen Bereichen hat NFDI4Culture?
  • Welche Organisationen stellen welche Datensätze für die Kunstgeschichte zur Verfügung?
  • In welchen 2D/3D/AV-Repositorien können Nutzer welche Datentypen speichern?
  • Welche Forschungssoftware gibt es für welche Datentypen?
  • Wieviele Outputs hat NFDI4Culture in welchen Kategorien erzeugt?
  • Welche Ressourcen sind in welchen Datensätzen enthalten?

Welche fachlichen Fragen beantwortet der Knowledge Graph (zukünftig)?

  • Welche Daten zum ikonographischen Motiv “musizierende Engel” finden sich in den integrierten Datensammlungen der Musik-, Kunst- und Theaterwissenschaft?
  • Welche mittelalterlichen Glasmalereien aus dem 15. Jahrhundert weisen Bezüge zu spezifischen Handschriftenillustrationen der gleichen Zeit auf?
  • In welchen Musikstücken fungierte Goethe als Textdichter? Welche Datensammlungen zu Mozart gibt es?
  • Welche Daten zu bestimmten Anfangstakten (Incipits) einer Melodiestimme oder Themas eines musikalischen Werkes hängen mit weiteren künstlerischen Werken und/oder Medien zusammen?

Informationsressourcen

Überblick über den Culture Knowledge Graph

Überblick über LOD in den Digital Humanities

Welche Rolle spielen Knowledge Graphs in der NFDI?

Welche Datentypen enthält der Culture Knowledge Graph?

Wieviele Daten enthält der Culture Knowledge Graph?

In welchem Bezug stehen Knowledge Graph und Portal?

Welche Zugänge auf die Daten im Portal gibt es?

Metadaten zu allen Entitäten, die wir im Culture Information Portal erfassen, sind über eine öffentlich verfügbare, standardisierte Metadaten-Schnittstelle (API) verfügbar:

https://nfdi4culture.de/id/

Jede einzelne Entität aus unserem Portal hat hierbei eine eindeutige und persistente NFDI4Culture ID (IRI). Alle Metadaten aus dem Portal werden 1x pro Tag in den Culture Knowledge Graph integriert. Sie bilden den Research Information Graph.

Welche Zugänge auf die Daten im Knowledge Graph gibt es?

Ein zentraler Einstieg zum Knowledge Graph findet sich unter:

https://nfdi4culture.de/id/E2391

Sämtliche Forschungsinformationen aus dem Portal und alle in den Knowledge Graph integrierten Forschungsdaten aus unseren Fachcommunities sind über die öffentliche SPARQL-Schnittstelle (“SPARQL Endpoint”) von NFDI4Culture verfügbar:

https://nfdi4culture.de/sparql

Ein Interface zum explorieren der Daten im Browser findet sich unter:

https://nfdi4culture.de/shmarql

Ein grafisches Interface zur Erstellung von Abfragen auf den Culture Knowledge Graph findet sich unter:

https://nfdi4culture.de/ressourcen/knowledge-graph.html

Knowledge Graph in der Praxis

Culture Information Portal und Culture Knowledge Graph sind zentrale Instrumente für die Erfassung/Kuratierung von Indikatoren des neuen DFG-Datenblattes, das ab sofort für alle NFDI-Konsortien obligatorisch ist.

Im Folgenden wollen wir uns SPARQL-Abfragen auf den Knowledge Graph am Beispiel der Indikatoren 1001 (Number of scholarly works), 1003 (number of software items) und 1022 (communities/disciplines represented) anschauen.

Explorationstools für den Knowledge Graph (1)

Einen gutes Tool für den Einstieg in die Strukturen im Knowledge Graph ist der von der Akademie gehostete RDF-Playground:

https://rdfplayground.adwmainz.net/

Der RDF-Playground bietet ein visuelles Interface zur Exploration von RDF-Resourcen.

  1. Zunächst wechseln wir auf den Reiter “Browse” und geben im URL Feld die IRI des Knowledge Graph Services ein: https://nfdi4culture.de/id/E2391

  2. Als nächstes schalten wir bei “Documents and Properties” die Darstellung aller Klassen und Eigenschaften an.

  3. Nun explorieren wir den schema:DefinedTerm “FAIR” https://nfdi4culture.de/id/E3308 in gleicher Weise und analysieren die Struktur.

Explorationstools für den Knowledge Graph (2)

Ein interaktives Explorations-Interface bietet der von Etienne Posthumus entwickelte Shmarql-Service:

Beispiel: Anzeige des DefinedTerm “FAIR” in Shmarql

Mittels der Positionsbezeichner “S” (Subject), “P” (Predicate) und “O” (Object) können in Shmarql Ressourcen in jeweiligen Statement-Positionen abgerufen werden. Ein Klick auf das Label einer Ressource ruft dabei die Ressource mit allen zugehörigen Statements auf.

Beispiel: Liste aller DefinedTerms im Knowledge Graph

Nun wollen wir die Liste aller DefinedTerms mittels SPARQL Query ermitteln.

SPARQL: DefinedTerms mit zugehörigen Ressourcen

Das graphische Interface für SPARQL-Abfragen (Endpoint) findet sich unter:

https://nfdi4culture.de/resources/knowledge-graph.html

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX schema: <http://schema.org/>

SELECT ?term ?termLabel ?resource ?resourceLabel
WHERE {
    ?term schema:subjectOf ?resource .
    ?term rdfs:label ?termLabel .
    ?resource rdfs:label ?resourceLabel .
}
ORDER BY ?name
LIMIT 100

SPARQL und RAWGraphs

SPARQL-Queries können direkt mit RAWGraphs visualisiert werden.

Trainingsaufgabe 1

1001

Number of scholarly works published in OPEN access

SPARQL-Query für 1001

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX schema: <http://schema.org/>
PREFIX n4c: <https://nfdi4culture.de/id/>

SELECT ?resource ?label ?name ?title ?dateCreated ?identifier
WHERE {
    VALUES ?term { n4c:E4377 n4c:E4378 n4c:E4388 n4c:E4389 n4c:E4391 n4c:E4392 n4c:E4849 }
    ?term schema:subjectOf ?resource .
    ?term rdfs:label ?label .
    ?resource schema:name ?name .
    OPTIONAL { 
        ?resource schema:dateCreated ?dateCreated . 
        ?resource schema:identifier ?identifier .
    }
}
ORDER BY ?label ?title ?dateCreated
LIMIT 500

Trainingsaufgabe 2

1003

Number of software items published in OPEN source

SPARQL-Query für 1003

PREFIX sd: <http://www.w3.org/ns/sparql-service-description#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dc: <http://purl.org/dc/terms/created>
PREFIX schema: <http://schema.org/>
PREFIX nfdicore: <https://nfdi.fiz-karlsruhe.de/ontology/>
PREFIX sd: <https://w3id.org/okn/o/sd#>
PREFIX n4c: <https://nfdi4culture.de/id/>

SELECT (SAMPLE(?resource) AS ?iri) (SAMPLE(?label) AS ?type) (SAMPLE(?agent) AS ?taskArea) (SAMPLE(?name) AS ?title) (SAMPLE(?codeRepository) AS ?code)
WHERE {
    VALUES ?term { n4c:E3345 }
    ?term schema:subjectOf ?resource .
    ?term rdfs:label ?label .
    ?resource schema:name ?name .
    ?resource schema:potentialAction/schema:agent/schema:name ?agent .
    OPTIONAL { 
        ?resource sd:hasSourceCode/sd:codeRepository ?codeRepository .
    }
}
GROUP BY ?resource
ORDER BY ?taskArea ?title
LIMIT 500

Trainingsaufgabe 3

1022

Communities/subjects/disciplines represented in the consortium

SPARQL-Query für 1022

PREFIX sc: <http://purl.org/science/owl/sciencecommons/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX schema: <http://schema.org/>
PREFIX nfdicore: <https://nfdi.fiz-karlsruhe.de/ontology/>
PREFIX n4c: <https://nfdi4culture.de/id/>
PREFIX wikidata: <http://www.wikidata.org/entity/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

SELECT (SAMPLE(?person) AS ?iri) (SAMPLE(CONCAT(?familyName, ", ", ?givenName)) AS ?pers_name) (SAMPLE(SUBSTR(?organizationLabel, 1, 20)) AS ?org_name) (SAMPLE(?orgStatusName) AS ?org_status) (SAMPLE(?roleName) AS ?role) (GROUP_CONCAT(STR(?subjectLabel); separator = ", ") AS ?expertise)
WHERE {
    ?organization rdf:type nfdicore:Organization .
    ?organization schema:name ?organizationLabel .
    ?organization schema:memberOf ?orgStatus .
    ?orgStatus schema:sameAs ?orgStatusType FILTER (?orgStatusType IN (n4c:E2387, n4c:E2401, n4c:E2400, n4c:E3226)) .
    ?orgStatus schema:roleName ?orgStatusName .
    ?person schema:memberOf/schema:memberOf ?organization .
    ?person schema:familyName ?familyName .
    ?person schema:givenName ?givenName .
    OPTIONAL {
        ?person schema:memberOf ?role .
        ?role schema:sameAs ?roleType FILTER (?roleType IN (n4c:E1930, n4c:E1931)) .
        ?role schema:roleName ?roleName .
    }
    OPTIONAL {
        ?subject schema:subjectOf ?person .
        ?subject rdf:type nfdicore:AcademicDiscipline .
        ?subject rdfs:label ?subjectLabel .
    }
}
GROUP BY ?person
ORDER BY ?org_status ?org_name ?name
LIMIT 500

F I N I S

Erstellt mit: Quarto
Autor: Torsten Schrade
Lizenz: CC-BY 4.0