Dtd for MrProject
<!--
Copyright (C) 2001/2002/2003 Karsten Reincke <karsten.reincke@fodina.de>
This file mrproject.dtd describes howto build a mrproject-dabase-xml-file
This file is part of free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
-->
<!--
Some general remarks:
(1) Very often mrproject uses attributes 'id'. But as values of these
attributes mrproject inserts integeres like id="1" instead of strings
starting with a character. Therefore these attribute can't be specified
as ID and they can't be denoted by IDREF-attributes.
For solving that problem I've specified id-attributes as CDATA too.
-->
<!--
(I.A) nearly each mrproject-xml-database-file consists of seven sections:
(a) one or more lists of properties (which itself contains each single property)
(b) a list of phase-names (by which one can describe the state of the project)
(c) a list of calendars (by which one defines types of working days)
(d) a list of tasks
(e) a list of recource-groups
(f) a list of resources (persons)
(g) a list of allocations (= assignments between tasks and recources)
...
-->
<!ELEMENT project (properties*, phases?, calendars?, tasks, resource-groups, resources, allocations)>
<!--
(I.B) ... and each mrproject-xml-database-file has
(a) a specific namespace being denoted by the tag
xmlns="http://mrproject.codefactory.se/format/project/1"
(b) a name denoting the project as whole (the set of tasks) [maybe the empty string]
(c) a name denoting the company which realizes the project [maybe the empty string]
(d) a name denoting the project-leader [maybe the empty string]
(e) a number denoting the ids of one of the phases
(f) the date of the project-start
(nearly noted as ISO 8601 compliant date string closed by a 'Z')
(g) the mrproject-version (for the moment the number 2)
(g) a number denoting the id of the selected calendar
-->
<!ATTLIST project name CDATA #REQUIRED>
<!ATTLIST project company CDATA #REQUIRED>
<!ATTLIST project manager CDATA #REQUIRED>
<!ATTLIST project phase CDATA #IMPLIED>
<!ATTLIST project project-start CDATA #IMPLIED> <!-- YYYYMMDDTHHmmssZ -->
<!ATTLIST project mrproject-version CDATA #IMPLIED>
<!ATTLIST project calendar CDATA #IMPLIED>
<!--
(1) each list of properties contains one or more properties
-->
<!ELEMENT properties (property+)>
<!--
(1.A) each property has only some attributes:
(a) a name
(b) a type
(c) an owner
(d) a label
(e) a description
(f) a value
-->
<!ELEMENT property (list-item*)>
<!ATTLIST property name CDATA #REQUIRED>
<!ATTLIST property type CDATA #IMPLIED>
<!ATTLIST property owner CDATA #IMPLIED>
<!ATTLIST property label CDATA #IMPLIED>
<!ATTLIST property description CDATA #IMPLIED>
<!ATTLIST property value CDATA #IMPLIED>
<!--
(1.A) each list-item is an empty unit which contains a value as attribute
-->
<!ELEMENT list-item EMPTY>
<!ATTLIST list-item value CDATA #REQUIRED>
<!--
(2) each list of phases contains none or more single phases ...
-->
<!ELEMENT phases (phase*)>
<!--
and each phase is an empty unit with an attribute 'name'
-->
<!ELEMENT phase EMPTY>
<!ATTLIST phase name CDATA #REQUIRED>
<!--
(3) each calendars describing section contains section of datatypes
followed by a row of calenmdars
-->
<!ELEMENT calendars (day-types?, calendar*)>
<!--
(3.A) each data-type-section contains one or more data-type entries
-->
<!ELEMENT day-types (day-type+)>
<!--
(3.A.a) each single data-type is an empty unit and has the following features:
(a) an id
(b) a name
(c) a description
-->
<!ELEMENT day-type EMPTY>
<!ATTLIST day-type id CDATA #REQUIRED>
<!ATTLIST day-type name CDATA #REQUIRED>
<!ATTLIST day-type description CDATA #REQUIRED>
<!--
(3.B) each calendar contains ...
(a) a description of its default week
(b) a set of overridden day-types
(c) a set of day descriptions
... and is specified by
(d) an id
(b) a name
-->
<!ELEMENT calendar (default-week?, overridden-day-types?, days?)>
<!ATTLIST calendar id CDATA #REQUIRED>
<!ATTLIST calendar name CDATA #REQUIRED>
<!--
(3.B.a) each default-week is an empty unit which for each day of the week
contains a reference into the set of (overidden) daytypes
-->
<!ELEMENT default-week EMPTY>
<!ATTLIST default-week mon CDATA #REQUIRED>
<!ATTLIST default-week tue CDATA #REQUIRED>
<!ATTLIST default-week wed CDATA #REQUIRED>
<!ATTLIST default-week thu CDATA #REQUIRED>
<!ATTLIST default-week fri CDATA #REQUIRED>
<!ATTLIST default-week sat CDATA #REQUIRED>
<!ATTLIST default-week sun CDATA #REQUIRED>
<!--
(3.B.b) each set of overridden-day-types contains
one or more single overridden-day-types which
(3.B.b.I) itself contains one or more intervals which define the working-times.
Each single overridden-day-type is made referable by a specific id
-->
<!ELEMENT overridden-day-types (overridden-day-type*)>
<!ELEMENT overridden-day-type (interval+)>
<!ATTLIST overridden-day-type id CDATA #REQUIRED>
<!--
(3.B.b.II) each interval is an empty unit and defines the start and
end of the interval by using the corresponding attributes
-->
<!ELEMENT interval EMPTY>
<!ATTLIST interval start CDATA #REQUIRED>
<!ATTLIST interval end CDATA #REQUIRED>
<!--
(3.B.c) each set of days contains ...
(3.B.c.I) a row of days which are empty units being defined by
(a) a date attribute
(b) a type attribute
(c) an id attribute
-->
<!ELEMENT days (day*)>
<!ELEMENT day EMPTY>
<!ATTLIST day date CDATA #REQUIRED>
<!ATTLIST day type CDATA #REQUIRED>
<!ATTLIST day id CDATA #REQUIRED>
<!--
(4) each list of tasks consists of none or many tasks
-->
<!ELEMENT tasks (task*)>
<!--
(4.A) each task consists of
(a) none or more constraints,
(b) a list of predecessor and
(c) none or many tasks (implicitely recursive definition)
...
-->
<!ELEMENT task (constraint*,predecessors*,task*)>
<!--
... and each task has
(a) a specific uniq id
(b) a name denoting the task [maybe the empty string]
(c) a startdate denoted by an iso-8601 string of the form YYYYMMDDThhmmss
(d) an endate denoted by an iso-8601 string of the form YYYYMMDDThhmmss
(e) an natural number between 0 and 100 denoting the degree (percent) of being fullfilled
(f) a (describing) note concerning the task [maybe the empty string]
(g) a work string
(h) a note string
(i) a type string
(i) a scheduling string
-->
<!ATTLIST task id CDATA #REQUIRED>
<!ATTLIST task name CDATA #REQUIRED>
<!ATTLIST task start CDATA #REQUIRED>
<!ATTLIST task end CDATA #REQUIRED>
<!ATTLIST task percent-complete CDATA #REQUIRED>
<!ATTLIST task note CDATA #REQUIRED>
<!ATTLIST task work CDATA #IMPLIED>
<!ATTLIST task type CDATA #IMPLIED>
<!ATTLIST task scheduling CDATA #IMPLIED>
<!--
(4.A) each list of constraints consists of none or many constraints
and each constraint has the attributes
(a) type: must-start-on (or .. or must-end-on?)
(b) time: date nearly noted as ISO 8601 compliant string closed by a 'Z'
-->
<!ELEMENT constraint EMPTY>
<!ATTLIST constraint type (must-start-on|must-end-on) #REQUIRED>
<!ATTLIST constraint time CDATA #REQUIRED>
<!--
(4.B) each list of predecessors consists of none or many predecessors
-->
<!ELEMENT predecessors (predecessor*)>
<!--
(4.B.1) each predecessor is an empty entity ...
-->
<!ELEMENT predecessor EMPTY>
<!--
... which has
(a) a specific uniq id (denoting itself)
(b) a predecessor id (denoting another task)
(c) a type described the strings
(I) FS :- Finish to Start
(II) FF :- Finish to Finish
(III) FS :- Start to Start
(IV) SF :- Start to Finish
-->
<!ATTLIST predecessor id CDATA #REQUIRED>
<!ATTLIST predecessor predecessor-id CDATA #REQUIRED>
<!ATTLIST predecessor type (FS|SF|FF|SS) #REQUIRED>
<!ATTLIST predecessor lag CDATA #IMPLIED>
<!--
(5) each list of resource-groups consists of none or many groups
of whose one can be selected as default group
-->
<!ELEMENT resource-groups (group*)>
<!ATTLIST resource-groups default_group CDATA #IMPLIED>
<!--
(5.A) each group is an empty entity ...
-->
<!ELEMENT group EMPTY>
<!--
... which has
(a) a specific uniq id (denoting the group itself)
(b) a name denoting the group as whole
(c) an admin-name denoting the group admin [maybe the empty string]
(d) an admin-phone denoting the phonenumber of the group admin [maybe the empty string]
(e) an admin-email denoting the email-address of the group admin [maybe the empty string]
(f) a note attribute
-->
<!ATTLIST group id CDATA #REQUIRED>
<!ATTLIST group name CDATA #REQUIRED>
<!ATTLIST group admin-name CDATA #REQUIRED>
<!ATTLIST group admin-phone CDATA #REQUIRED>
<!ATTLIST group admin-email CDATA #REQUIRED>
<!ATTLIST group note CDATA #IMPLIED>
<!--
(6) each list of resources consists of none or many resources
-->
<!ELEMENT resources (resource*)>
<!--
(6.A) each resource is an empty entity ...
-->
<!ELEMENT resource (properties?)>
<!--
... which has
(a) a specific uniq id (denoting the group itself)
(b) a name denoting the group as whole
(c) a group id (denoting the resource-group of which the resource is a member)
[ must be a value of the set of id-values of the groups or -1 ]
(d) a type-determiner [ an integer: 1 = work, 2 = material ]
(e) an unit-determiner (in unsigned integer? planned for computing the possible credits?)
(f) an admin-email denoting the email-address of the group admin [maybe the empty string]
(g) a std-rate-float-value
(h) an ovt-rate-float-value
(i) a note attribute
-->
<!ATTLIST resource id CDATA #REQUIRED>
<!ATTLIST resource name CDATA #REQUIRED>
<!ATTLIST resource group CDATA #REQUIRED>
<!ATTLIST resource type (1 | 2) #REQUIRED>
<!ATTLIST resource units CDATA #REQUIRED>
<!ATTLIST resource email CDATA #REQUIRED>
<!ATTLIST resource std-rate CDATA #REQUIRED>
<!ATTLIST resource ovt-rate CDATA #IMPLIED>
<!ATTLIST resource note CDATA #IMPLIED>
<!--
(7) each list of allocations consists of none or many allocations
-->
<!ELEMENT allocations (allocation*)>
<!--
(7.A) each allocation is an empty entity ...
-->
<!ELEMENT allocation EMPTY>
<!--
... which has
(a) a task-id (denoting the intended task)
[ must be a value of the set of all id-values of the tasks ]
(b) a resource-id (denoting the intended resource)
[ must be a value of the set of id-values of the resources ]
-->
<!ATTLIST allocation task-id CDATA #REQUIRED>
<!ATTLIST allocation resource-id CDATA #REQUIRED>
<!ATTLIST allocation units CDATA #IMPLIED>