2015.05 2016.06

Gestaltung eigener MyCoRe-Metadatenobjekte

In diesem Abschnitt wird der Syntax der Definitionsdatei für eigene Metadatenmodelle nach dem MyCoRe-Datamodell-Prinzip 2 vorgestellt. Weiterhin folgt eine Beschreibung der Integration in den Build-Prozess.

Das Metadatenmodell

In der Definition des eigenen Datenmodells müssen nur noch Teile definiert werden, welche sich im Tag metadata befinden. Alle anderen Teile werden automatisch gebaut. Die Definition geht weiterhin davon aus, dass die äußeren Tag-Namen entsprechend mit def. erweiterbar sind.

Um auch alte Datenmodelle über die neue Datenmodelldefinition beschreiben zu können, wurde im Element element das Attribut wrapper eingeführt. Für ältere Definitionen des Datenmodell 2, welche nicht das Attribut required nutzen , ist weiterhin folgende implizite Annahme gültig und wird umgesetzt:

  • Für minOccurs="0" wird dieses für das äußere Tag gesetzt, das innere Tag hat kein minOccurs und steht damit per default auf 1.

Weiterhin gilt:

  • maxOccurs wird immer im äußeren Tag nicht angegeben und steht per default auf 1.
  • Ist minOccurs nicht angegeben, wird es im inneren Tag auf 1 per default gesetzt.
  • Ist required="false" angegeben, wird minOccurs im äußeren Tag auf 0 gesetzt.
  • Ist maxOccurs nicht angegeben wird für das innere Tag implizit per default 1 angenommen.
  • Das required -Attribut sollte zur besseren Lesbarkeit der Konfiguration mit angegben werden.
<objecttype name="document" isChild="false" isParent="false" hasDerivates="true" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="datamodel.xsd">
  <metadata>
    <!-- a required classmark in old notation with unique inner tag -->
    <element name="classmark" type="text"/>
    <!-- a required title in maximal 3 languages -->
    <element name="title" type="text" required="true" maxOccurs='3'/>
    <!-- an optional author in old notation with unbounded inner tag -->
    <element name="author" type="text" minOccurs='0' maxOccurs='unbounded'/>
    <!-- an optional keyword with unbounded inner tag and wrapped outer tag name -->
    <element name="keyword" type="text" required="false" wrapper="keywords" maxOccurs='unbounded'/>
    <!-- an optional measurement in 2 or 3 dimensions -->
    <element name="measurement" type="number" required="false" minOccurs="2" maxOccurs='3'/>
    <!-- a required subject in old notation with unique inner tag -->
    <element name="subject" type="classification" minOccurs='1' maxOccurs='1'>
      <classification id="subject"/>
    <element>
    <!-- a required link list with unbounded inner tag -->
    <element name="link" type="link" required="true" maxOccurs='unbounded'>
      <target type="person"/>
    <element>
  </metadata>
</objecttype>
  • name in der Objekt beschreibenden Zeile ist der gewünschte MyCoRe-ObjectID-Typ.
  • isChild spezifiziert, ob das Objekt ein Kind-Objekt ist.
  • isParent spezifiziert, ob das Objekt ein Eltern-Objekt ist.
  • hasDerivates spezifiziert, ob das Objekt Derivate-Objekte haben darf.
  • name im Element beschreibt den Tagnamen des inneren Elementes. Der Äußere wird daraufhin gebildet als def.{name} .
  • required legt fest, ob das Element ein Pflichtfeld ist. Mögliche Werte sind 'true' und 'false'. Ist nichts angegeben, wird 'true' angenommen' bzw. es wird minOcurrs ausgewertet.
  • minOccurs beschreibt die minimale Anzahl der Wiederholungen des inneren Tags. Ist nichts angegeben, wird 1 angenommen.
  • maxOccurs beschreibt die maximale Anzahl der Wiederholungen des inneren Tags. Ist nichts angegeben, wird 1 angenommen.
  • Das element kann um das Attribut wrapper erweitert werden, wenn das äußere Tag nicht den Namen def.{name} haben soll.
  • Das element kann um das Attribut heritable (true|false) erweitert werden, wenn alle inneren Tags vererbbar sein sollen und in den Daten das heritable Attribut auf true stehen soll. Ist nichts angegeben, wird false angenommen.
  • Das element kann um das Attribut notinherited (true|false) erweitert werden, wenn die inneren Tags eines übergeordneten Objekts nicht geerbt werden dürfen und in den Daten das notinherited Attribut auf true stehen soll. Ist nichts angegeben, wird false angenommen.
  • Das Subtag classification bescheibt über das Attribut id den Klassifikationsnamen.
  • Das Subtag target gibt über das Attribut type den MCRObjectType des Link-Ziels an.
type -Element MyCoRe-Datenmodellklasse
text MCRMetaLangText
boolean MCRMetaBoolean
classification MCRMetaClassification
link MCRMetaLinkID
href MCRMetaLink
derlink MCRMetaDerivateLink
date MCRMetaISO8601Date
number MCRMetaNumber
xml MCRMetaXML
historydate MCRMetaHistoryDate
personname MCRMetaPersonName

Erzeugen von XML-Schema-Dateien in eigenen Maven-Modulen

Um eine XML-Schema-Datei der eigenen Metadatendefinition, innerhalb eines zu bauenden *.jar-Files während des Build-Prozesses, zu bauen und mit zu integrieren, muss die Datenmodell-Datei innerhalb des Maven-Modules unter {maven-modul}/src/main/datamodel/def/{xyz}.xml stehen.

<plugin>
  <groupId>org.mycore.plugins</groupId>
  <artifactId>datamodel-plugin</artifactId>
  <version>0.5</version>
  <executions>
    <execution>
      <goals>
        <goal>schema</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Weiterführende Informationen:

 Robert Stephan, Jens Kupferschmidt - 2016-07-25