Skip to content
Markus Weigelt edited this page Jan 24, 2024 · 21 revisions

Übersicht

Hinweis zur Verwendung von XML-Editoren

Es gibt viele XML-Editoren, die das Bearbeiten komplexer XML-Datei vereinfachen, wenn sie Informationen zu ihrer zulässigen Struktur haben. Diese Informationen stehen in Form einer XSD-Datei zur Verfügung. Wenn Sie diese Funktion Ihres XML-Editors verwenden möchten, kopieren Sie die Datei ruleset.xsd in dasselbe Verzeichnis und fügen Sie die beiden Attribute

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://names.kitodo.org/ruleset/v2 ruleset.xsd"

in Ihre XML-Datei ein. Beispiel:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://names.kitodo.org/ruleset/v2"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://names.kitodo.org/ruleset/v2 ruleset.xsd">
    <declaration>
        <division id="division">
            <label>Division</label>
        </division>
    </declaration>
</ruleset>

Gliederungselemente definieren

Ein wesentlicher Funktionsbestandteil von Production ist die Strukturierung und Beschreibung der eingefügten Mediendateien. Die Strukturierung erfolgt mit einem Gliederungseditor (ähnlich wie Sie es von Microsoft Word kennen). Die Gliederung besteht aus verschachtelten hierarchischen Ebenen. Das heißt, jede Gliederung hat immer genau ein oberstes Element, unter dem sich beliebig viele untergeordnete Elemente befinden können. Unter jedem der untergeordnete Elemente können wieder untergeordnete Elemente sein, und so weiter.

Beispiel: Das oberste Element ist eine Schallplatte (als Ganzes einschließlich der Hülle). Darunter könnte sich die Vorderseite der Hülle, die eigentliche Schellackplatte, ein Einlegeblatt und die Rückseite der Hülle befinden. Die Schellackplatte könnte wiederum in zwei Seiten unterteilt sein, möglicherweise in mehrere Titel pro Seite usw.

Diese zur Darstellung verwendeten Gliederungselemente werden „Division“ (dt. „Einteilung“) genannt. Der Begriff „Division“ wurde vom METS-Standard übernommen, dem Format, in dem die Ausgabedatei geschrieben wird.

ℹ️ Hinweis für Umsteiger von Production 2: In Production 2 wurden die Divisionen als DocStrctType bezeichnet.

Welche Unterteilungen existieren, ist in einer XML-Datei definiert, dem sogenannten Regelsatz. Um mit dem Production Metadaten-Editor arbeiten zu können, benötigen wir mindestens eine Regelsatzdatei mit mindestens einer definierten Division.

Der kleinste denkbare Regelsatz sieht folgendermaßen aus:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://names.kitodo.org/ruleset/v2">
    <declaration>
        <division id="section">
            <label>Section</label>
        </division>
    </declaration>
</ruleset>

Er besteht aus einem Bereich <declaration>, in dem Divisionen (und nachfolgend auch Metadatenschlüssel) definiert werden können. Hier wird eine Unterteilung definiert. Es hat eine interne Referenzkennung (id=) und eine Bezeichnung („label“). Die Bezeichnung legt fest, wie die Unterteilung im Metadateneditor genannt wird.

Mit obigem Regelsatz können Sie Gliederungen erstellen, die folgendermaßen aussehen:

  • Section
    • Section
      • Section
      • Section
    • Section
      • Section
    • Section

Production bietet die Möglichkeit, die Metadatendatei beim Exportieren über XSLT zu konvertieren. Sie können dies jedoch erheblich vereinfachen, wenn Sie die Namen, die Sie für den Export verwenden möchten, bereits für die internen Referenzkennungen (id=) der Strukturelemente verwenden. Wenn Sie Exportdateien erstellen möchten, die mit dem DFG-Viewer kompatibel sind, verwenden Sie die Referenzkennungen aus dem DFG Viewer-Strukturdatensatz. (Spalte „XML“).

Einteilungen mit besonderer Verwendung

