# -*- mode: rnc; -*- # # RelaxNG Schema für Kitido.Production Regelsatz # # Author: David Maus # namespace s = "http://purl.oclc.org/dsdl/schematron" start = Preferences Preferences = element Preferences { element debug { "0" | "1" }?, MetadataTypeDef*, StructTypeDef*, ImportExportDef } MetadataTypeDef = [ s:pattern [ s:rule [ context = "metadata[parent::DocStrctType]" s:assert [ test = "/Preferences/METS/Metadata/InternalName = ." "Das Metadatum '" s:value-of [ select = "." ] "' wird nicht exportiert." ] ] ] ] element MetadataType { attribute type { "person" | "identifier" }?, ( Name & NameTranslation* ) } Name = ## Interner Name des Metadaten- oder Strukturtyps. Der Name wird zur Referenzierung benutzt und muss daher dokumentweit eindeutig sein. element Name { xsd:NMTOKEN } NameTranslation = ## Übersetzung eines Namens in die über das Attribut @name spezifizierte Sprache. element language { attribute name { xsd:language }, text } StructTypeDef = element DocStrctType { attribute anchor { "true" }? & Name & NameTranslation* & AllowedChildStruct* & AllowedMetadata* } AllowedChildStruct = [ s:pattern [ s:rule [ context = "allowedchildtype" s:assert [ test = "/Preferences/DocStrctType/Name = ." "Der Strukturtyp '" s:value-of [ select = "." ] "' muss definiert werden." ] ] ] ] element allowedchildtype { xsd:NMTOKEN } AllowedMetadata = [ s:pattern [ s:rule [ context = "metadata[parent::DocStrctType]" s:assert [ test = "/Preferences/MetadataType/Name = ." "Das Metadatum '" s:value-of [ select = "." ] "' muss definiert werden." ] ] ] ] element metadata { attribute num { "*" | "+" | "1o" | "1m" }, attribute DefaultDisplay { text }?, xsd:NMTOKEN } ImportExportDef = element Formats { PicaImport?, MetsModsSerialization? } PicaImport = element PicaPlus { ( PicaPlusImportMetadata | PicaPlusImportDocStruct | PicaPlusImportPerson )* } PicaPlusImportMetadata = [ s:pattern [ s:rule [ context = "Metadata[parent::PicaPlus]" s:assert [ test = "/Preferences/MetadataType/Name = current()/Name" "Das Metadatum '" s:value-of [ select = "Name" ] "' muss definiert werden." ] ] ] ] element Metadata { PicaPlusImportMappingElements } PicaPlusImportPerson = [ s:pattern [ s:rule [ context = "Person[parent::PicaPlus]" s:assert [ test = "/Preferences/MetadataType/Name = current()/Name" "Das Metadatum '" s:value-of [ select = "Name" ] "' muss definiert werden." ] ] s:rule [ context = "Person[parent::PicaPlus]" s:assert [ test = "/Preferences/MetadataType[Name = current()/Name]/@type = 'person'" "Das Metadatum '" s:value-of [ select = "Name" ] "' muss als Person gekennzeichnet sein." ] ] ] ] element Person { PicaPlusImportMappingElements } PicaPlusImportDocStruct = [ s:pattern [ s:rule [ context = "DocStruct[parent::PicaPlus]" s:assert [ test = "/Preferences/DocStrctType/Name = current()/Name" "Der Strukturtyp '" s:value-of [ select = "Name" ] "' muss definiert werden." ] ] ] ] element DocStruct { PicaPlusImportMappingElements & element picaContent { text } } PicaPlusImportMappingElements = element picaMainTag { text } & element picaSubTag { attribute type { "firstname" | "lastname" | "identifier" | "expansion" }? & text }* & element valueCondition { text }? & element valueRegExp { text }? & Name MetsModsSerialization = element METS { MetsModsSerializationClass? & MetsModsSerializationNamespace* & MetsModsSerializationAnchorQuery? & MetsModsSerializationAnchorIdentifierMetadataType? & MetsModsSerializationValueRegExp? & MetsModsSerializationMetadataMapping* & MetsModsSerializationDocStructMapping+ } MetsModsSerializationClass = element class { "ugh.fileformats.mets.MetsModsImportExport" } MetsModsSerializationNamespace = element NamespaceDefinition { element URI { xsd:anyURI }, element prefix { xsd:NMTOKEN } } MetsModsSerializationAnchorQuery = element XPathAnchorQuery { text } MetsModsSerializationAnchorIdentifierMetadataType = [ s:pattern [ s:rule [ context = "AnchorIdentifierMetadataType[parent::METS]" s:assert [ test = "/Preferences/MetadataType/Name = ." "Das Metadatum '" s:value-of [ select = "." ] "' muss definiert werden." ] ] ] ] element AnchorIdentifierMetadataType { xsd:NMTOKEN } MetsModsSerializationValueRegExp = element ValueRegExp { text } MetsModsSerializationMetadataMapping = element Metadata { MetsModsSerializationInternalName & MetsModsSerializationPersonIndicator? & element WriteXPath { WriteXPathContent } & element FirstnameXPath { WriteXPathContent } & element DisplayNameXPath { WriteXPathContent } & element IdentifierXPath { WriteXPathContent } & element ValueRegExp { text } & element ValueCondition { text } } WriteXPathContent = text MetsModsSerializationPersonIndicator = element MODSName { "Person" } MetsModsSerializationInternalName = [ s:pattern [ s:rule [ context = "InternalName[ancestor::Formats/METS]" s:assert [ test = "/Preferences/DocStrctType/Name = ." "Der Strukturtyp '" s:value-of [ select = "." ] "' muss definiert werden." ] ] ] ] element InternalName { xsd:NMTOKEN } MetsModsSerializationDocStructMapping = element DocStruct { MetsModsSerializationInternalName & element MetsType { xsd:NMTOKEN } }