Structure and configuration of mets.xml and levels.xml

The most important files for the configuration and storage of metadata are mets.xml and levels.xml. The file levels.xml can be found at docuteam-packer/config. It is used to determine the metadata fields. The file mets.xml is located in each SIP at the top level next to the root element and contains the metadata of a SIP.


If a SIP is created with docuteam packer, a file containing all metadata of the package is automatically created. The file is located on the top level in SIP, next to the root element. It is called mets.xml and is structured according to the Matterhorn METS standard.

location of mets.xml

The standard Matterhorn METS combines the standards METS, PREMIS and EAD. It specifies how these three standards can be used to describe a SIP. Further information about Matterhorn METS can be found here.

Technical and administrative metadata are automatically extracted and captured by docuteam packer. Descriptive metadata has to be manually entered by the user in the detail view of the opened SIP. Which metadata fields are available for which level and which values are allowed in them is defined in the configuration file levels.xml.


The file levels.xml is located at docuteam-packer/config. Here you can define, for example, which fields should be displayed at which level, whether a single field is mandatory, whether default values are used or how an entered value is validated.

In the first section of levels.xml (LEVELS:MetadataElements) all available metadata elements and, if applicable, allowed values are defined. See List of metadata fields for a list of all metadata fields available in packer.

The second section (LEVELS:Levels) defines the levels and the assignment of metadata elements to these levels.

Metadata elements

A LEVELS:MetadataElement is defined by the following 6 attributes:

Example accessNr
mandatory yes
Explanation The unique name of the metadata field. This must correspond to accessorNameRef shown below with which the data is accessed in packer. The i18n configuration can be used to assign an individual label to a metadata field for display in the GUI.

Example new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date()), ((ch.docuteam.darc.mets.structmap.NodeAbstract)object1).getMimeType(), "false"
mandatory no
Explanation A Java expression to initialize this field with a value when the node is created. The current node is referenced by: (ch.docuteam.darc.mets.structmap.NodeAbstract)object1

Example ch.docuteam.darc.mdconfig.MetadataElementValidatorDate
mandatory no
Explanation A Java class that validates the content of this metadata element on setting. If the validation does not allow the entered value, an error message is displayed and the field is filled with the previous value.

Example ch.docuteam.darc.mdconfig.
mandatory no
Explanation A Java class that executes arbitrary actions after the value of this field has been set. This action is not executed if the validation of the entered value fails.

Example *;German;English;French;Italian, file:///config/skos/retentions.rdf
mandatory no
Explanation A list of values that is displayed in packer as a drop-down list. If the first element of this list is an asterisk "*", any other terms can be entered in addition to the list elements. \ The list of values may also be predefined in a file which respects the SKOS schema ("Simple Knowledge Organization System"). The relative path to this RDF file must be provided in this case.

Example stringList
mandatory no
Explanation Specifies the type of the selection list of allowed values. Supported values are stringList, skosFile and csvFile.



With the element LEVELS:AllowedValuesSeparator the separator of the allowed values list can be set. This may also consist of several characters, as the following example shows:


Levels of description

A LEVELS:Level (level of description) is defined by the following 4 attributes:

Example Fonds
mandatory yes
Explanation The unique name of this level.

Example resources/images/LevelSerie.png
mandatory yes
Explanation The path to the icon file of this level. If this file does not exist, a yellow warning icon is displayed.

Example Series File Undefined
mandatory no
Explanation List of sub-levels allowed for this level. The elements of this list must be specified in this file (as nameID) and separated by a space. The first element of this list is set as the default level for new child elements.

Example true
mandatory no
Explanation Marks the corresponding level as nodes to be deleted.


    allowedSublevelNameRefs="Series File Undefined">

Assignment of metadata elements to levels

The assignment of metadata elements to levels is defined by a list of LEVELS:LevelMetadataElement. This element has the following 7 attributes:

Example language
mandatory yes
Explanation The accessorNameID of the metadata element; references an accessorNameID from the list of <LEVELS:MetadataElements> (see above).

Example true
mandatory yes
Explanation If true, this metadata element is mandatory. Mandatory elements are always displayed in the metadata list. If a mandatory element is empty, the element is marked with an exclamation mark.

Example false
mandatory yes
Explanation If true, this metadata element is repeatable and can be added multiple times as needed.

Example true
mandatory no
Explanation If true, this metadata element is always displayed in the metadata list and does not need to be added manually first.

Example false
mandatory no
Explanation If true, this metadata element can not be changed manually. If a 'defaultExpression' is specified, the metadata element is initialized with this value when it is created.

Example false
mandatory no
Explanation If true, this metadata element is not deleted when a template is created.

Example 5
mandatory no
Explanation Specifies the number of rows when displaying this metadata element in the metadata list.



