<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:documentation xml:lang="en">
Log file schema for SEng 462 at the University of Victoria.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="log" type="LogType"/>
<!-- The log file created by the students consists of user commands, quote server
hits, account changes, system events, error messages and debug messages -->
<xsd:complexType name="LogType">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="userCommand" type="UserCommandType"/>
<xsd:element name="quoteServer" type="QuoteServerType"/>
<xsd:element name="accountTransaction" type="AccountTransactionType"/>
<xsd:element name="systemEvent" type="SystemEventType"/>
<xsd:element name="errorEvent" type="ErrorEventType"/>
<xsd:element name="debugEvent" type="DebugType"/>
</xsd:choice>
</xsd:complexType>
<!-- User commands come from the user command files or from manual entries in
the students' web forms -->
<xsd:complexType name="UserCommandType">
<xsd:all>
<xsd:element name="timestamp" type="unixTimeLimits"/>
<xsd:element name="server" type="xsd:string"/>
<xsd:element name="transactionNum" type="xsd:positiveInteger"/>
<xsd:element name="command" type="commandType"/>
<xsd:element name="username" type="xsd:string" minOccurs="0"/>
<xsd:element name="stockSymbol" type="stockSymbolType" minOccurs="0"/>
<xsd:element name="filename" type="xsd:string" minOccurs="0"/>
<xsd:element name="funds" type="xsd:decimal" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
<!-- Every hit to the quote server requires a log entry with the results. The
price, symbol, username, timestamp and cryptokey are as returned by the quote server -->
<xsd:complexType name="QuoteServerType">
<xsd:all>
<xsd:element name="timestamp" type="unixTimeLimits"/>
<xsd:element name="server" type="xsd:string"/>
<xsd:element name="transactionNum" type="xsd:positiveInteger"/>
<xsd:element name="price" type="xsd:decimal"/>
<xsd:element name="stockSymbol" type="stockSymbolType"/>
<xsd:element name="username" type="xsd:string"/>
<xsd:element name="quoteServerTime" type="xsd:integer"/>
<xsd:element name="cryptokey" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
<!-- Any time a user's account is touched, an account message is printed.
Appropriate actions are "add" or "remove". -->
<xsd:complexType name="AccountTransactionType">
<xsd:all>
<xsd:element name="timestamp" type="unixTimeLimits"/>
<xsd:element name="server" type="xsd:string"/>
<xsd:element name="transactionNum" type="xsd:positiveInteger"/>
<xsd:element name="action" type="xsd:string"/>
<xsd:element name="username" type="xsd:string"/>
<xsd:element name="funds" type="xsd:decimal"/>
</xsd:all>
</xsd:complexType>
<!-- System events can be current user commands, interserver communications,
or the execution of previously set triggers -->
<xsd:complexType name="SystemEventType">
<xsd:all>
<xsd:element name="timestamp" type="unixTimeLimits"/>
<xsd:element name="server" type="xsd:string"/>
<xsd:element name="transactionNum" type="xsd:positiveInteger"/>
<xsd:element name="command" type="commandType"/>
<xsd:element name="username" type="xsd:string" minOccurs="0"/>
<xsd:element name="stockSymbol" type="stockSymbolType" minOccurs="0"/>
<xsd:element name="filename" type="xsd:string" minOccurs="0"/>
<xsd:element name="funds" type="xsd:decimal" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
<!-- Error messages contain all the information of user commands, in
addition to an optional error message -->
<xsd:complexType name="ErrorEventType">
<xsd:all>
<xsd:element name="timestamp" type="unixTimeLimits"/>
<xsd:element name="server" type="xsd:string"/>
<xsd:element name="transactionNum" type="xsd:positiveInteger"/>
<xsd:element name="command" type="commandType"/>
<xsd:element name="username" type="xsd:string" minOccurs="0"/>
<xsd:element name="stockSymbol" type="stockSymbolType" minOccurs="0"/>
<xsd:element name="filename" type="xsd:string" minOccurs="0"/>
<xsd:element name="funds" type="xsd:decimal" minOccurs="0"/>
<xsd:element name="errorMessage" type="xsd:string" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
<!-- Debugging messages contain all the information of user commands, in
addition to an optional debug message -->
<xsd:complexType name="DebugType">
<xsd:all>
<xsd:element name="timestamp" type="unixTimeLimits"/>
<xsd:element name="server" type="xsd:string"/>
<xsd:element name="transactionNum" type="xsd:positiveInteger"/>
<xsd:element name="command" type="commandType"/>
<xsd:element name="username" type="xsd:string" minOccurs="0"/>
<xsd:element name="stockSymbol" type="stockSymbolType" minOccurs="0"/>
<xsd:element name="filename" type="xsd:string" minOccurs="0"/>
<xsd:element name="funds" type="xsd:decimal" minOccurs="0"/>
<xsd:element name="debugMessage" type="xsd:string" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
<!-- All Unix timestamps provided must be within the current semester -->
<xsd:simpleType name="unixTimeLimits">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="1609459200000"/> <!-- Jan 1, 2021-->
<xsd:maxInclusive value="1619827200000"/> <!-- May 1, 2021 -->
</xsd:restriction>
</xsd:simpleType>
<!-- Stock symbols are always three or fewer letters long -->
<xsd:simpleType name="stockSymbolType">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="3"/>
</xsd:restriction>
</xsd:simpleType>
<!-- Enumeration of the very specific commands accepted in the system -->
<xsd:simpleType name="commandType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="ADD"/>
<xsd:enumeration value="QUOTE"/>
<xsd:enumeration value="BUY"/>
<xsd:enumeration value="COMMIT_BUY"/>
<xsd:enumeration value="CANCEL_BUY"/>
<xsd:enumeration value="SELL"/>
<xsd:enumeration value="COMMIT_SELL"/>
<xsd:enumeration value="CANCEL_SELL"/>
<xsd:enumeration value="SET_BUY_AMOUNT"/>
<xsd:enumeration value="CANCEL_SET_BUY"/>
<xsd:enumeration value="SET_BUY_TRIGGER"/>
<xsd:enumeration value="SET_SELL_AMOUNT"/>
<xsd:enumeration value="SET_SELL_TRIGGER"/>
<xsd:enumeration value="CANCEL_SET_SELL"/>
<xsd:enumeration value="DUMPLOG"/>
<xsd:enumeration value="DISPLAY_SUMMARY"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>