<!-- baf.dtd  														-->
<!-- This is a revised version of the original DTD for BAF files,  	-->
<!-- distributed by Farzad Pezeshkpour at Televirtual in 2000-12. 	-->
<!-- (BAF == Bones Animation Format)                              	-->
<!-- Revised version by Ralph Elliott, SYS, UEA  2001-07-11       	-->
<!-- mailto:re@sys.uea.ac.uk                                      	-->
<!--                                                                -->
<!-- Further revised by Kevin Parsons 2001-09-11 to add            	-->
<!-- Quaternion elements.                                          	-->
<!-- mailto:kjp@sys.uea.ac.uk                                     	-->

<!ELEMENT  BonesAnimation  (BAHeader, BAFrames) >

<!ELEMENT  BAHeader  EMPTY>
<!ATTLIST  BAHeader
    BAFVersion  CDATA   #REQUIRED
    spaceScale  CDATA   "1"
    timeScale   CDATA   "1"
    blendPointA CDATA   "-1"
    blendPointB CDATA   "-1"
    boneCount   CDATA   #REQUIRED
>

<!ELEMENT  BAFrames (Frame*)>
<!ATTLIST  BAFrames
    frameCount  CDATA   #REQUIRED
>

<!ELEMENT  Frame  ( ( MaskBone | MaskBoneHex | Quaternion | QuaternionHex)+ ) >
<!ATTLIST  Frame
    index       CDATA   #IMPLIED
    timeStamp   CDATA   #REQUIRED
>

<!-- MaskBoneHex provides a low-level representation of data in             -->
<!-- a MaskBone.  The 13 single-precision floating-point values (length,    -->
<!-- followed, in order, by three values [x-, y-, z-] for each of:          -->
<!-- XAxis, YAxis, ZAxis, Position) are represented as a single hexadecimal -->
<!-- string, of length 104.  Within this string each 32-bit floating-point  -->
<!-- value is represented in "big-endian" form, that is, with the           -->
<!-- sign/exponent before the fraction, and from high-order byte of the     -->
<!-- fraction before its lower-order bytes.                                 -->

<!ELEMENT  MaskBoneHex  EMPTY >
<!ATTLIST  MaskBoneHex
    index       CDATA   #IMPLIED
    name        CDATA   #IMPLIED
    hexdata     CDATA   #REQUIRED
>

<!ELEMENT  MaskBone  (XAxis, YAxis, ZAxis, Position) >
<!ATTLIST  MaskBone
    index       CDATA   #IMPLIED
    name        CDATA   #IMPLIED
    length      CDATA   #REQUIRED
>

<!ELEMENT Quaternion ( X, Y, Z, W, Position)>
<!ATTLIST  Quaternion
    index       CDATA   #IMPLIED
    name        CDATA   #IMPLIED
    length      CDATA   #REQUIRED
>

<!ELEMENT QuaternionHex EMPTY>
<!ATTLIST QuaternionHex
    index       CDATA   #IMPLIED
    name        CDATA   #IMPLIED
    hexdata     CDATA   #REQUIRED
>

<!ENTITY % valueAttrib
	"value		CDATA	#REQUIRED"
>
<!ELEMENT X EMPTY>
<!ATTLIST X %valueAttrib;>

<!ELEMENT Y EMPTY>
<!ATTLIST Y %valueAttrib;>

<!ELEMENT Z EMPTY>
<!ATTLIST Z %valueAttrib;>

<!ELEMENT W EMPTY>
<!ATTLIST W %valueAttrib;>

<!ENTITY  %  xyzAttribs
   "x           CDATA   #REQUIRED
    y           CDATA   #REQUIRED
    z           CDATA   #REQUIRED"
>

<!ELEMENT  XAxis  EMPTY >
<!ATTLIST  XAxis  %xyzAttribs; >

<!ELEMENT  YAxis  EMPTY >
<!ATTLIST  YAxis  %xyzAttribs; >

<!ELEMENT  ZAxis  EMPTY >
<!ATTLIST  ZAxis  %xyzAttribs; >

<!ELEMENT  Position  EMPTY >
<!ATTLIST  Position  %xyzAttribs; >

<!-- End of baf.dtd -->
