(* This file shows a few important objects of the Test Tool spec, focusing on objects related to question templates. *) object QuestionDB components: Question*; operations: CreateQDB, AddQuestion, DelQuestion, FindQuestion (*,...*); description: (* A QuestionDB is repository of questions. QuestionDB's will typically be stored on computer files, and can be loaded into the system as inputs for the test generation operation, as well as for browsing and question maintenance purposes. *); end QuestionDB; object Question components: (*...*) QuestionText (*...*); description: (* A question is the fundamentally most important object in the system. It records all of the information for an individual test question. *); end Question; object QuestionText components: (RawText or RawGraphic or Slot)*; operations: CreateQText, FillSlots (*,...*); description: (* A question text consists of raw text, raw graphics, and slots, freely interspersed. (In general, the RSL component expression (a or b)* represents an object composed of a's and/or b's, interspersed.) *); end QuestionText; object RawText = string; object RawGraphic components: GraphicDelimiter, GraphicIdentifier; operations: ; description: (* This object is the abstract representation of an embedded graphic. It is comprised of some unique graphic delimiter, followed by an identifier (typically a file name). For example, if "" is the graphic delimiter, and there is a graphic on a file pict.gif, then the graphic is embedded with the phrase " pict.gif". Further details of graphic embedding requirements to be specified later. *); end RawGraphic; object GraphicDelimiter; (*An opaque object, typically some key string.*) object GraphicIdentifier; (*An opaque object, typically a string.*) object Slot components: SlotDelimiter, SlotConstraints; description: (* A blank in a question, to be filled in to generate a concrete question instance. The appearance of one or more Slots in a question renders the question a "question template". *); end Slot; object SlotDelimiter; (*An opaque object, typically some key string.*) object SlotConstraints components: (*To be determined.*); description: (* Constraints on the legal types of filler for a slot. May not be necessary. Some scenarios will help figure out possible need for this. *); end SlotConstraints;