(This is independent of Metadata for All, which is needed anyway.)

I want to attach to Collections lists of operational data, with
multiple values per Collection.  I immediately thought of overloading
"metadata" for this purpose, given that we want to extend metadata
operations to all DSpaceObject subclasses.  But (a) these lists don't
have language, authority, confidence, or a structured namespace, and
(b) they should never be exposed outside of the DSpace administrative
UI.  This seemed like an abuse of metadata.  So I came up with
another type of information about DSOs: "attributes".

An Attribute has a name, which is a simple string (but you may
pretend to group things "like.this").  It has an unordered collection
of String values.  It's stored in the database like this:

  CREATE TABLE Attributes
  (
    attribute_id INTEGER PRIMARY KEY,
    object_type  INTEGER,
    object_id    INTEGER,
    name         VARCHAR(64),
    value        VARCHAR
  );
  CREATE INDEX attributes_idx ON Attributes(object_type, object_id, name);

I guess the values *could* be ordered, if someone can think of a good
reason.  Just add another INTEGER field.

The immediate purpose of inventing Attributes is to avoid spawning yet
another configuration horror:

  identifier.classes.COLLECTION_ID.1 = foo
  identifier.classes.COLLECTION_ID.2 = bar
  ...

Instead there would be new administrative UI to manage the
"identifier.classes" Attribute.  It's sort of the entering wedge of
moving configuration into the database.

Attributes do not appear on object detail pages and are not exposed to
harvesters and such.  They hold local administrative information about
their objects.  They should be exportable for backup but not for
dissemination.

Thoughts?  Am I overcomplicating things?  Or is this *too* simple?

Alternative: a way to mark a metadata namespace as "not for export".
It's still rather severe overloading, but at least we'd have a simple
way to keep values from leaking out of the DSpace instance or being
shown to users.  We probably need this anyway.

Another alternative:  configure this kind of thing using Spring.  But
we want to move away from configuration *files*, and this would often
require introducing a new bean which has no behavior and no obvious
place to be injected -- just a data structure to be stuck into
something handy.  If a design is ugly, it's probably wrong.

Another alternative:  create a new DB table each time we need a new type
of list.  This just seems likely to lead to a clutter of tiny tables,
all alike.

-- 
Mark H. Wood, Lead System Programmer   mw...@iupui.edu
Machines should not be friendly.  Machines should be obedient.

Attachment: signature.asc
Description: Digital signature

------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Dspace-devel mailing list
Dspace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dspace-devel

Reply via email to