--[[ Sample submission layout config file for a postcard model. This configuration is read according to the content model set in the sidecar metadata for the top-level submission object. Content models, relationships, and other metadata for individual child objects can be inferred from the submission file and folder layout. ]] --[[ Attribute enrichment rules. These rules add one or more attributes to each resource that individually matches a set of conditions. ]] attributes = { -- Rule #1: assign "StillImage" to all folders containing "recto", "verso", -- etc., in their name. -- Matching directives. { match = { -- "path" matches a regular expression against each resource path. -- NOTE: match is always case-insensitive at the moment. path = {"(?:back|front|recto|verso)$"}, -- "fs_type" matches the resource type in the file system: file or -- folder, or both if unspecified. fs_type = "folder", }, -- TODO match existing metadata attributes. -- "add" adds one or more types to the matching objects. -- Add directives are written as key-value pairs: -- `: [, ...]` add = { contentType = {"pas:StillImage"} }, }, -- Rule #2: assign the "recto" tag to folders with specific names. { match = { path = { ".*/.*front", ".*/.*recto", }, fs_type = "folder", }, add = { role = { "Recto" }, }, }, -- Rule #3: assign the "verso" tag to folders with specific names. { match = { path = { ".*/.*back", ".*/.*verso", }, fs_type = "folder" }, add = { role = { "pas:Verso" } }, }, -- Rule #4: assign "ArchivalMaster" role to a TIFF file found under the -- StillImage folder. { match = { path = { "(?:back|front|recto|verso)/.*?\\.tiff?$" }, fs_type = "file", }, add = { contentType = { "StillImageFile" }, role = { "ArchivalMaster" }, }, }, -- Rule #5: assign "DeliveryFile" role to a JPG or JPH file found under the -- StillImage folder. { match = { path = { "(?:back|front|recto|verso)/.*?\\.jp[gh]$" }, fs_type = "file", }, add = { contentType = { "StillImageFile" }, role = { "DeliveryFile" }, } }, --[[ Relationship enrichment rules. These rules establish relationships between pairs of resources that match certain conditions individually and/or in relationship to one another. Directives for matching are similar to attribute enrichment ones and they come in two sets: one for the source (the resource that would be added the relationship), and one for the target (the resource pointed to by the relationship). The relationship is established to all objects that match both sets of conditions. ]] relationships = { { source = { match = { --[[ Attribute matching: this matches resources with specific attributes. It is a multi-valued key-value map, in which values of each key are joined by OR, and multiple keys are joined by AND. For example, the directive below matches resources with an attribute named "role" with a value of "Recto" OR "Verso", AND an attribute named "contentType" with a value of "StillImage" (this example is quite contrived as the rules are redundant together). Attributes added in the attribute enrichment step above are available at this point. ]] attributes = { role = {"pas:Recto", "pas:Verso"}, contentType = {"pas:StillImage"}, }, }, -- "add" adds each of the listed relationships to each of the -- resources matching "source" conditions, pointing to all the -- resources matching "target" conditions for each source. add = { "hasFile" }, }, target = { match = { -- Path matching is done via regex here too, with the -- addition of the `{{src_path}}` variable that gets -- expanded to the source path before parsing the regex. path = {"{{src_path}}/[^/]+$"}, fs_type = "file", }, }, }, }