Depending on how the attributes are defined in levels.xml, the metadata fields are displayed accordingly in the detail view of a SIP.

For example, if dynamic metadata elements are defined, they can be selected from the drop-down list in the lower left-hand corner of the Description tab and added to the list by clicking on the plus sign.

add metadata fields dynamically

The first column in the list contains information in coded form about the individual elements defined in levels.xml:

  • A * means that this element is a mandatory field and has already been filled in. Mandatory fields are always visible.
  • A ! means that the element is a mandatory field that has not yet been filled in.
  • An O means that the element is always visible, but does not have to be filled in.
  • A + means that the element can occur several times.
  • A X means that the element cannot be edited.

List of metadata fields

The following table lists the metadata fields available in docuteam packer and provides the following information:

  • The accessorNameId used in levels.xml.
  • Default field name displayed in packer. These labels can be adapted by editing the files in docuteam-packer\translations. Numbers at the start of the field name correspond to ISAD(G) elements.
  • Corresponding EAD (Version 2002) field. Given is the xpath relative to a c or archdesc element.
accessorNameID Default field label in packer EAD
otherLevelName 1.4 Level [@level = 'otherlevel']/@otherlevel
accessPolicy Access Policy EAD:accessrestrict[@type = 'accessPolicy']/EAD:p
accessRestrictionClassification Classification EAD:accessrestrict[@type = 'accessRestrictionsClassification']/EAD:p
accessRestrictionClosureYear Access Restriction Until Year EAD:accessrestrict[@type = 'accessRestrictionsClosureYear']/EAD:p
accessRestrictionExplanation Access Restriction Explanation EAD:accessrestrict[@type = 'accessRestrictionsExplanation']/EAD:p
accessRestrictionIsMetadataPublic Publish Metadata EAD:accessrestrict[@type = 'accessRestrictionsIsMetadataPublic']/EAD:p
accessRestrictionIsPublic Publish Documents EAD:accessrestrict[@type = 'accessRestrictionsIsPublic']/EAD:p
accessRestrictionPeriod Access Restriction Period EAD:accessrestrict[@type = 'accessRestrictionsPeriod']/EAD:p
accessRestrictionPeriodBaseYear Access Restriction Period Since Year EAD:accessrestrict[@type = 'accessRestrictionsPeriodBaseYear']/EAD:p
accessRestrictionPrivacy Privacy EAD:accessrestrict[@type = 'accessRestrictionsPrivacy']/EAD:p
accessRestrictionStatus Access Restriction Status EAD:accessrestrict[@type = 'accessRestrictionsStatus']/EAD:p
accessRestrictionStatusExplanation Access Restriction Status Explanation EAD:accessrestrict[@type = 'accessRestrictionsStatusExplanation']/EAD:p
retentionPeriodBaseYear Retention Period Since Year EAD:accessrestrict[@type = 'baseYear']/EAD:p
accessRestriction 4.1 Access Rules EAD:accessrestrict[@type = 'restrictions']/EAD:p
retentionPeriod Retention Period EAD:accessrestrict[@type = 'retentionPeriod']/EAD:p
retentionPolicy Retention Policy EAD:accessrestrict[@type = 'retentionPolicy']/EAD:p
usagePermission Usage permission EAD:accessrestrict[@type = 'usagePermission']/EAD:p
usagePermissionExpiringDate Usage permission expiring date EAD:accessrestrict[@type = 'usagePermissionExpiringDate']/EAD:p
accruals 3.3 Accruals EAD:accruals/EAD:p
accessNr 2.4 Source of Acquisition EAD:acqinfo/EAD:p
reproductions 5.2 Location of Copies EAD:altformavail/EAD:p
appraisalDateDisposed Date Of Destruction EAD:appraisal/EAD:note[@type = 'dateDisposed']/EAD:p
appraisalIsOnHold Is On Hold EAD:appraisal/EAD:note[@type = 'isOnHold']/EAD:p
appraisalRetentionPeriod Retention Period EAD:appraisal/EAD:note[@type = 'retentionPeriod']/EAD:p
appraisalAndDestruction 3.2 Appraisal EAD:appraisal/EAD:p
arrangement 3.4 Arrangement EAD:arrangement/EAD:p
bibliography 5.4 Publications EAD:bibliography/EAD:p
dateOfBirth Date of birth EAD:bioghist/EAD:note[@type = 'dateBirth']/EAD:p
firstname Firstname EAD:bioghist/EAD:note[@type = 'firstName']/EAD:p
lastname Lastname EAD:bioghist/EAD:note[@type = 'lastName']/EAD:p
nationality Nationality EAD:bioghist/EAD:note[@type = 'nationality']/EAD:p
sex Sex EAD:bioghist/EAD:note[@type = 'sex']/EAD:p
deathOfAuthor Death of Author EAD:bioghist/EAD:note[not(@type)]/EAD:p/EAD:date[@type = 'deathAuthor']
biographicalHistory 2.2 Administrative History EAD:bioghist/EAD:p
institutionCreator Institution Creator EAD:controlaccess/EAD:corpname[@role = 'creator']
institutionInvolved Institution Involved EAD:controlaccess/EAD:corpname[@role = 'involved']
institution Institution EAD:controlaccess/EAD:corpname[not(@role)]
familyName Family name EAD:controlaccess/EAD:famname[@role = 'general']
function Function EAD:controlaccess/EAD:function[@rules = 'general']
objectType Type EAD:controlaccess/EAD:genreform
geogName Geographic Name EAD:controlaccess/EAD:geogname[@role = 'general']
authorGeneric Author EAD:controlaccess/EAD:name[@role = 'author']
compartment Compartment EAD:controlaccess/EAD:name[@role = 'compartment']
designer Designer EAD:controlaccess/EAD:name[@role = 'designer']
editor Editor EAD:controlaccess/EAD:name[@role = 'editor']
fundingSource Funding Source EAD:controlaccess/EAD:name[@role = 'fundingSource']
illustrator Draftsman EAD:controlaccess/EAD:name[@role = 'illustrator']
institute Institute EAD:controlaccess/EAD:name[@role = 'institute']
journal Journal EAD:controlaccess/EAD:name[@role = 'journal']
keyword Keyword EAD:controlaccess/EAD:name[@role = 'keyword']
location Location EAD:controlaccess/EAD:name[@role = 'location']
method Method EAD:controlaccess/EAD:name[@role = 'method']
photographer Photographer EAD:controlaccess/EAD:name[@role = 'photographer']
placeOfPublication Place of Publication EAD:controlaccess/EAD:name[@role = 'placeOfPublication']
publisher Publisher EAD:controlaccess/EAD:name[@role = 'publisher']
status Status EAD:controlaccess/EAD:name[@role = 'status']
submitStatus Submit status EAD:controlaccess/EAD:name[@role = 'submitStatus']
typeOfAcquisition Type of Acquisition EAD:controlaccess/EAD:name[@role = 'typeOfAcquisition']
university University EAD:controlaccess/EAD:name[@role = 'university']
occupation Occupation EAD:controlaccess/EAD:occupation[@rules = 'general']
author Author EAD:controlaccess/EAD:persname[@role = 'author']
creator Creator EAD:controlaccess/EAD:persname[@role = 'creator']
involved Involved EAD:controlaccess/EAD:persname[@role = 'involved']
responsible Responsible EAD:controlaccess/EAD:persname[@role = 'responsible']
staff Staff Member EAD:controlaccess/EAD:persname[@role = 'staff']
subjectGeneral General Subject EAD:controlaccess/EAD:subject[@rules = 'general']
subject Subject EAD:controlaccess/EAD:subject[not(@rules) and not(@role)]
uniformTitle Uniform Title EAD:controlaccess/EAD:title[@type = 'uniform']
modeOfAcquisition Mode of acquisition EAD:custodhist/EAD:acqinfo/EAD:p
sourceType Availability EAD:custodhist/EAD:note/EAD:p
archivalHistory 2.3 Archival History EAD:custodhist/EAD:p
PID PID EAD:dao[@xlink:role = 'simple']/@xlink:href
abstract Abstract EAD:did/EAD:abstract
languageNotes Language Notes EAD:did/EAD:langmaterial/@label
language 4.3 Language EAD:did/EAD:langmaterial/EAD:language
cartographicMaterial Cartographic Mathematical Data EAD:did/EAD:materialspec[@label = 'cartographic']
scale Scale EAD:did/EAD:materialspec[@label = 'scale']
origination Origination EAD:did/EAD:origination
originationAgency Agency EAD:did/EAD:origination[@label = 'agency']
originationDepartment Department EAD:did/EAD:origination[@label = 'department']
format Format EAD:did/EAD:physdesc[@label = 'format']
size Size (in Bytes) EAD:did/EAD:physdesc[@label = 'size']
dimensionsCategory Format EAD:did/EAD:physdesc/EAD:dimensions[@type = 'category' or @role = 'category']
dimensions Dimensions EAD:did/EAD:physdesc/EAD:dimensions[not(@type) and not(@role)]
extentNote 1.5 Note Extent EAD:did/EAD:physdesc/EAD:extent[@type = 'note']
extentPrint Extent (print) EAD:did/EAD:physdesc/EAD:extent[@type = 'print']
extent 1.5 Extent EAD:did/EAD:physdesc/EAD:extent[not(@type)]
extentUnit 1.5 Measure EAD:did/EAD:physdesc/EAD:extent[not(@type)]/@unit
material 1.5 Measure EAD:did/EAD:physdesc/EAD:physfacet
codeLocation Location code EAD:did/EAD:physloc[@label = 'code']
fullLocation Location Description EAD:did/EAD:physloc[@label = 'fullLocation']
creationPeriod Creation Period EAD:did/EAD:unitdate[@label = 'creationPeriod']
creationPeriodNotes Notes EAD:did/EAD:unitdate[@label = 'creationPeriodNotes']
date Date EAD:did/EAD:unitdate[@label = 'date']
from 1.3 From EAD:did/EAD:unitdate[@label = 'from']
fromYear 1.3 From Year EAD:did/EAD:unitdate[@label = 'fromYear']
invalid Invalidation date EAD:did/EAD:unitdate[@label = 'invalid']
letter Letter date EAD:did/EAD:unitdate[@label = 'letter']
relationPeriod Relation period EAD:did/EAD:unitdate[@label = 'relationPeriod']
to 1.3 To EAD:did/EAD:unitdate[@label = 'to']
toYear 1.3 To Year EAD:did/EAD:unitdate[@label = 'toYear']
year Year EAD:did/EAD:unitdate[@label = 'year']
accessionNumber Accessions EAD:did/EAD:unitid[@type = 'accession']
edition Edition EAD:did/EAD:unitid[@type = 'edition']
ISBN ISBN EAD:did/EAD:unitid[@type = 'isbn']
ISSN ISSN EAD:did/EAD:unitid[@type = 'issn']
refCodeIsVisible Reference Code Visible EAD:did/EAD:unitid[@type = 'isVisible']
DOI DOI EAD:did/EAD:unitid[@type = 'otherStandardIdentifier']
publication Publication number EAD:did/EAD:unitid[@type = 'publication']
refCode 1.1 Reference Code EAD:did/EAD:unitid[@type = 'refCode']
refCodeAdmin Administrative Reference Code EAD:did/EAD:unitid[@type = 'refCodeAdmin']
refCodeOld Old Reference Code EAD:did/EAD:unitid[@type = 'refCodeOld']
refCodeSeparator Reference Code Separator EAD:did/EAD:unitid[@type = 'separator']
unitTitleAdditional Additional Title EAD:did/EAD:unittitle[@label = 'additional']
unitTitle 1.2 Title EAD:did/EAD:unittitle[@label = 'main']
unitTitleOriginal Original Title EAD:did/EAD:unittitle[@label = 'original']
unitTitleVarying Varying Form of Title EAD:did/EAD:unittitle[@label = 'varying']
filePlanPosition File Plan Position EAD:fileplan/EAD:note[@type = 'position']/EAD:p
comment 6.1 Notes EAD:note/EAD:p
DoiJournal DOI (Journal) EAD:odd[@type = 'doiJournal']/EAD:p
editionStatement Edition Statement EAD:odd[@type = 'edition']/EAD:p
event Event EAD:odd[@type = 'event']/EAD:p
project Project EAD:odd[@type = 'project']/EAD:p
projectAbbreviation Project Abbreviation EAD:odd[@type = 'projectAbbreviation']/EAD:p
projectName Project Name EAD:odd[@type = 'projectName']/EAD:p
projectTitle Project Title EAD:odd[@type = 'projectTitle']/EAD:p
usage Usage EAD:odd[@type = 'usage']/EAD:p
locationOfOriginals 5.1 Location of Originals EAD:originalsloc/EAD:p
findingAids 4.5 Finding Aids EAD:otherfindaid/EAD:p
characteristicsNote Characteristic's Note EAD:phystech/EAD:note/EAD:p
characteristics 4.4 Characteristics EAD:phystech/EAD:p
processInfoArchivist 7.1 Archivist EAD:processinfo[@type = 'archivist']/EAD:p
processInfoDate 7.3 Date of Description EAD:processinfo[@type = 'date']/EAD:p
digitization Level of digitization EAD:processinfo[@type = 'digitization']/EAD:p
descriptionLevel Description Level EAD:processinfo[@type = 'level']/EAD:p
descriptionLevelNotes Description Level Notes EAD:processinfo[@type = 'levelNotes']/EAD:p
revisions Revisions EAD:processinfo[@type = 'revisions']/EAD:p
descriptionRules 7.2 Rules & Conventions EAD:processinfo[@type = 'rules']/EAD:p
relatedMaterialExtern Reference EAD:relatedmaterial/EAD:extref[@xlink:role = 'general']
relatedMaterial 5.3 Related Objects EAD:relatedmaterial/EAD:p
scopeContent 3.1 Scope and Content EAD:scopecontent/EAD:p
conditionsOfReproductions 4.2 Reproductions EAD:userestrict/EAD:p