Requirements for the ViPER-API
-
Ease of Use
-
The API must use the three standard types, and verify the instance
validity.
- File type: A descriptor specific to a media source file, there can be only one file descriptor instance per media source file. They can only have static attributes.
- Content type: A descriptor specific to a set of frames in a source file. There can only be one of a given declared type at a time in a source file, and they can only have static attributes.
- Object type: A descriptor for an object present in the video, or abstract idea, that allows dynamic attributes and multiple instances at any time.
- The API should try to keep to uniform naming conventions and keep with the standard Java conventions when possible.
-
The system must maintain the current ease of use of the file format.
- The file format should be human readable.
- The implementation must be about as fast as the existing implementations of a metadata interface in the old (<v4) ViPER-GT and ViPER-PE.
-
The API must use the three standard types, and verify the instance
validity.
- A method to import data in the old format must exist
-
There must be a system for asking queries of a set of viper data.
- Queries must be allowed to be issued by data type, either viper type (Content/object/file), user type (Face, Information) or attribute datatype (lvalue, bbox, etc.).
- Must have method for queries by attribute value, or existance at a frame/on a clip.
- Must support complex queries by structure, e.g. all descriptors related to this descriptor, or all descriptors related to a descriptor related to itself.
-
The api must support sequences of video, clips, and collections
of pages.
- The api must support loading video clips and jpegs.
- The api should support aggregating multiple jpegs into a sequence, or multiple clips into a movie, with a unified timespace.
-
The API must support editing the data.
- The api must support editing the configuration.
- The api must support editing the instances.
- The API must support event listeners for changes in the data.
-
Support for attribute datatypes
- There must be a set of standard included data types, matching the old system's set, as well as a 'Relation', or 'foreign key', attribute.
- There must be a system or method for adding new data types.
- The API must support or enable undo/action history management.
- The api must allow indexing by frame or by time.
-
The api should support relations between descriptors, beyond the simple
datatypes
- The descriptor types should allow heirarchies.
- The heirarchies may allow inheritance of attribute types.
- The API may support transactions.
-
The api should support generated attributes.
- The api should support simple generated attributes, such as implication from lvalues, default values, and implied null values.
- The api should support a scripting language that allows attributes to be calculated, as in a spreadsheet application.
- The api may allow generated descriptor instances.
-
Nonfunctional Requirements
- The API must provide a standard interface to ViPER metadata, in the form of java interfaces. We may decide to expand this to IDL.
- There should be an implementation that allows backing to a SQL database.
- The implementation must include a serializer/deserializer from XML.