Einteilungen können in der Anwendung eine speziellen Verwendung (engl. „use“) haben. Diese wird meist mit dem Attribut use="…" in der Definition vermerkt. Derzeit gibt es folgende Schlüsselwörter:

  • processTitle="…" Eine Einteilung gilt als mögliche Wurzel der logischen Beschreibung, wenn sie ein Attribut „processTitle“ hat. Der Wert des Attributs besteht aus festem Text in einfachen Anführungszeichen (') und Metadatenschlüsseln, deren Werte eingefügt werden sollen, getrennt durch Pluszeichen (+). Es kann auch leer sein, wenn der Vorgangstitel manuell eingetragen werden soll.
  • use="createChildrenFromParent" Diese Einteilung ist eine übergeordnete Einheit, zu der direkt untergeordnete Vorgänge angelegt werden können. Sinnvoll ist dies bei einem hierarchisch übergeordneten Typus, wie zB einer fortlaufenden Publikation (fortlaufendes, mehrbändiges Werk).
  • use="createChildrenWithCalendar" Diese Einteilung ist eine übergeordnete Einheit, zu der untergeordnete Vorgänge mit einer Kalenderstruktur angelegt werden können. Dieses Attribut kann nur für eine Einteilung festgelegt werden, die eine Unterteilung nach Datum (<subdivisionByDate>) hat.
  • withWorkflow="false" Ein Werk hat in der Regel einen Workflow, dieser kann aber für eine übergeordnete Einheit, beispielsweise eine Serie, abgeschaltet werden.

Mehrsprachige Regelsätze

Production ist eine Unternehmenssoftware, die für die internationale Zusammenarbeit über das Internet geeignet ist. Sie unterstützt volle Mehrsprachigkeit. Die Standardsprache ist Englisch. Um die Mehrsprachigkeit im Regelsatz darzustellen, kann jedes Label in mehreren Sprachen wiederholt werden. Die Sprache wird mit dem Code aus ISO-659-1 als lang= angegeben. Beispiel:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://names.kitodo.org/ruleset/v2">
    <declaration>
        <division id="caption">
            <label>Caption</label>
            <label lang="fr">intitulé</label>
            <label lang="de">Übeschrift</label>
        </division>
    </declaration>
</ruleset>

Alternativ können Sie die Standardsprache im Wurzelelement der XML-Datei definieren:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset lang="fr" xmlns="http://names.kitodo.org/ruleset/v2">
    <declaration>
        <division id="caption">
            <label>intitulé</label>
            <label lang="en">Caption</label>
            <label lang="de">Überschrift</label>
        </division>
    </declaration>
</ruleset>

ℹ️ Hinweis für Umsteiger von Production 2: Die Beziehungen zwischen Strukturelementen und möglichen Metadatenschlüsseln werden in Produktion 3 in einem separaten Abschnitt des Regelsatzes behandelt.

Metadatenschlüssel definieren

Die Divisionen können durch Metadaten beschrieben werden. Metadaten bestehen immer aus Einträgen, die aus einem Schlüssel und den zugehörigen Werten bestehen. Schlüssel sind z.B. Titel und Verlag. Um Metadaten erfassen zu können, müssen Sie Schlüssel definieren. Die Deklaration von Metadatenschlüsseln sieht anfangs wie die von Divisionen aus, mit dem Unterschied, dass das XML-Element als key bezeichnet wird:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://names.kitodo.org/ruleset/v2">
    <declaration>
        <division id="book">
            <label>Book</label>
            <label lang="fr">livre</label>
            <label lang="de">Buch</label>
        </division>
        <key id="title">
            <label>Title</label>
            <label lang="fr">titre</label>
            <label lang="de">Titel</label>
        </key>
        <key id="publisher">
            <label>Publisher</label>
            <label lang="fr">maison d’édition</label>
            <label lang="de">Verlag</label>
        </key>
    </declaration>
</ruleset>

ℹ️ Hinweis für Umsteiger von Production 2: In Production 2 wurden die Schlüssel als MetadataType bezeichnet.

Definieren des Wertebereichs von Metadatenschlüsseln

Die zulässigen Werte für Metadatenschlüssel, können auf verschiedene Arten festgelegt werden. Je nach Wertebereich können verschiedene Eingabemöglichkeiten angeboten werden, z.B. einen Kalender für Termine.

ℹ️ Hinweis für Umsteiger von Production 2: In Production 2 wurden die Wertebereiche in den Dateien digitalCollections.xml, metadataDisplayRules.xml, processProperties.xml und projects.xml definiert, wobei unterschiedliche Funktionalitäten zur Verfügung standen, und die XML-Syntax in jeder Datei war anders. Die Funktionalität wurde in Production 3 im Regelsatz zusammengefasst und vereinheitlicht.

① Das codomain-Tag kann verwendet werden, um einen der programmierten Wertebereiche auszuwählen: Wahrheitswert (boolean), Datum (date), Ganzzahl (integer) und URI (anyURI).

Ein Wahrheitswert ist ein Metadateneintrag, der geschrieben wird, wenn er wahr ist, andernfalls nicht. Für einen Metadatenschlüssel vom Typ Wahrheitswert muss der Wert mittels einer option angegeben werden. Ein Metadateneintrag für einen Wahrheitswert wird im Metadateneditor als ein An-/Aus-Schalter dargestellt. Wird der Schalter eingeschaltet, wird der Wert der option in die Metadaten geschrieben, wird er ausgeschaltet, wird kein Wert geschrieben.

Datum bedeutet ein lokales Datum nach dem Gregorianischen Kalender. Ganzzahlen sind besonders geeignet für Zählungen. URI ist der Oberbegriff für Internetadressen (URLs), URNs und vergleichbare Bezeichner.

    <key id="NotePreImport">
        <label>Note for users</label>
        <label lang="de">Hinweis für Nutzer</label>
        <codomain type="boolean"/>
        <option value="Hinweis für Nutzer: Hiermit erhalten Sie noch ...">
            <label>Insert information text</label>
            <label lang="de">Hinweistext einfügen</label>
        </option>
    </key>

    <key id="DatePublished">
        <label>Date published</label>
        <label lang="de">Veröffentlicht am</label>
        <codomain type="date"/>
    </key>

    <key id="year">
        <label>Year of publication</label>
        <label lang="de">Erscheinungsjahr</label>
        <codomain type="integer"/>
    </key>

    <key id="link">
        <label>Link</label>
        <codomain type="anyURI"/>
    </key>

② Über Optionen können Sie eine Auswahlliste mit mehreren Werten zur Auswahl erstellen:

    <key id="script">
        <label>Script</label>
        <label lang="de">Schrift</label>
        <option value="Latn">
            <label>Latin</label>
            <label lang="de">Antiqua</label>
        </option>
        <option value="Latf">
            <label>Latin, Fraktur variant</label>
            <label lang="de">Fraktur</label>
        </option>
        <option value="Zyyy">
            <label>Undetermined (no OCR)</label>
            <label lang="de">Nicht festgelegt (keine OCR)</label>
        </option>
    </key>

③ Sie können ein Muster (einen sogenannten regulären Ausdruck) definieren, dem die Werte entsprechen müssen:

    <key id="issn">
        <label>ISSN</label>
        <pattern>\d{4}-\d{3}[0-9X]</pattern>
    </key>

Sie können diese Möglichkeiten auch kombinieren. Beispielsweise kann ein Muster verwendet werden, um eine Ganzzahl auf einen positiven Wert zu begrenzen:

    <key id="issue">
        <label>Issue</label>
        <label lang="de">Ausgabe</label>
        <codomain type="integer"/>
        <pattern>[1-9][0-9]*</pattern>
    </key>

④ Sie können auch einen bekannten Namespace als Zielmenge angeben, z. B. die von der LOC veröffentlichte Sprachenliste:

    <key id="language">
        <label>Language</label>
        <label lang="de">Sprache</label>
        <codomain namespace="http://id.loc.gov/vocabulary/iso639-2/"/>
    </key>

Wenn der Namensraum endlich ist, können Sie auch die Liste der erlaubten Optionen definieren. Da diese Liste ziemlich lang sein kann und in allen Regelsätzen dieselbe ist, kann sie, im Regelsatzverzeichnis in einer separaten Datei definiert werden. Der Name der Datei muss dem letzten Segment des Namespace-URI entsprechen, im Beispiel iso639-2.xml. Die einzelnen Optionen können in der Datei definiert werden:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<namespace xmlns="http://names.kitodo.org/ruleset/v2"
           about="http://id.loc.gov/vocabulary/iso639-2/">
    <option value="http://id.loc.gov/vocabulary/iso639-2/aar">
        <label>Afar</label>
        <label lang="de">Afar</label>
        <label lang="fr">afar</label>
    </option>
    <option value="http://id.loc.gov/vocabulary/iso639-2/abk">
        <label>Abkhazian</label>
        <label lang="de">Abchasisch</label>
        <label lang="fr">abkhaze</label>
    </option>
    <!-- ... -->
</namespace>

Voreingestellte Werte für Metadatenschlüssel

Mit dem preset-Element können Sie Werte für einen Metadatenschlüssel angeben, die zu Beginn vorgewählt sind.

    <key id="singleDigCollection">
        <label>Digital collection</label>
        <label lang="de">Digitale Kollektion</label>
        <option value="Collection 1"/>
        <option value="Collection 2"/>
        <option value="Collection 3"/>
        <preset>Collection 1</preset>
        <preset>Collection 3</preset>
    </key>

Gruppierte Metadatenschlüssel

Sie können gruppierte Schlüssel erstellen, die wiederum Schlüssel enthalten. Auf diese Weise können zum Beispiel Personen dargestellt werden:

ℹ️ Hinweis für Umsteiger von Production 2: In Produktion 3 gibt es keinen speziellen Metadatentyp mehr für Personen. Personen müssen wie gezeigt referenziert werden.

    <key id="person">
        <label>Person</label>
        <key id="role">
            <label>Role</label>
            <label lang="de">Rolle</label>
            <option value="Author">
                <label>Author</label>
                <label lang="de">Autor</label>
            </option>
            <!-- ... more roles / weitere Rollen -->
        </key>
        <key id="authorityValue">
            <label>URI</label>
            <codomain namespace="http://d-nb.info/gnd/"/>
        </key>
        <key id="lastName">
            <label>Surname</label>
            <label lang="de">Nachname</label>
        </key>
        <key id="firstName">
            <label>Given name</label>
            <label lang="de">Vorname</label>
        </key>
        <key id="displayName">
            <label>Display name</label>
            <label lang="de">Ansetzungsform</label>
        </key>
    </key>

Schlüssel mit besonderer Verwendung

Schlüssel können in der Anwendung eine speziellen Verwendung (engl. „use“) haben. Diese wird mit dem Attribut use="…" in der Definition vermerkt. Derzeit gibt es folgende Schlüsselwörter:

  • use="authorLastName" Der Wert wird als Nachname des Autors verwendet, um den Autortitelschlüssel zu bilden.
  • use="childCount" setzt die (1-basierte) untergeordnete Nummer, wenn untergeordnete Dokumente erstellt werden.
  • use="dataSource" Interne Kennung der Datenquelle, um später die importierten Metadateneinträge aus der Datenquelle aktualisieren zu können.
  • use="displaySummary" wird beim Anlegen eines neuen Prozesses als Zusammenfassung auf der Registerkarte Title Record Link angezeigt.
  • use="higherlevelIdentifier" muss beim Holen eines Datensatzes aus einer Datenquelle vorhanden sein, um auch einen übergeordneten Datensatz zu holen.
  • use="mediaPartial" Kennzeichnet die Division als Medienteil (Media Partial), um diese als Audio- und/oder Video-Sprungmarke zu verwenden. Weitere Informationen dazu sind unter dem Punkt Nutzung der Medienteile der Dokumentation Verwendung von Audio oder Video zu finden.
  • use="processTitle" In dieses Feld wird der generierte Autor-Titel-Schlüssel geschrieben.
  • use="recordIdentifier" Identifier des aus einer externen Datenquelle geholten Datensatzes, damit die importierten Metadateneinträge aus der Datenquelle später aktualisiert werden können.
  • use="title" Dieses Feld wird als Titel zur Bildung des Autor-Titel-Schlüssels verwendet.

Verwenden mehrerer Metadatendomänen

Metadaten können im METS-Dateiformat in verschiedenen Domänen gespeichert werden, die eine grobe semantische Vorklassifizierung ermöglichen. Es gibt folgende Bereiche:

  • description: für Metadaten, die die digitale Kopie selbst beschreiben (der Normalfall)
  • digitalProvenance: für Metadaten, die Informationen über die Weiterentwicklung der digitalen Kopie im Laufe der Zeit geben. Dies ist zum Beispiel nützlich, wenn Medien aus technischen Gründen in ein neues Format umgewandelt werden müssen und Konvertierungsverluste auftreten können.
  • rights: für Metadaten, die Informationen über Rechte enthalten
  • source: für Metadaten, die das digitalisierte Original beschreiben
  • technical: für Metadaten, die für den Digitalisierungsprozess benötigt werden
  • mets:div: um Metadaten als XML-Attribute in der Division in der METS-Datei zu speichern

ℹ️ Hinweis für Umsteiger von Production 2: description entspricht sinngemäß den Werkstückeigenschaften (projects.xml: from="werk"), source den Vorlageeigenschaften (from="template"), technical den Vorgangseigenschaften (from="prozess"), rights dem “METS Rechteinhaber” und digitalProvenance der “METS Digiprov” aus der Projektkonfiguration (wobei letztere semantisch falsch benutzt ist, siehe oben). Die <mets:div>-Attribute LABEL und ORDERLABEL waren an die DocStrctTypen “TitleDocMain” und “TitleDocMainShort” gekoppelt (diese Kopplung besteht in Production 3 nicht mehr), das Attribut CONTENTIDS (Projektkonfiguration: METS PURL, METS ContentIDs) wird in Production 3 wie ein Metadatenschlüssel (Typ: anyURI) verwendet und kann jetzt individuell vergeben werden.

Metadaten der Domäne description werden im XML-Element <dmdSec> gespeichert, Metadaten der Domänen digitalProvenance, rights, source und technical in den entsprechenden Unterelementen des XML-Elements <amdSec>.

    <key id="title" domain="description">
        <label>Main title</label>
        <label lang="de">Haupttitel</label>
    </key>

    <key id="OcrMode" domain="technical">
        <label>OCR</label>
        <option value=""><label>off</label><label lang="de">aus</label></option>
        <option value="Antiqua"/>
        <option value="Fraktur"/>
        <preset>Antiqua</preset>
    </key>

    <key id="LABEL" domain="mets:div">
        <label>Label</label>
        <label lang="de">Bezeichnung</label>
    </key>

Beziehungen definieren

Bisher können Sie mit dem Regelsatz Strukturelemente beliebig mischen und mit Metadaten beliebig beschreiben. Dies kann bei ausreichender Sachkenntnis des mit der Beschreibung beauftragten Kollegen ausreichend sein.

Um Qualitätsstandards technisch durchzusetzen, können Sie jedoch Regeln definieren, wie Gliederungselemente kombiniert werden können und mit welchen Metadaten sie beschrieben werden können oder müssen.

Dies geschieht im zweiten Hauptabschnitt der XML-Datei, <correlation>.

Als Beispiel verwenden wir den folgenden Regelsatz mit einigen üblichen Gliederungselementen:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://names.kitodo.org/ruleset/v2">
    <declaration>
        <division id="article">
            <label>Article</label>
            <label lang="de">Artikel</label>
        </division>
        <division id="chapter">
            <label>Chapter</label>
            <label lang="de">Kapitel</label>
        </division>
        <division id="contents">
            <label>Table of contents</label>
            <label lang="de">Inhaltsverzeichnis</label>
        </division>
        <division id="cover_back">
            <label>Back cover</label>
            <label lang="de">Rückdeckel</label>
        </division>
        <division id="cover_front">
            <label>Front cover</label>
            <label lang="de">Vorderdeckel</label>
        </division>
        <division id="engraved_titlepage">
            <label>Engraved titlepage</label>
            <label lang="de">Kupfertitel</label>
        </division>
        <division id="illustration">
            <label>Illustration</label>
        </division>
        <division id="monograph">
            <label>Monograph</label>
            <label lang="de">Monographie</label>
        </division>
        <division id="preface">
            <label>Preface</label>
            <label lang="de">Vorwort</label>
        </division>
        <division id="photograph">
            <label>Photo</label>
            <label lang="de">Foto</label>
        </division>
        <division id="section">
            <label>Section</label>
            <label lang="de">Abschnitt</label>
        </division>
        <division id="table">
            <label>Table</label>
            <label lang="de">Tabelle</label>
        </division>
    </declaration>
</ruleset>

In Abschnitt <correlation> definieren wir nun, welche Gliederungselemente unter welchen Gliederungselementen erscheinen dürfen. Wir legen fest, dass nur die aufgeführten Gliederungselemente und Schlüssel erlaubt sind.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://names.kitodo.org/ruleset/v2">
    <declaration>
        <!-- ... siehe oben ... -->
    </declaration>
    <correlation>
        <restriction division="article" unspecified="forbidden">
            <permit division="illustration"/>
            <permit division="photograph"/>
            <permit division="table"/>
        </restriction>

        <restriction division="chapter" unspecified="forbidden">
            <permit division="illustration"/>
            <permit division="photograph"/>
            <permit division="table"/>
        </restriction>

        <restriction division="contents" unspecified="forbidden"/>

        <restriction division="cover_back" unspecified="forbidden">
            <permit division="photograph"/>
        </restriction>

        <restriction division="cover_front" unspecified="forbidden">
            <permit division="photograph"/>
        </restriction>

        <restriction division="engraved_titlepage" unspecified="forbidden"/>
        <restriction division="illustration" unspecified="forbidden"/>

        <restriction division="monograph" unspecified="forbidden">
            <permit division="article"/>
            <permit division="chapter"/>
            <permit division="contents"/>
            <permit division="cover_back"/>
            <permit division="cover_front"/>
            <permit division="engraved_titlepage"/>
            <permit division="illustration"/>
            <permit division="preface"/>
            <permit division="photograph"/>
            <permit division="section"/>
            <permit division="table"/>
        </restriction>

        <restriction division="preface" unspecified="forbidden"/>
        <restriction division="photograph" unspecified="forbidden"/>

        <restriction division="section" unspecified="forbidden">
            <permit division="article"/>
            <permit division="chapter"/>
            <permit division="illustration"/>
            <permit division="preface"/>
            <permit division="photograph"/>
            <permit division="table"/>
        </restriction>

        <restriction division="table" unspecified="forbidden"/>
    </correlation>
</ruleset>

Im Folgenden definieren wir einige Metadatenschlüssel in unserem Regelsatz:

    <key id="abstract">
        <label>Abstract</label>
    </key>
    <key id="blurb">
        <label>Blurb</label>
        <label lang="de">Klappentext</label>
    </key>
    <key id="edition">
        <label>Edition</label>
        <label lang="de">Auflagebezeichnung</label>
    </key>
    <key id="isbn">
        <label>ISBN</label>
        <pattern>(?:\d{3}[\- ]?)?\d[\- ]?(?:\d{3}[\- ]?\d{5}|\d{4}[\- ]?\d{4})[\- ]?[\dX]</pattern>
    </key>
    <key id="LABEL" domain="mets:div">
        <label>Label</label>
        <label lang="de">Bezeichnung</label>
    </key>
    <key id="place">
        <label>Place published</label>
        <label lang="de">Erscheinungsort</label>
    </key>
    <key id="publisher">
        <label>Publisher</label>
        <label lang="de">Verlag</label>
    </key>
    <key id="title">
        <label>Main title</label>
        <label lang="de">Haupttitel</label>
    </key>
    <key id="year">
        <label>Year published</label>
        <label lang="de">Erscheinungsjahr</label>
        <codomain type="integer"/>
        <pattern>[12][0-9]{3}</pattern>
    </key>

Die wollen wir jetzt an bestimmten Divisionen zulassen:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://names.kitodo.org/ruleset/v2">
    <declaration>
        <!-- ... -->
    </declaration>
    <correlation>
        <restriction division="article" unspecified="forbidden">
            <permit division="illustration"/>
            <permit division="photograph"/>
            <permit division="table"/>
            <permit key="abstract"/>
            <permit key="LABEL"/>
            <permit key="title"/>
        </restriction>

        <restriction division="chapter" unspecified="forbidden">
            <permit division="illustration"/>
            <permit division="photograph"/>
            <permit division="table"/>
            <permit key="LABEL"/>
        </restriction>

        <restriction division="contents" unspecified="forbidden">
            <permit key="LABEL"/>
        </restriction>

        <restriction division="cover_back" unspecified="forbidden">
            <permit division="photograph"/>
            <permit key="blurb"/>
            <permit key="isbn"/>
        </restriction>

        <restriction division="cover_front" unspecified="forbidden">
            <permit division="photograph"/>
            <permit key="title"/>
            <permit key="publisher"/>
        </restriction>

        <restriction division="engraved_titlepage" unspecified="forbidden"/>

        <restriction division="illustration" unspecified="forbidden">
            <permit key="LABEL"/>
        </restriction>

        <restriction division="monograph" unspecified="forbidden">
            <permit division="article"/>
            <permit division="chapter"/>
            <permit division="contents"/>
            <permit division="cover_back"/>
            <permit division="cover_front"/>
            <permit division="engraved_titlepage"/>
            <permit division="illustration"/>
            <permit division="preface"/>
            <permit division="photograph"/>
            <permit division="section"/>
            <permit division="table"/>
            <permit key="year"/>
            <permit key="title"/>
            <permit key="LABEL"/>
            <permit key="edition"/>
            <permit key="place"/>
            <permit key="publisher"/>
        </restriction>

        <restriction division="preface" unspecified="forbidden">
            <permit key="LABEL"/>
        </restriction>

        <restriction division="photograph" unspecified="forbidden">
            <permit key="LABEL"/>
        </restriction>

        <restriction division="section" unspecified="forbidden">
            <permit division="article"/>
            <permit division="chapter"/>
            <permit division="illustration"/>
            <permit division="preface"/>
            <permit division="photograph"/>
            <permit division="table"/>
            <permit key="LABEL"/>
        </restriction>

        <restriction division="table" unspecified="forbidden">
            <permit key="LABEL"/>
        </restriction>
    </correlation>
</ruleset>

Sie können auch angeben, wie oft ein Metadatenschlüssel zugewiesen werden darf. Dies kann sowohl die Präsenz erzwingen (minOccurs="1") als auch die Wiederholbarkeit vermeiden (maxOccurs="1"). Bei Listenauswahltypen führt eine Bestimmung von höchstens einem Vorkommen zu einer einzelnen Auswahl, während ansonsten eine Mehrfachauswahl angeboten wird. Beispiel:

    <restriction division="monograph" unspecified="forbidden">
        <permit division="article"/>
        <permit division="chapter"/>
        <permit division="contents"/>
        <permit division="cover_back"/>
        <permit division="cover_front"/>
        <permit division="engraved_titlepage"/>
        <permit division="illustration"/>
        <permit division="preface"/>
        <permit division="photograph"/>
        <permit division="section"/>
        <permit division="table"/>
        <permit key="year" minOccurs="1" maxOccurs="1"/>
        <permit key="title" minOccurs="1"/>
        <permit key="LABEL" maxOccurs="1"/>
        <permit key="edition"/>
        <permit key="place"/>
        <permit key="publisher"/>
    </restriction>

Wie Sie vielleicht bemerkt haben, haben wir uns noch nicht mit Personen befasst. Hier ist die Sache aufgrund der Verschachtelung etwas komplizierter. Definieren wir jedoch zunächst einen Metadatenschlüssel für Personen:

    <key id="person">
        <label>Person</label>
        <key id="authorityValue">
            <label>URI</label>
            <codomain namespace="http://d-nb.info/gnd/"/>
        </key>
        <key id="date">
            <label>Display name</label>
            <label lang="de">Lebensdaten</label>
        </key>
        <key id="displayForm">
            <label>Display form</label>
            <label lang="de">Anzeigeform</label>
        </key>
        <key id="family">
            <label>Surname</label>
            <label lang="de">Nachname</label>
        </key>
        <key id="given">
            <label>Given name</label>
            <label lang="de">Vorname</label>
        </key>
        <key id="role">
            <label>Role</label>
            <label lang="de">Rolle</label>
            <codomain namespace="http://id.loc.gov/vocabulary/relators/"/>
        </key>
        <key id="termsOfAddress">
            <label>Display name</label>
            <label lang="de">Ansetzungsform</label>
        </key>
    </key>

Zunächst möchten wir mit einer Regel die Reihenfolge festlegen, in der die Unterschlüssel angezeigt werden, und deren Anzahl definieren. Dazu definieren wir eine Regel für den Schlüssel:

    <restriction key="person">
        <permit key="role" minOccurs="1"/>
        <permit key="authorityValue" maxOccurs="1"/>
        <permit key="family" minOccurs="1" maxOccurs="1"/>
        <permit key="given"/>
        <permit key="termsOfAddress"/>
        <permit key="displayForm" minOccurs="1" maxOccurs="1"/>
        <permit key="date" maxOccurs="1"/>
    </restriction>

Wir können nun die Person wie zuvor zu den Gliederungselementen als Feld zulassen. Wir möchten jedoch die Menge möglicher Rollen einschränken:

    <restriction division="monograph" unspecified="forbidden">
        <permit division="article"/>
        <permit division="chapter"/>
        <permit division="contents"/>
        <permit division="cover_back"/>
        <permit division="cover_front"/>
        <permit division="engraved_titlepage"/>
        <permit division="illustration"/>
        <permit division="preface"/>
        <permit division="photograph"/>
        <permit division="section"/>
        <permit division="table"/>
        <permit key="person">
            <permit key="role" unspecified="forbidden">
                <!-- Autor -->
                <permit value="http://id.loc.gov/vocabulary/relators/aut"/>
                <!-- Herausgeber -->
                <permit value="http://id.loc.gov/vocabulary/relators/edt"/>
            </permit>
        </permit>
        <permit key="year"/>
        <permit key="title"/>
        <permit key="LABEL"/>
        <permit key="edition"/>
        <permit key="place"/>
        <permit key="publisher"/>
    </restriction>

    <restriction division="preface" unspecified="forbidden">
        <permit key="LABEL"/>
        <permit key="person">
            <permit key="role" unspecified="forbidden">
                <!-- Verfasser eines Vorworts -->
                <permit value="http://id.loc.gov/vocabulary/relators/wpr"/>
                <!-- Gefeierte Person -->
                <permit value="http://id.loc.gov/vocabulary/relators/hnr"/>
            </permit>
        </permit>
    </restriction>

    <restriction division="photograph" unspecified="forbidden">
        <permit key="LABEL"/>
        <permit key="person">
            <permit key="role" unspecified="forbidden">
                <!-- Fotograf -->
                <permit value="http://id.loc.gov/vocabulary/relators/pht"/>
                <!-- Beteiligte Person (Client) -->
                <permit value="http://id.loc.gov/vocabulary/relators/cli"/>
                <!-- Nicht beteiligte Person (Associated name) -->
                <permit value="http://id.loc.gov/vocabulary/relators/asn"/>
            </permit>
        </permit>
    </restriction>

Durch Weglassen des Attributs unspecified="forbidden" am XML-Element <permit key="person"> bleiben die anderen Unterschlüssel der Person erhalten, ohne dass sie jedes Mal mittels <permit key="authorityValue"/> <permit key="family"/> <permit key="given"/> <permit key="termsOfAddress"/> <permit key="displayForm"/> <permit key="date"/> aufgeführt werden müssen. Die minOccurs- und maxOccurs-Angaben werden aus der <restriction key="person"> geerbt.

Voneinander abhängig erlaubte Metadatenwerte

Mit dieser Funktion können in einem Metadatenfeld nur Werte ausgewählt werden, die von einem anderen Feld vorgegeben werden. Im Beispiel werden Flurstücke und Adressen mit Straßen und Hausnummern deklariert. (Der gruppierte Schlüssel “Adresse” soll außerdem wiederholbar sein.) Nach Auswahl des Flurstücks sollen nur Straßen gewählt werden können, die es auf dem Flurstück tatsächlich gibt, und nach Auswahl einer Straße sollen nur Hausnummern gewählt werden können, die es an dieser Straße auf dem Flurstück tatsächlich gibt.

<declaration>
    <key id="area">
        <label>Area code</label>
        <label lang="de">Flurstücknummer</label>
        <option value="1234-2a"/>
        <option value="1234-2b"/>
        <!-- ... -->
    </key>
    <key id="address">
        <label>Address</label>
        <label lang="de">Adresse</label>
        <key id="street">
            <label>Street</label>
            <label lang="de">Straße</label>
            <option value="Buschweg"/>
            <option value="Pastor-Luis-Straße"/>
            <option value="Rosenstraße"/>
            <option value="Vereinsstraße"/>
            <!-- ... -->
        </key>
        <key id="house">
            <label>House no.</label>
            <label lang="de">Hausnummer</label>
            <option value="1"/>
            <option value="1a"/>
            <option value="1b"/>
            <option value="2"/>
            <option value="2 Rgb.">
                <label>2, rear building</label>
                <label lang="de">2, Rückgebäude</label>
            </option>
            <option value="2a"/>
            <option value="3"/>
            <!-- ... -->
        </key>
    </key>
</declaration>
<correlation>
    <restriction key="address">
        <permit key="street" minOccurs="1" maxOccurs="1" unspecified="forbidden">
            <condition key="../area" equals="1234-2b">
                <permit value="Rosenstraße"/>
                <permit value="Vereinsstraße"/>
            </condition>
        </permit>
        <permit key="house" minOccurs="1" maxOccurs="1" unspecified="forbidden">
            <condition key="../area" equals="1234-2b">
                <condition key="street" equals="Rosenstraße">
                    <permit value="3"/>
                    <permit value="5"/>
                    <permit value="7"/>
                </condition>
                <condition key="street" equals="Vereinsstraße">
                    <permit value="2"/>
                    <permit value="2 Rgb."/>
                    <permit value="4"/>
                    <permit value="4a"/>
                </condition>
             </condition>
        </permit>
    </restriction>
</correlation>

<condition key="…"> verweist auf einen Eintrag auf der selben Ebene, im Falle gruppierter Schlüssel innerhalb desselben Elternteils. Ein vorangestelltes ../ verweist auf die nächsthöhere Ebene, so vorhanden (wiederholbar).

Bearbeitungseinstellungen

Zu guter Letzt können auch Bearbeitungseinstellungen für einzelne Metadatenschlüssel im Regelsatz definiert werden. Es gibt vier davon:

  • alwaysShowing: Der Metadatenschlüssel wird immer angezeigt, auch wenn er leer ist. Normalerweise werden Metadatenschlüssel nur angezeigt, wenn sie einen Wert haben oder der Bearbeiter sie manuell hinzugefügt hat. Bei sehr häufigen Metadatenfeldern können Sie das manuelle Hinzufügen sparen, indem Sie den Schlüssel auf alwaysShowing setzen.
  • editable: Der Metadatenschlüssel kann so eingestellt werden, dass er nicht bearbeitet werden kann. Er wird dann angezeigt, ist aber für Änderungen gesperrt. Dies ist beispielsweise für Werte geeignet, die nach dem Import nicht geändert werden sollen.
  • excluded: Der Metadatenschlüssel wird nicht angezeigt, auch wenn er einen Wert hat. Dadurch können Metadateneinträge vor dem Bearbeiter ausgeblendet werden.
  • filterable (aktuell nur im PR #5810 verfügbar): Diese Einstellung funktioniert nur im Zusammenhang mit Metadatenschlüsseln, die mehrere Optionen haben und über eine Einfach- oder Mehrfachauswahl ausgewählt werden können. Wenn die Filterung eingeschaltet ist, dann wird über der Auswahl ein Filter angezeigt, um die auszuwählenden Einträge zu filtern. Die Filterung vergleicht dazu das jeweilige Label der Option mit dem eingegebenen Filtertext und zeigt danach nur noch die Optionen an, welche mit dem Filtertext beginnen. Groß- und Kleinschreibung spielt dabei keine Rolle. Standardmäßig ist diese Option deaktiviert und muss explizit aktiviert werden.
  • multiline: Dadurch wird das Eingabefeld vergrößert. Für einige Metadateneinträge ist viel Text erforderlich, beispielsweise Abstracts. Bei Auswahlfeldern wird anstelle einer Dropdown-Auswahl eine Listenauswahl angezeigt.

Die Bearbeitungseinstellungen werden in einem dritten Hauptteil des Regelsatzes, <editing>, definiert:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://names.kitodo.org/ruleset/v2">
    <declaration>
        <!-- ... -->
    </declaration>

    <correlation>
        <!-- ... -->
    </correlation>

    <editing>
        <setting key="title" alwaysShowing="true"/>
        <setting key="origCatalogId" editable="false"/>
        <setting key="origImportXmlData" excluded="true"/>
        <setting key="abstract" multiline="true"/>
        <setting key="digitalCollection" filterable="true"/>
    </editing>
</ruleset>

Erfassungsstufen verwenden

Durch Angabe von Erfassungsphasen können Metadatenschlüssel zu unterschiedlichen Zeitpunkten im Workflow unterschiedlich behandelt werden. Beim Erstellen von Vorgängen können zum Beispiel Felder ausgeblendet werden, die importiert wurden und später bearbeitet werden sollen. Dazu können beim Anlegen Einträge erstellt werden, die später nur lesbar sind.

    <editing>
        <setting key="OcrMode" excluded="true"/>
        <setting key="DigitizationDevice" editable="false" filterable="true" />
        <setting key="Billing" excluded="true"/>

        <!-- ergänzend / abweichend beim Anlegen von Vorgängen -->
        <acquisitionStage name="create">
            <setting key="OcrMode" excluded="false"/>
            <setting key="DigitizationDevice" editable="true" />
        </acquisitionStage>

        <!-- ergänzend / abweichend im Metadateneditor -->
        <acquisitionStage name="edit">
            <setting key="DigitizationDevice" excluded="true"/>
        </acquisitionStage>
    </editing>

Zeitungsvorgänge konfigurieren

Zeitungsvorgänge können vereinfacht und klar konfiguriert werden. Zu diesem Zweck werden die innerhalb des Zeitungsvorgangs für die Gliederung nach Kalenderdaten zu verwendenden Divisionen innerhalb der Division deklariert.

    <division id="Newspaper">
        <label>Newspaper</label>
        <label lang="de">Zeitung</label>
        <subdivisionByDate>
            <division id="NewspaperYear" dates="LABEL" scheme="yyyy">
                <label>Newspaper year</label>
                <label lang="de">Zeitungsjahrgang</label>
            </division>
            <division id="NewspaperMonth" dates="ORDERLABEL" scheme="M"/>
                <label>Newspaper month</label>
                <label lang="de">Monat (Zeitung)</label>
            </division>
            <division id="NewspaperDay" dates="ORDERLABEL" scheme="d"/>
                <label>Newspaper day</label>
                <label lang="de">Kalendertag (Zeitung)</label>
            </division>
        </subdivisionByDate>
    </division>

dates (dt. “datiert”) gibt an, unter welchem Schlüssel das Datum gespeichert wird, scheme sein Format.

⚠️ Anders als bei den <key>-Definitionen, die eine Schachtelung erlauben, sind die <division>-Definitionen eine einfache Liste. Die innerhalb von <subdivisionByDate> deklarierten <division>s fügen sich in die Menge der übrigen <division>s ein. Achten Sie darauf, dass es hier nicht zu Doppelungen kommt. Insbesondere wenn Sie mehrere Divisionen für Zeitungsvorgänge definieren, dürfen auch die darunter definierten Divisionen für die Datumselemente nur ein Mal definiert werden. Beispiel:

    <division id="Newspaper"> …
        <subdivisionByDate>
            <division id="NewspaperYear" …> … </division>
            <division id="NewspaperMonth" …> … </division>
            <division id="NewspaperDay" …> … </division>
        </subdivisionByDate>
    </division>

    <division id="Newspaper2"> …
        <subdivisionByDate>
            <division id="NewspaperYear2" …> … </division>
            <division id="NewspaperMonth2" …> … </division>
            <division id="NewspaperDay2" …> … </division>
        </subdivisionByDate>
    </division>

Darstellung periodisch veröffentlichter Veröffentlichungen nach Geschäftsjahren (Doppeljahre), hier mit Geschäftsjahr beginnend am 1. August:

    <division id="Playbill">
        <label>Playbill</label>
        <label lang="de">Theaterprogramm</label>
        <subdivisionByDate yearBegin="--08-01">
            <division id="PlaybillYear" dates="ORDERLABEL" scheme="yyyy/yyyy"/>
                <label>Playbill year</label>
                <label lang="de">Theaterprogrammjahrgang</label>
            </division>
            <division id="PlaybillMonth" dates="ORDERLABEL" scheme="yyyy-MM"/>
                <label>Playbill month</label>
                <label lang="de">Monat (Theaterprogramm)</label>
            </division>
            <division id="PlaybillDay" dates="ORDERLABEL" scheme="yyyy-MM-dd"/>
                <label>Playbill day</label>
                <label lang="de">Kalendertag (Theaterprogramm)</label>
            </division>
        </subdivisionByDate>
    </division>

Regelsätze aufeinander aufbauen

Regelsätze können einen anderen Regelsatz inkludieren. So können gemeinsame Elemente in einem gemeinsamen Regelsatz verwaltet werden, für einen speziellen Zweck aber einzelne Elemente ergänzt oder umdefiniert werden. Diese werden mit dem <include>-Element in den Regelsatz geladen. Die in dem Regelsatz definierten Elemente prioritär vor den geladenen. Sie ergänzen oder ersetzen diese.

<!-- basis.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://names.kitodo.org/ruleset/v2">
    <declaration>
        <division id="division"> <label>Division</label> </division>
        <key id="singleDigCollection">
            <option value="Kollektion1"/>
            <option value="Kollektion2"/>
            <option value="Kollektion3"/>
            <option value="Kollektion4"/>
        </key>
    </declaration>
</ruleset>

<!-- projekt_a.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://names.kitodo.org/ruleset/v2">
    <include>basis.xml</include>
    <correlation>
        <restriction division="division">
            <permit key="singleDigCollection" unspecified="forbidden">
                <permit value="Kollektion2"/>
                <permit value="Kollektion3"/>
            </permit>
        </restriction>
    </correlation>
</ruleset>

Weitere Informationen

Einen guten ersten Überblick über den neuen Regelsatz von Kitodo.Production 3.x erhalten Sie auch auf dem Youtube-Kanal des Kitodo-Vereins: https://youtu.be/NCg6PeFti8I?t=2395

Clone this wiki locally