System Design: BibEdit - MultiEdit
1. Introduction
The purpose of the MultiEdit record editing interface (= a special
BibEdit mode) is to allow cataloguers to easily edit more than one
record in one go.
The MultiEdit should allow cataloguer to easily look up various
records in the system in order to find record sets upon which to
operate, and then to allow some easy replacement procedures on these
records in one go, e.g. a substring substitution of some field value
in some field tags, or a regexp substitution, etc.
2. Use cases
Use case 1: while editing some record R, the cataloguer notices that
the field F with the value FV is misspelled. The cataloguer estimates
that there may be more errors of this kind, so she launches MultiEdit
editing mode, does search for FV, and instructs the system to change
FV into FW in selected records.
Use case 2: for all records written by John Doe from 1972 to 1977,
output the collaboration field, and if it does not contain Bar
collaboration, add it.
3. Workflow
A cataloguer - an interface - a backend office.
4. Mock-up screenshots
A split search area and an action command area may be good to have.
The display area will allow to see and select only some field values
to display, or the standard HTML Brief display, or anything the
cataloguer needs.
Here is a very rudimentary ASCII art mock-up of how the interface
could look like.
S E A R C H A R E A : A C T I O N A R E A :
Search for: [100__a:Ellis____]
Output tags: [100,710___] Change in tag: [710__a]
change from: [Fuu]
[ SEARCH ] change to: [Foo]
substitution mode: [substring]
D I S P L A Y A R E A :
[ PERFORM CHANGE ]
[x] 1. Ellis, J - Fuu Collaboration in (*) all ( ) selected records
[ ] 2. Ellis, J - Foo Collaboration
[ ] 3. Ellis, J - Foo Collaboration
[x] 3. Ellis, John - Baz Collaboration
The action area might need to propose operations like: modification of
a field, addition of a new field, or deletion of existing field.
5. Architecture
Standard multi-tier model, with UI in front, the business logic, and
CLI core functionality in the back.
The UI interface may need some AJAX-y features to provide efficient
operation.
MultiEdit could borrow heavily from other modules, such as search
engine, the field exporter, the bibcheck checker and substitutor.
6. API
It may be nice to invent some CLI API doing the core multi-editing
business, like:
$ bibedit --multiedit --search-pattern author:Ellis \
--substitute-tag 710__a --substitution-mode substring \
--change-value-from Fuu --change-value-to Foo
This CLI could be called from the UI to do the job.