<?xml version="1.0">
<!DOCTYPE kite [
<!--   Kite design spec DTD v0.1   -->
<!-- Comments to simon@tufty.co.uk -->

<!-- kite element is the root of the document -->
<!ELEMENT kite (sizespec, planform?, surface+, rib+)>
<!ATTLIST kite id ID #REQUIRED name CDATA #REQUIRED author CDATA #REQUIRED private (y|n) "n">

<!-- Specification of kite size  -->
<!-- Given a planform and 2 of either span, chord, AR or area -->
<!-- the other 2 variables are derivable.  Therefore we can   -->
<!-- specify size in 2 floating point numbers                 -->
<!ELEMENT sizespec (fnum,fnum)>
<!-- and tell the app what they represent... -->
<!ATTLIST sizespec type (spanchord|spanar|spanarea|chordar|chordarea|ararea) "spanchord">

<!-- Planform. -->
<!-- Either described by curves for front and rear, or curves for -->
<!-- chord and sweep -->
<!-- all curves defined as %max chord per % span -->
<!ELEMENT planform (curve2,curve2)>
<!ATTLIST planform type (boundary|sweep) "sweep"> 

<!-- Surface -->
<!-- Effectively a 'morph' between 2 curves over a distance -->
<!-- 2 curve / position pairs followed by a curve defining the percentage curve1 to curve2 per distance -->
<!ELEMENT surface (curve2, fnum, curve2, fnum, curve2)>
<!ATTLIST surface id ID #REQUIRED name CDATA #REQUIRED>

<!-- Rib -->
<!-- Given by a span , rotation in the x/y axis and a group of surfaces to cut through -->
<!ELEMENT rib (fnum, point2, surface*)>
<!ATTLIST rib id ID #REQUIRED name CDATA #REQUIRED>

<!-- Curve in 2-space -->
<!-- Defined either by a bunch of points or by an equation -->
<!ELEMENT curve2 (pointcurve2|eqncurve2)>
<!ATTLIST curve2 id ID #REQUIRED name CDATA #REQUIRED plane (XY|XZ|YZ) "XY">

<!-- 2-space curve defined by a bunch of points -->
<!ELEMENT pointcurve2 (point2,point2+)>

<!-- 2-space curve defined by an equation -->
<!ELEMENT eqncurve2 (#PCDATA)>

<!-- Point in 2-space -->
<!ELEMENT point2 (fnum,fnum)>

<!-- Floating point number -->
<!-- better definition needed? -->
<!ELEMENT fnum (#PCDATA)>


]>





