Here is the complete dtd. I'm only using one dtd for this project and this is it.
<!-- sco_csf(5).dtd -->
<!--*** course: Root level of Course Structure representation-->
<!ELEMENT Course (globalProperties?,block,objectives?) >
<!--*** globalProperties: Properties of the course as whole-->
<!ELEMENT globalProperties (externalMetadata+,curricularTaxonomy?,extensions*) >
<!--*** block: A grouping of related structural elements.
Blocks contain assignable units or other blocks.
Blocks always contain other course elements.
This holds an unique (to this course) ID indentifier for a particular block
ID's are generated by the application (e.g., an LMS) that creates a CSF XML file
(other elements may refer to this unique ID)-->
<!ELEMENT block ((externalMetadata*,objectiveRef*,identification,prerequisites?,
completionReq?,extensions*,(au* | block*)+) | blockAlias) >
<!ATTLIST block
id ID #REQUIRED >
<!--*** objectives: Root level of objectives tree;
Statements of skills, knowledge, and attitudes to be acquired by the student.-->
<!ELEMENT objectives (objective+) >
<!--*** externalMetadata: The value of this element refers or points to the location
of the metadata describing this course.-->
<!ELEMENT externalMetadata (source,model,location) >
<!--*** curicularTaxonomy: Organizational methodology used to construct the course-->
<!ELEMENT curricularTaxonomy (source?,model,location?) >
<!ATTLIST curricularTaxonomy
xml:lang NMTOKEN #IMPLIED >
<!--*** extensions: defines extensions to course element definitions and their source-->
<!ELEMENT extensions (source?,model,location?,property+) >
<!--*** objectiveRef: Reference to a particular objective in the objective hierarchy
-->
<!ELEMENT objectiveRef EMPTY >
<!ATTLIST objectiveRef
relation CDATA #IMPLIED
targetIDs IDREFS #IMPLIED >
<!--*** indetification: Identifies course context specific information-->
<!ELEMENT identification (title,description?,labels?) >
<!--*** prerequisites: Expression indicating what a student must accomplish before
beginning this course element.
Course elements that a student must complete before beginning ablock or
assignable unit. It uses a "script" that defines the logical
rules to be applied. The script type must be defined.
e.g., <prerequisites type="aicc_script"> <![CDATA[B1&B2&A1]]> </prerequisites>
-->
<!ELEMENT prerequisites (#PCDATA) >
<!ATTLIST prerequisites
type CDATA #IMPLIED >
<!--*** completionReq: Course elements that a student must complete before considering
a given structure element complete. It uses a "script" that defines the logical
rules to be applied. The script type must be defined.
e.g., <completion type="aicc_script"> <![CDATA[B1&B2&A1]]> </completion>-->
<!ELEMENT completionReq (#PCDATA) >
<!ATTLIST completionReq
type CDATA #IMPLIED >
<!--*** au: An AU is the smallest element of instruction or testing to which a student may be
routed by a LMS. It refers to "content" launched by the LMS system.
This holds an unique (to this course) ID indentifier for a particular au
ID's are generated by the application (e.g., an LMS) that creates a CSF XML file
(other elements may refer to this unique ID)-->
<!ELEMENT au ((externalMetadata*,objectiveRef*,identification,prerequisites?,
completionReq?,timeLimit?,launch?,masteryScore?,extensions*) | auAlias) >
<!ATTLIST au
id ID #REQUIRED >
<!--*** blockAlias: Reference to a previously defined block
(permits one block to be used more than once within a course)-->
<!ELEMENT blockAlias EMPTY >
<!ATTLIST blockAlias
targetID ID #IMPLIED >
<!--*** objective: A statement of skills, knowledge, and attitudes to be acquired by the student.
This holds an unique (to this course) ID indentifier for a particular objective
ID's are generated by the application (e.g., an LMS) that creates a CSF XML file
(other elements may refer to this unique ID)-->
<!ELEMENT objective ((externalMetadata*,assignmentRef*,identification,
prerequisites?,completionReq?,extensions*,objective*) |
objectiveAlias) >
<!ATTLIST objective
id ID #REQUIRED >
<!--*** source: Authority or source of data model w/reference to a spec. if available
e.g., "AICC AGRO10 v3.4", or ARMY TRADOC spec123, or "IMSBP v4.2"-->
<!ELEMENT source (#PCDATA) >
<!ATTLIST source
xml:lang NMTOKEN #IMPLIED
type CDATA #IMPLIED >
<!--*** model: Name of a specific data model used by this course
e.g., "cmi", or "ARMY314", or "IMS v1.0"-->
<!ELEMENT model (#PCDATA) >
<!ATTLIST model
type CDATA #IMPLIED
xml:lang NMTOKEN #IMPLIED >
<!--*** location: URI Location-->
<!ELEMENT location (#PCDATA) >
<!ATTLIST location
type CDATA #IMPLIED >
<!--*** property: Name/value pair extension for this course-->
<!ELEMENT property (name,value) >
<!--*** title: Context specific title.
May be used by an LMS system in menus, screens, etc.-->
<!ELEMENT title (#PCDATA) >
<!ATTLIST title
xml:lang NMTOKEN #IMPLIED
type CDATA #IMPLIED >
<!--*** description: Context specific textual information about the course element.
Itmay contain the purpose, scope, or summary. (Defined by course author)-->
<!ELEMENT description (#PCDATA) >
<!ATTLIST description
xml:lang NMTOKEN #IMPLIED
type CDATA #IMPLIED >
<!--*** labels: Context specific local label (e.g., unit, charpter, learning step)-->
<!ELEMENT labels (curricular?,developer?) >
<!--*** Time values or actions associated with this au in this context-->
<!ELEMENT timeLimit (maxTimeAllowed?,timeLimitAction?) >
<!--***launch: Information needed by an LMS to launch an au-->
<!ELEMENT launch (location) >
<!--*** score: Values to be used in this course context for tracking score within an au-->
<!--<!ELEMENT score (minimum?,maximum?,mastery?) > -->
<!--*** auAlias: Reference to a previously defined au
(permits one au to be used more than once within a course-->
<!ELEMENT auAlias EMPTY >
<!ATTLIST auAlias
targetID ID #IMPLIED >
<!--*** assignmentRef: Reference to a particular element in the assignment hierarchy
e.g., <assignmentRef relation="satisfied by"targetIDs="B1,A23"/>-->
<!ELEMENT assignmentRef EMPTY >
<!ATTLIST assignmentRef
relation CDATA #IMPLIED
targetIDs IDREFS #IMPLIED >
<!--*** objectiveAlias: Reference to a previously defined objective
(permits one objective to be used more than once within a course)
-->
<!ELEMENT objectiveAlias EMPTY >
<!ATTLIST objectiveAlias
targetID IDREF #IMPLIED >
<!--*** name: Descriptive name of a course property extension
e.g., "difficulty" (as in degree of)-->
<!ELEMENT name (#PCDATA) >
<!ATTLIST name
xml:lang NMTOKEN #IMPLIED
type CDATA #IMPLIED >
<!--*** value: Value associated with the named extension
e.g., "easy"-->
<!ELEMENT value (#PCDATA) >
<!ATTLIST value
xml:lang NMTOKEN #IMPLIED
type CDATA #IMPLIED >
<!--*** curricular label: Local name of course element
e.g., "UNIT", "MODULE", "LEARNING STEP"-->
<!ELEMENT curricular (#PCDATA) >
<!ATTLIST curricular
xml:lang NMTOKEN #IMPLIED
type CDATA #IMPLIED >
<!--*** developer label: an organization-specific identifier (e.g., D509)-->
<!ELEMENT developer (#PCDATA) >
<!ATTLIST developer
xml:lang NMTOKEN #IMPLIED
type CDATA #IMPLIED >
<!--*** maxTimeAllowed: The amount of time the student is allowed
to have in the current attempt on the lesson.-->
<!ELEMENT maxTimeAllowed (#PCDATA) >
<!ATTLIST maxTimeAllowed
type CDATA #IMPLIED >
<!--*** timeLimitAction: What the lesson is to do when the max time allowed is exceeded.
AICC examples: "exit", "continue", "message", "continue".-->
<!ELEMENT timeLimitAction (#PCDATA) >
<!ATTLIST timeLimitAction
type CDATA #IMPLIED
xml:lang NMTOKEN #IMPLIED >
<!--*** parameterString: String of characters needed to successfully launch a content au-->
<!ELEMENT parameterString (#PCDATA) >
<!ATTLIST parameterString
type CDATA #IMPLIED >
<!--*** dataFromLMS: unconstrained (undefined) intialization data expected
by content when it is launched by the LMS.-->
<!ELEMENT dataFromLMS (#PCDATA) >
<!ATTLIST dataFromLMS
type CDATA #IMPLIED >
<!--*** minimum score: Tells LMS how to compute score returned by LMS;
the minimum score that the student could have achieved.-->
<!--<!ELEMENT minimum (#PCDATA) >
<!ATTLIST minimum
type CDATA #IMPLIED > -->
<!--*** maximum score: Tells LMS how to compute score returned to LMS;
largest raw score that can be reported by this au.-->
<!--<!ELEMENT maximum (#PCDATA) >
<!ATTLIST maximum
type CDATA #IMPLIED > -->
<!--*** mastery score: Tells LMS how to compute score returned by LMS; defines
the passing score for this au in this context-->
<!--<!ELEMENT mastery (#PCDATA) >
<!ATTLIST mastery
type CDATA #IMPLIED > -->
<!--*** mastery score: Tells LMS how to compute score returned by LMS; defines
the passing score for this au in this context-->
<!ELEMENT masteryScore (#PCDATA)>
<!ATTLIST masteryScore type CDATA #IMPLIED>