;
; ELEMENT-ORDERING.INI
;
; This file defines the order of metadata keys on a per-product-type basis
; Elements not explicitly mentioned in this file will be displayed following
; all of the explicitly ordered elements.
;
; The global section [*] can be used to define a default ordering to apply.
; Note that, if a product type declaration is found, its ordering overrides
; the default ordering in [*].
;
; There are two ordered arrays for each product type:
;    pt.element.ordering:   specifies product-type metadata order
;    p.element.ordering:    specifies product metadata order
;

[*]
;product type metadata element ordering (global)
; the '.first' array indicates those elements which should be shown BEFORE
; all other metadata elements:
pt.element.ordering.first[] = 


; the '.last' array indicates those elements that should be shown AFTER
; all other metadata elements. The last element in this array will be
; shown last.
pt.element.ordering.last[] = 


; product metadata element ordering (global)
; the '.first' array indicates those elements that should be shown BEFORE
; all other metadata elements:
p.element.ordering.first[] =
; the '.last' array indicates those elements that should be shown AFTER
; all other metadata elements. The last element in this array will be
; shown last.
p.element.ordering.last[] =

; It is possible to override the global settings on a per-productType basis
; simply by defining a productType header and re-defining the pt.element.ordering.*
; arrays for that productType. ProductType-specific settings do not inherit from 
;the global settings.
;
;[urn:oodt:GenericFile]
;pt.element.ordering.first[] =
;pt.element.ordering.last[] = 
;p.element.ordering.first[] =
;p.element.ordering.last[] =
