2019.06
2020.06
Gestaltung eigener MyCoRe-Metadatenobjekte
In diesem Abschnitt wird der Syntax der Definitionsdatei für eigene Metadatenmodelle nach dem MyCoRe-Datamodell-Prinzip vorgestellt. Weiterhin folgt eine Beschreibung der Integration in den Maven-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, 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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<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.
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.
1
2
3
4
5
6
7
8
9
10
11
12
|
<plugin>
<groupId>org.mycore.plugins</groupId>
<artifactId>datamodel-plugin</artifactId>
<version>0.6</version>
<executions>
<execution>
<goals>
<goal>schema</goal>
</goals>
</execution>
</executions>
</plugin>
|
Weiterführende Informationen: