Home  |  Requirements  |  Data  |  Interface  |  Lessons  |  History

Vincent 4.0: Data

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
numbernametype

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
1uniqueIDstring
1courseIDstring
1taglinestring
1maxsizestring
0 ...sections[ SECTION ]

A SECTION is
1sectionIDnumber
1expirationTIMESTAMP
0 ...users[ USER::uniqueID ]
0 ...assignments[ ASSIGNMENT::uniqueID ]
0 ...downloads[ DOWNLOAD::uniqueID ]

A DOWNLOAD is
1uniqueIDstring
1fileFILE::uniqueID
1 ...accessWindows[ ACCESSWINDOW ]
0 ...allowedUsers[ USER::uniqueID | ACCESSCLASS ]

An ACCESSWINDOW is
1startDateTIMESTAMP
1endDateTIMESTAMP

An ASSIGNMENT is
1uniqueIDstring
1numFilesnumber
1dueDateTIMESTAMP
1descriptionstring
1messagestring
1 ...allowedName[ string ]
1postProcessorPROCESSOR::uniqueID
1submissionListSUBMISSIONLIST::uniqueID

A PROCESSOR is
1uniqueIDstring
1fileFILE::uniqueID

A SUBMISSIONLIST is
1uniqueIDstring
1listLengthnumber
1parentASSIGNMENT::uniqueID
0 ...submissions[ SUBMISSION::uniqueID ]

A SUBMISSION is
1uniqueIDnumber
1timestampTIMESTAMP
1userUSER::uniqueID
1submittedNamestring
1grandparentASSIGNMENT::uniqueID
1fileFILE::uniqueID
0 ...flags[ string ]

A USER is
1uniqueIDstring
1usernamestring
1firstnamestring
1lastnamestring
1 ...sections[ USECTION ]

A USECTION is
1sectionSECTION::sectionID
0 ...statuss[ ACCESSCLASS ]
1enrolled?boolean

A URI is
1systemNamestring
1locationpath

A TIMESTAMP is
1yearnumber
1monthnumber
1daynumber
1hournumber
1minutenumber
1secondnumber

A FILE is
1uniqueIDstring
1namestring
1locationURI
1ownerUSER::uniqueID
1uploadTimeTIMESTAMP


Content by Matt Jadud, mjadud at cs dot indiana dot edu