Constraints
Vincent must be implemented in Perl, and Vincent's DB must be the filesystem. That is, shell utilities must be able to be used to make changes to any and all aspects of Vincent's data store.
This being the case, XML in the filesystem has been chosen as the representation for data in Vincent 4.
Legend
The data model is arranged thusly:
| A Record is |
| number | name | type |
The record is declared, followed by the elements of that record. ``Number'' may be followed by ``...'', such as ``1 ...'', which is read as ``one or more.'' This is reflected doubly in the type field; '[' and ']' are used to indicate a type that can occur multiply (a list). The ``type'' field is either plain-text (indicating a basic type), bold, indicating one of the defined records in this document, or italicized, indicating a reference to the indicated type or record element. This may, for example, be implemented with XPointer, a proposed XML linking mechanism.
Data Model
| A COURSE is |
| 1 | uniqueID | string |
| 1 | courseID | string |
| 1 | tagline | string |
| 1 | maxsize | string |
| 0 ... | sections | [ SECTION ] |
| A SECTION is |
| 1 | sectionID | number |
| 1 | expiration | TIMESTAMP |
| 0 ... | users | [ USER::uniqueID ] |
| 0 ... | assignments | [ ASSIGNMENT::uniqueID ] |
| 0 ... | downloads | [ DOWNLOAD::uniqueID ] |
| A DOWNLOAD is |
| 1 | uniqueID | string |
| 1 | file | FILE::uniqueID |
| 1 ... | accessWindows | [ ACCESSWINDOW ] |
| 0 ... | allowedUsers | [ USER::uniqueID | ACCESSCLASS ] |
| An ACCESSWINDOW is |
| 1 | startDate | TIMESTAMP |
| 1 | endDate | TIMESTAMP |
| An ASSIGNMENT is |
| 1 | uniqueID | string |
| 1 | numFiles | number |
| 1 | dueDate | TIMESTAMP |
| 1 | description | string |
| 1 | message | string |
| 1 ... | allowedName | [ string ] |
| 1 | postProcessor | PROCESSOR::uniqueID |
| 1 | submissionList | SUBMISSIONLIST::uniqueID |
| A PROCESSOR is |
| 1 | uniqueID | string |
| 1 | file | FILE::uniqueID |
| A SUBMISSIONLIST is |
| 1 | uniqueID | string |
| 1 | listLength | number |
| 1 | parent | ASSIGNMENT::uniqueID |
| 0 ... | submissions | [ SUBMISSION::uniqueID ] |
| A SUBMISSION is |
| 1 | uniqueID | number |
| 1 | timestamp | TIMESTAMP |
| 1 | user | USER::uniqueID |
| 1 | submittedName | string |
| 1 | grandparent | ASSIGNMENT::uniqueID |
| 1 | file | FILE::uniqueID |
| 0 ... | flags | [ string ] |
| A USER is |
| 1 | uniqueID | string |
| 1 | username | string |
| 1 | firstname | string |
| 1 | lastname | string |
| 1 ... | sections | [ USECTION ] |
| A USECTION is |
| 1 | section | SECTION::sectionID |
| 0 ... | statuss | [ ACCESSCLASS ] |
| 1 | enrolled? | boolean |
| A URI is |
| 1 | systemName | string |
| 1 | location | path |
| A TIMESTAMP is |
| 1 | year | number |
| 1 | month | number |
| 1 | day | number |
| 1 | hour | number |
| 1 | minute | number |
| 1 | second | number |
| A FILE is |
| 1 | uniqueID | string |
| 1 | name | string |
| 1 | location | URI |
| 1 | owner | USER::uniqueID |
| 1 | uploadTime | TIMESTAMP |
|