<!ELEMENT skeleton (bones, bonehierarchy, animations?, animationlinks?) >
<!ATTLIST skeleton
    blendmode   CDATA   "average">
<!ELEMENT bones (bone+) >
<!ELEMENT bone (position, rotation, scale?) >
<!ATTLIST bone
	id		CDATA	#REQUIRED
	name	CDATA	#REQUIRED>
<!ELEMENT position EMPTY>
<!ATTLIST position 
	x		CDATA	#REQUIRED
	y		CDATA	#REQUIRED
	z		CDATA	#REQUIRED>
<!ELEMENT rotation (axis)>
<!ATTLIST rotation
	angle	CDATA	#REQUIRED>
<!ELEMENT axis EMPTY >
<!ATTLIST axis
	x		CDATA	#REQUIRED
	y		CDATA	#REQUIRED
	z		CDATA	#REQUIRED>
<!ELEMENT bonehierarchy (boneparent*)>
<!ELEMENT boneparent EMPTY>
<!-- NB both the below are bone names, not ids -->
<!ATTLIST boneparent 
	bone	CDATA	#REQUIRED
	parent	CDATA 	#REQUIRED>
<!ELEMENT animations (animation+)>
<!ELEMENT animation (baseinfo?, tracks)>
<!ATTLIST animation
	name	CDATA	#REQUIRED
	length	CDATA	#REQUIRED>
<!ELEMENT baseinfo EMPTY>
<!ATTLIST baseinfo
    baseanimationname   CDATA   #REQUIRED
    basekeyframetime    CDATA   #REQUIRED>
<!ELEMENT tracks (track+)>
<!ELEMENT track (keyframes)>
<!ATTLIST track
	bone	CDATA 	#REQUIRED>
<!ELEMENT keyframes (keyframe+)>
<!ELEMENT keyframe (translate?, rotate?, scale?)>
<!ATTLIST keyframe 
	time	CDATA	#REQUIRED>
<!ELEMENT translate EMPTY>
<!ATTLIST translate
	x		CDATA	#REQUIRED
	y		CDATA	#REQUIRED
	z		CDATA	#REQUIRED>
<!ELEMENT rotate (axis)>
<!ATTLIST rotate
	angle	CDATA	#REQUIRED>
<!ELEMENT scale EMPTY>
<!-- UNIFORM SCALE is 'factor', or you can use per-axis (not both) -->
<!ATTLIST scale 
	factor	CDATA	#IMPLIED
	x		CDATA	#IMPLIED
	y		CDATA	#IMPLIED
	z		CDATA	#IMPLIED>
<!ELEMENT animationlinks (animationlink+)>
<!ELEMENT animationlink EMPTY>
<!ATTLIST animationlink
	skeletonName	CDATA	#REQUIRED
	scale			CDATA	"1.0">

