 <!ELEMENT SystemDefinition (systemModel?, build?)>
 <!ATTLIST SystemDefinition
  name CDATA #REQUIRED
  schema CDATA #REQUIRED>
 <!ELEMENT systemModel (layer+)>
 <!ELEMENT layer (logicalset* | module*)*>
 <!ATTLIST layer
  name CDATA #REQUIRED
  levels CDATA #IMPLIED
  span CDATA #IMPLIED>
 <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
 <!ATTLIST logicalset name CDATA #REQUIRED>
 <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
 <!ATTLIST logicalsubset name CDATA #REQUIRED>
 <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
 <!ATTLIST module
  name CDATA #REQUIRED
  level CDATA #IMPLIED>
 <!ELEMENT component (unit* | package* | prebuilt*)*>
 <!ATTLIST component name CDATA #REQUIRED>
 <!ELEMENT unit EMPTY>
 <!ATTLIST unit
  unitID ID #REQUIRED
  name CDATA #REQUIRED
  mrp CDATA #REQUIRED
  filter CDATA #IMPLIED
  bldFile CDATA #REQUIRED
  priority CDATA #IMPLIED
  contract CDATA #IMPLIED>
 <!ELEMENT package EMPTY>
 <!ATTLIST package
  name CDATA #REQUIRED
  mrp CDATA #REQUIRED
  filter CDATA #IMPLIED
  contract CDATA #IMPLIED>
 <!ELEMENT prebuilt EMPTY>
 <!ATTLIST prebuilt
  name CDATA #REQUIRED
  version CDATA #REQUIRED
  late (Y|N) #IMPLIED
  filter CDATA #IMPLIED
  contract CDATA #IMPLIED>
 <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
 <!ELEMENT unitList (unitRef+)>
 <!ATTLIST unitList
  name ID #REQUIRED
  description CDATA #REQUIRED>
 <!ELEMENT unitRef EMPTY>
 <!ATTLIST unitRef unit IDREF #REQUIRED>
 <!ELEMENT targetList EMPTY>
 <!ATTLIST targetList
  name ID #REQUIRED
  description CDATA #REQUIRED
  target IDREFS #REQUIRED>
 <!ELEMENT target EMPTY>
 <!ATTLIST target
  name ID #REQUIRED
  abldTarget CDATA #REQUIRED
  description CDATA #REQUIRED>
 <!ELEMENT option EMPTY>
 <!ATTLIST option
  name ID #REQUIRED
  abldOption CDATA #REQUIRED
  description CDATA #REQUIRED
  enable (Y | N | y | n) #REQUIRED>
 <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
 <!ATTLIST configuration
  name ID #REQUIRED
  description CDATA #REQUIRED
  filter CDATA #REQUIRED>
 <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
 <!ELEMENT unitListRef EMPTY>
 <!ATTLIST unitListRef unitList IDREF #REQUIRED>
 <!ELEMENT layerRef EMPTY>
 <!ATTLIST layerRef layerName CDATA #REQUIRED>
 <!ELEMENT buildLayer EMPTY>
 <!ATTLIST buildLayer
  command CDATA #REQUIRED
  targetList IDREFS #IMPLIED
  unitParallel (Y | N | y | n) #REQUIRED
  targetParallel (Y | N | y | n) #IMPLIED>
 <!ELEMENT specialInstructions EMPTY>
 <!ATTLIST specialInstructions
  name CDATA #REQUIRED
  cwd CDATA #REQUIRED
  command CDATA #REQUIRED>  
