<!ENTITY document          "Document Type Definition of the JVX geometry file format.">
<!ENTITY status            "This is a release specification.">
<!ENTITY compatibility     "Full foreward compatibility ensured since version 1.02.000,
                            and with minor changes since version 0.98.">
<!ENTITY author            "Konrad Polthier">
<!ENTITY url               "http://www.javaview.de/rsrc/jvx.dtd">
<!ENTITY history_0.98      "01.05.00, (kp) Attribute for backface drawing of faces added.">
<!ENTITY history_0.99      "21.07.00, (kp) Attribute for number of lists added, display attributes added.">
<!ENTITY history_0.99.001  "09.09.00, (kp) Labels with attributes added.">
<!ENTITY history_0.99.002  "18.09.00, (kp) EndArrow attribute merged with existing arrow attribute of lineSet.">
<!ENTITY history_0.99.003  "21.09.00, (kp) Backface element color added.">
<!ENTITY history_0.99.004  "22.10.00, (kp) Arrows for different normal types added, attribute 'num' added to neighbours tag.">
<!ENTITY history_0.99.005  "14.11.00, (kp) Unused geometry type 'knotbook' removed since it was for testing only.">
<!ENTITY history_0.99.006  "16.12.00, (kp) New meaning of attribute 'type' of element 'textures'.">
<!ENTITY history_0.99.007  "21.12.00, (kp) Attribute and (draft) element for boundaries of faceSets added.">
<!ENTITY history_0.99.008  "07.01.01, (kp) Adjust usage of paragraphs in detail element to eg-models.">
<!ENTITY history_0.99.009  "09.01.01, (kp) New version 2.0 of element 'description' implemented to be identical to eg-model.dtd.">
<!ENTITY history_1.00      "01.02.01, (kp) Element 'description' reduced to avoid overlap of paragraph element with point element until we use ns.">
<!ENTITY history_1.00.001  "02.03.01, (kp) Attribute 'backcolor' renamed to 'colorBackGlobal', individual backface colors added.">
<!ENTITY history_1.01.000  "05.04.01, (kp) Element 'description' now has fully valid subset functionality of the same eg-model.dtd element.">
<!ENTITY history_1.01.001  "11.12.01, (kp) Attribute added to set the visibility of vectors of a vector field.">
<!ENTITY history_1.02      "12.02.02, (kp) Transformation matrices added to geometries.">
<!ENTITY history_1.02.001  "17.10.02, (kp) Individual thickness of vertices added as element 'thicknesses'.">
<!ENTITY history_1.02.002  "15.12.02, (kp) Gouraud shading enabled.">
<!ENTITY history_1.02.003  "22.12.02, (kp) Transformation matrices now optional, then assumed to be the identity.">
<!ENTITY history_1.02.004  "23.01.03, (kp) Individual material of vector fields activated.">
<!ENTITY history_1.02.005  "19.03.03, (kp) Optional element 'zentralblatt' added to better sync with eg-models.">
<!ENTITY history_1.03      "19.04.03, (kp) Additional attributes for tagged items and smooth shading.">
<!ENTITY history_1.04      "12.06.03, (kp) MSC classification now optional since other classifications may be added.">
<!ENTITY history_1.04.001  "23.06.03, (kp) Two additional texture attributes to enable blending and filtering.">
<!ENTITY history_1.05      "21.07.03, (kp) Added bounds of texture image.">
<!ENTITY history_1.06      "13.08.03, (kp) Title is now optional.">
<!ENTITY history_1.07      "10.10.03, (kp) Attribute 'startArrow' changed to 'arrowStart' since saved as such by all previous JavaView versions.">
<!ENTITY history_1.07.001  "17.10.03, (kp) Default vertical alignment of labels changed to 'middle' from 'top'.">
<!ENTITY history_1.07.002  "29.12.03, (kp) Cylinder primitive clarified, requires a single radius.">
<!ENTITY history_1.08      "26.01.04, (kp) Color of label types added, individual thickness of edges added to lineSet.">
<!ENTITY history_1.08.001  "19.04.04, (kp) Crease angle added to face sets.">
<!ENTITY history_1.08.002  "12.06.04, (kp) Name of color tag of label attributes changed to 'color' from 'c' which was internally introduced in 1.08.000.">
<!ENTITY history_1.09      "03.07.04, (kp) Detail text and url added for basic geometry items.">
<!ENTITY history_1.10      "18.10.04, (kp) Additional label parameters for fonts, transparency optional.">
<!ENTITY history_1.11      "01.11.04, (kp) Flags to suppress automatic generation of labels from indices and missing neighbours.">
<!ENTITY history_1.11.001  "05.03.05, (kp) Additional blending mode 'alpha' added to texture.">
<!ENTITY history_2.00.001  "29.10.05, (kp) Additional geometry element 'polygon' added.">
<!ENTITY history_2.00.002  "04.06.06, (kp) Texture element 'tiling' added.">
<!ENTITY history_2.00.003  "18.06.06, (kp) New attribute 'side' added to element 'texture'.">
<!ENTITY history_2.00.010  "06.09.06, (kp) In 'labelAtt' flipped order of 'color' and 'size' since JavaView 3.95 and earlier writes 'color' last.">
<!ENTITY history_2.00.011  "15.11.06, (kp) Tag attributes now have a small set of choices, no longer cdata.">
<!ENTITY history_2.00.020  "28.12.06, (kp) Alpha status: New element 'animGeom' for animated geometries, and new entry 'barys' in pointSet.">
<!ENTITY history_2.00.021  "17.06.07, (kp) New attributes 'edgeColorFromPoints' and 'edgeColorSmooth' added.">
<!ENTITY history_3.00.000  "23.06.07, (kp) New main geometry type 'tetraSet' added.">
<!ENTITY history_3.00.001  "03.01.11, (kp) Validation of animation elements.">
<!ENTITY version           "3.00.001">
<!ENTITY date              "03.01.11">

<!ELEMENT jvx-model        (meta*,version?,title?,authors?,description?,geometries)>
<!ELEMENT meta             EMPTY>
<!ATTLIST meta             generator CDATA #IMPLIED>              <!-- Name and version of program which generated this XML file. -->
<!ATTLIST meta             dtd CDATA #IMPLIED>                    <!-- Version number "int.int" or "int.int.int" of the DTD supported when generating this XML file. -->
<!ATTLIST meta             date CDATA #IMPLIED>                   <!-- Date when this XML file was generated. -->
<!ELEMENT version          (#PCDATA)>                             <!-- Version of this XML file. -->
<!ATTLIST version          type (dump|beta|final) "dump">         <!-- Status of this XML file. -->
<!ELEMENT title            (#PCDATA)>                             <!-- Multi-word title summarizing this model, initial letters are uppercase. -->

<!ELEMENT authors          (author+)>                             <!-- List of authors who created or computed this file. -->
<!ELEMENT author           (firstname,lastname,affiliation,email,url?)>   <!-- Contact address of this author. -->
<!ELEMENT firstname        (#PCDATA)>                             <!-- First name, middle name, and title of this author, initial letters are uppercase. -->
<!ELEMENT lastname         (#PCDATA)>                             <!-- Last name of this author, initial letters are uppercase. -->
<!ELEMENT affiliation      (organization,address)>                <!-- Affiliation and address of author. -->
<!ELEMENT organization     (#PCDATA)>                             <!-- Empty or university or company where author works, initial letters are uppercase. -->
<!ELEMENT address          (line+)>                               <!-- Postal address for surface mail, initial letters are uppercase. -->
<!ELEMENT line             (#PCDATA)>                             <!-- Separator for each address line, initial letters are uppercase. -->
<!ELEMENT email            (#PCDATA)>                             <!-- Email address of this author, all letters are lowercase. -->
<!ELEMENT url              (#PCDATA)>                             <!-- Home page of this author. -->

<!ELEMENT description      (abstract,detail,msc2000?,keywords,zentralblatt?,software)>   <!-- This element contains a subset of the same element in eg-model.dtd. -->
                                                                  <!-- This element remain fully valid when being copied into an eg-model description. -->
<!ELEMENT abstract         (#PCDATA)>                             <!-- One sentence should cover main ideas of this model submission. -->
<!ELEMENT detail           (#PCDATA)>                             <!-- Further detail information, for example, parameter settings used for generating the model. -->
                                                                  <!-- This element does not allow the paragraph element 'p' to avoid overlap with same element of points. -->
<!ELEMENT msc2000          (primary,secondary*)>                  <!-- Mathematical Subject Classification 2000. -->
<!ELEMENT primary          (#PCDATA)>                             <!-- Main subject classification. -->
<!ELEMENT secondary        (#PCDATA)>                             <!-- Further subject classifications. -->
<!ELEMENT keywords         (keyword+)>                            <!-- List of self-defined keywords characterizing this model. -->
<!ELEMENT keyword          (#PCDATA)>                             <!-- Each keyword is self-defined, initial letters are uppercase. -->
<!ELEMENT zentralblatt     (#PCDATA)>                             <!-- Number under which this model is referenced in Zentralblatt für Mathematik. -->
<!ELEMENT software         (#PCDATA)>                             <!-- Software including version number which generated this geometry model. -->

<!ELEMENT geometries       ((geometry|animGeom)+)>                <!-- A set of one or more geometries or animated geometries of the scene. -->
<!ELEMENT geometry         (((pointSet,vectorField*)|
                             (pointSet,polygon,vectorField*)|
                             (pointSet,lineSet,vectorField*)|
                             (pointSet,faceSet,vectorField*)|
                             (pointSet,tetraSet,vectorField*)|
                             (primitive)),
                           bndbox?,center?,labelAtt?,
                           material?,transform?)>                 <!-- Geometric data of a geometry. -->
<!ATTLIST geometry         name   CDATA #IMPLIED>                 <!-- Name of geometry, should be unique. -->
<!ATTLIST geometry         id-key CDATA #IMPLIED>                 <!-- Unique integer id used to identify corresponding geometries in keyframe animation. -->
<!ATTLIST geometry         visible (show|hide) "show">            <!-- Show geometry in a scene, or hide it. -->

<!ELEMENT pointSet         (points,colors?,normals?,textures?,thicknesses?,barys?)>  <!-- Geometry consisting of vertices. -->
<!ATTLIST pointSet         dim    CDATA #REQUIRED>                <!-- Number of components of each vertex, must be uniform for all vertices. -->
<!ATTLIST pointSet         point  (show|hide) "show">             <!-- Show vertices as round circles. -->
<!ATTLIST pointSet         color  (show|hide) "hide">             <!-- Show individual colors of each vertex. -->
<!ATTLIST pointSet         normal (show|hide) "hide">             <!-- Show normal of each vertex. -->
<!ATTLIST pointSet         normalArrow (show|hide) "hide">        <!-- Show arrow of vertex normals. -->
<!ATTLIST pointSet         thicknesses (show|hide) "hide">        <!-- Show individual thickness of each vertex. -->
<!ATTLIST pointSet         pointMark (show|hide) "show">          <!-- Show marked vertices in different color and thickness. -->
<!ATTLIST pointSet         pointOutline (show|hide) "show">       <!-- Show black border around each vertex circle. -->
<!ELEMENT polygon          (edges,colors?,normals?,thicknesses?)> <!-- Geometry consisting of a single polygonal line. -->
<!ATTLIST polygon          arrow (show|hide) "hide">              <!-- Show arrow at last vertex of the polygonal line. -->
<!ATTLIST polygon          arrowStart (show|hide) "hide">         <!-- Show arrow at first vertex of the polygonal line. -->
<!ATTLIST polygon          color (show|hide) "hide">              <!-- Show individual colors of each edge of the polygonal line, requires either existence of color array of polygons or colorFromPoints must be true. -->
<!ATTLIST polygon          colorFromPoints (show|hide) "hide">    <!-- Induce individual color of edges from individual vertex color of end points, requires existence of color array of vertices. -->
<!ATTLIST polygon          colorSmooth (show|hide) "hide">        <!-- Show smooth color transition of polygon color is induced from end points. -->
<!ATTLIST polygon          edge (show|hide) "show">               <!-- Show edges of a polygonal line. -->
<!ATTLIST polygon          edgeMark (show|hide) "show">           <!-- Show marked edges in different color and thickness. -->
<!ATTLIST polygon          normal (show|hide) "hide">             <!-- Show normal of each edge of the polygonal line. -->
<!ATTLIST polygon          normalArrow (show|hide) "hide">        <!-- Show arrow of edge normals. -->
<!ATTLIST polygon          thicknesses (show|hide) "hide">        <!-- Show individual thickness of each line. -->
<!ELEMENT lineSet          (lines,colors?,normals?,thicknesses?)> <!-- Geometry consisting of polygonal lines. -->
<!ATTLIST lineSet          arrow (show|hide) "hide">              <!-- Show arrow at last vertex of a polygonal line. -->
<!ATTLIST lineSet          arrowStart (show|hide) "hide">         <!-- Show arrow at first vertex of a polygonal line. -->
<!ATTLIST lineSet          color (show|hide) "hide">              <!-- Show individual colors of each polygonal line, requires either existence of color array of polygons or colorFromPoints must be true. -->
<!ATTLIST lineSet          colorFromPoints (show|hide) "hide">    <!-- Induce individual color of lines from individual vertex color of end points, requires existence of color array of vertices. -->
<!ATTLIST lineSet          colorSmooth (show|hide) "hide">        <!-- Show smooth color transition of polygon color is induced from end points. -->
<!ATTLIST lineSet          line (show|hide) "show">               <!-- Show edges of a polygonal line. -->
<!ATTLIST lineSet          lineMark (show|hide) "show">           <!-- Show marked lines in different color and thickness. -->
<!ATTLIST lineSet          normal (show|hide) "hide">             <!-- Show normal of each polygonal line. -->
<!ATTLIST lineSet          normalArrow (show|hide) "hide">        <!-- Show arrow of line normals. -->
<!ATTLIST lineSet          thicknesses (show|hide) "hide">        <!-- Show individual thickness of each line. -->
<!ELEMENT faceSet          (faces,neighbours?,edges?,colors?,colorsBack?,normals?,textures?,boundaries?)>   <!-- Geometry is a polygonal surface. -->
<!ATTLIST faceSet          face   (show|hide) "show">             <!-- Show filled elements, i.e. face, of a surface. -->
<!ATTLIST faceSet          edge   (show|hide) "show">             <!-- Show edge of elements as line. -->
<!ATTLIST faceSet          color  (show|hide) "hide">             <!-- Show individual colors of elements, requires either existence of color array of elements or colorFromPoints must be true. -->
<!ATTLIST faceSet          colorBackGlobal (show|hide) "hide">    <!-- Enable and show global backface color of backfacing elements. -->
<!ATTLIST faceSet          colorBackLocal (show|hide) "hide">     <!-- Enable and show individual colors of backface elements. -->
<!ATTLIST faceSet          colorFromPoints (show|hide) "hide">    <!-- Induce individual color of faces from color of its vertices, requires existence of color array of vertices. -->
<!ATTLIST faceSet          colorSmooth (show|hide) "hide">        <!-- Show smooth transition of face color within faces if face color is induced from its vertices. -->
<!ATTLIST faceSet          colorEdge (show|hide) "hide">          <!-- Show individual edge colors. -->
<!ATTLIST faceSet          colorEdgeInduced (show|hide) "hide">   <!-- Induce individual edge colors from adjacent individual element colors. -->
<!ATTLIST faceSet          colorEdgeFromPoints (show|hide) "hide">   <!-- Induce individual edge colors from adjacent individual vertex colors. -->
<!ATTLIST faceSet          colorEdgeSmooth (show|hide) "hide">    <!-- Show smooth transition of edges color within edges if edge color is induced from its vertices. -->
<!ATTLIST faceSet          normal (show|hide) "hide">             <!-- Show normal vectors at center of elements. -->
<!ATTLIST faceSet          normalArrow (show|hide) "hide">        <!-- Show arrow of element normal vectors. -->
<!ATTLIST faceSet          texture (show|hide) "hide">            <!-- Show texture on surface. -->
<!ATTLIST faceSet          backface (show|hide) "show">           <!-- Show backfacing elements, if hide then backface culling. -->
<!ATTLIST faceSet          boundary (show|hide) "hide">           <!-- Show boundary of surface, determined by neighbour information. -->
<!ATTLIST faceSet          faceMark (show|hide) "show">           <!-- Show marked faces in different color. -->
<!ATTLIST faceSet          silhouette (show|hide) "hide">         <!-- Show a thickened line along the silhouette of a shape, same material as boundary. -->
<!ELEMENT tetraSet         (tetras,neighbours?,edges?,colors?,textures?,boundaries?)>	<!-- Geometry is a tetrahedral volume. -->
<!ATTLIST tetraSet         tetra  (show|hide) "hide">             <!-- Show filled tetra. -->
<!ATTLIST tetraSet         face   (show|hide) "show">             <!-- Show filled faces of tetrahedra. -->
<!ATTLIST tetraSet         edge   (show|hide) "show">             <!-- Show edge of tetrahedra as line. -->
<!ATTLIST tetraSet         color  (show|hide) "hide">             <!-- Show individual colors of tetrahedra, requires either existence of color array of elements or colorFromPoints must be true. -->
<!ATTLIST tetraSet         colorFromPoints (show|hide) "hide">    <!-- Induce individual color of tetrahedra from color of its vertices, requires existence of color array of vertices. -->
<!ATTLIST tetraSet         colorSmooth (show|hide) "hide">        <!-- Show smooth transition of tetrahedra color within tetras if tetrahedra color is induced from its vertices. -->
<!ATTLIST tetraSet         colorEdge (show|hide) "hide">          <!-- Show individual edge colors. -->
<!ATTLIST tetraSet         colorEdgeInduced (show|hide) "hide">   <!-- Induce individual edge colors from adjacent individual tetrahedra colors. -->
<!ATTLIST tetraSet         colorEdgeFromPoints (show|hide) "hide">   <!-- Induce individual edge colors from adjacent individual vertex colors. -->
<!ATTLIST tetraSet         colorEdgeSmooth (show|hide) "hide">    <!-- Show smooth transition of edges color within edges if edge color is induced from its vertices. -->
<!ATTLIST tetraSet         texture (show|hide) "hide">            <!-- Show texture on tetra set. -->
<!ATTLIST tetraSet         boundary (show|hide) "hide">           <!-- Show boundary surface of volume, determined by neighbour information. -->
<!ATTLIST tetraSet         tetraMark (show|hide) "show">          <!-- Show marked tetrahedra in different color. -->
<!ELEMENT vectorField      (vectors,colors?)>                     <!-- Vector field of a geometry, vectors are attached to vertices or element centers. -->
<!ATTLIST vectorField      name     CDATA #IMPLIED>               <!-- Name of the vector fields. -->
<!ATTLIST vectorField      vector   (show|hide) "show">           <!-- Visibility of vectors of this vector field. -->
<!ATTLIST vectorField      base     (vertex|element) "vertex">    <!-- Vector field is attached to vertices or center of elements. -->
<!ATTLIST vectorField      material (show|hide) "show">           <!-- Show individual material properties of this vector field, or of the base geometry. -->
<!ATTLIST vectorField      arrow    (show|hide) "hide">           <!-- Show arrow at tip of vectors. -->
<!ATTLIST vectorField      color    (show|hide) "hide">           <!-- Show individual colors of vectors, otherwise global color is used. -->

<!ELEMENT points           (p*,thickness?,color?,colorTag?,labelAtt?)>  <!-- Collection of points in nD space. -->
<!ATTLIST points           num    CDATA #IMPLIED>                 <!-- Number of points listed in this element. -->
<!ELEMENT p                (#PCDATA)>                             <!-- Coordinate components of a point separated by blanks. -->
<!ATTLIST p                name   CDATA #IMPLIED>                 <!-- Name of this geometry item. -->
<!ATTLIST p                detail CDATA #IMPLIED>                 <!-- Multiline textual information about this geometry item. -->
<!ATTLIST p                url    CDATA #IMPLIED>                 <!-- Hyperlink URL of this geometry item. -->
<!ATTLIST p                tag    (mark) #IMPLIED>                <!-- Tag associated to this geometry item. -->
<!ELEMENT colors           (c*)>                                  <!-- Individual colors of elements. -->
<!ATTLIST colors           type   (rgb|rgba|grey) "rgb">          <!-- Color space, currently supported: rgb only. -->
<!ATTLIST colors           num    CDATA #IMPLIED>                 <!-- Number of colors, must be equal to actual number of geometry items. -->
<!ELEMENT c                (#PCDATA)>                             <!-- Components separated by blanks -->
<!ELEMENT colorsBack       (c*)>                                  <!-- Individual colors of backfacing elements. -->
<!ATTLIST colorsBack       type   (rgb|rgba|grey) "rgb">          <!-- Color space, currently supported: rgb only. -->
<!ATTLIST colorsBack       num    CDATA #IMPLIED>                 <!-- Number of colors, must be equal to actual number of geometry items. -->
<!ELEMENT normals          (n*,thickness?,length?,color?)>        <!-- Collection of normal vectors in nD space. -->
<!ATTLIST normals          num    CDATA #IMPLIED>                 <!-- Number of normal vectors, must be equal to actual number of geometry items. -->
<!ELEMENT n                (#PCDATA)>                             <!-- Coordinate components of a normal vector separated by blanks. -->
<!ELEMENT thicknesses      (th*)>                                 <!-- Array of (percentage) thickness values of individual geometry items such as points or lines. -->
<!ATTLIST thicknesses      num    CDATA #IMPLIED>                 <!-- Number of thickness entries, must be equal to actual number of points or lines. -->
<!ELEMENT th               (#PCDATA)>                             <!-- Thickness of a vertex or line as double, specifies percentage of global thickness value. -->
<!ELEMENT barys            (b*)>                                  <!-- Array of barycentric coordinates of points, must be equal to actual number of points. -->
<!ATTLIST barys            num    CDATA #IMPLIED>                 <!-- Number of barycentric arrays, must be equal to actual number of points or lines. -->
<!ELEMENT b                (#PCDATA)>                             <!-- Barycentric coordinate of a point, number of components depend on references element. -->
<!ATTLIST b                ind    CDATA #IMPLIED>                 <!-- Index of reference element in parent geometry. -->
<!ELEMENT lines            (l*,thickness?,color?,colorTag?,labelAtt?)>  <!-- Collection of polygon lines given as sequence of indices in the list of points. -->
<!ATTLIST lines            num    CDATA #IMPLIED>                 <!-- Number of lines listed in this element. -->
<!ELEMENT l                (#PCDATA)>                             <!-- Single polygonal line given by indices of points, components separated by blanks -->
<!ATTLIST l                name   CDATA #IMPLIED>                 <!-- Name of this geometry item. -->
<!ATTLIST l                detail CDATA #IMPLIED>                 <!-- Multiline textual information about this geometry item. -->
<!ATTLIST l                url    CDATA #IMPLIED>                 <!-- Hyperlink URL of this geometry item. -->
<!ATTLIST l                tag    (mark) #IMPLIED>                <!-- Tag associated to this geometry item. -->
<!ATTLIST l                arrow (show|hide) "hide">              <!-- Not implemented yet -->
<!ELEMENT faces            (f*,color?,colorBack?,colorTag?,creaseAngle?,labelAtt?)>  <!-- Collection of polygon faces given as sequence of indices in the list of points. -->
<!ATTLIST faces            num    CDATA #IMPLIED>                 <!-- Number of surface faces listed in this element. -->
<!ELEMENT f                (#PCDATA)>                             <!-- Single polygonal face given by indices of points, components separated by blanks -->
<!ATTLIST f                name   CDATA #IMPLIED>                 <!-- Name of this geometry item. -->
<!ATTLIST f                detail CDATA #IMPLIED>                 <!-- Multiline textual information about this geometry item. -->
<!ATTLIST f                url    CDATA #IMPLIED>                 <!-- Hyperlink URL of this geometry item. -->
<!ATTLIST f                tag    (mark) #IMPLIED>                <!-- Tag associated to this geometry item. -->
<!ELEMENT tetras           (tet*,color?,colorTag?,labelAtt?)>     <!-- Collection of tetrahedra given as sequence of indices in the list of points. -->
<!ATTLIST tetras           num    CDATA #IMPLIED>                 <!-- Number of tetrahedra listed in this element. -->
<!ELEMENT tet              (#PCDATA)>                             <!-- Single tetrahedron given by indices of points, components separated by blanks -->
<!ATTLIST tet              name   CDATA #IMPLIED>                 <!-- Name of this geometry item. -->
<!ATTLIST tet              detail CDATA #IMPLIED>                 <!-- Multiline textual information about this geometry item. -->
<!ATTLIST tet              url    CDATA #IMPLIED>                 <!-- Hyperlink URL of this geometry item. -->
<!ATTLIST tet              tag    (mark) #IMPLIED>                <!-- Tag associated to this geometry item. -->
<!ELEMENT edges            (e*,thickness?,color?,colorTag?,labelAtt?)>  <!-- Collection of surface edges given as sequence of indices in the list of points. -->
<!ATTLIST edges            num    CDATA #IMPLIED>                 <!-- Number of edges listed in this element. -->
<!ELEMENT e                (#PCDATA)>                             <!-- Single edge given by indices of points, components separated by blanks -->
<!ATTLIST e                name   CDATA #IMPLIED>                 <!-- Name of this geometry item. -->
<!ATTLIST e                tag    (mark) #IMPLIED>                <!-- Tag associated to this geometry item. -->
<!ELEMENT neighbours       (nb*)>                                 <!-- Collection of neighbour elements given as indices in the list of faces. -->
<!ATTLIST neighbours       num    CDATA #IMPLIED>                 <!-- Number of neighbour entries listed in this element. -->
<!ATTLIST neighbours       auto   (show|hide) #IMPLIED>           <!-- Auto-generation of neighbours if neighbours are missing. -->
<!ELEMENT nb               (#PCDATA)>                             <!-- Indices of adjacent faces of a single face, components separated by blanks. -->
<!ELEMENT vectors          (v*,thickness?,length?,color?)>        <!-- Collection of vectors in nD space. -->
<!ATTLIST vectors          num    CDATA #IMPLIED>                 <!-- Number of vectors listed in this element. -->
<!ELEMENT v                (#PCDATA)>                             <!-- Coordinate components of a vector separated by blanks. -->
<!ATTLIST v                name   CDATA #IMPLIED>                 <!-- Name of this geometry item. -->
<!ATTLIST v                tag    (mark) #IMPLIED>                <!-- Tag associated to this geometry item. -->
<!ELEMENT textures         (t*,image?,imageCoords?,tiling?)>      <!-- Texture information with texture coordinates and texture image. -->
<!ATTLIST textures         dim    CDATA #REQUIRED>                <!-- Dimension of texture domain, 2 for images, 3 for volume textures. -->
<!ATTLIST textures         num    CDATA #IMPLIED>                 <!-- Number of texture coordinates, each with 'dim' components. -->
<!ATTLIST textures         blend  (replace|material|alpha) "replace"> <!-- Determines if texture and surface color are blended. -->
<!ATTLIST textures         filter (direct|linear|quadratic) "direct"> <!-- Determines the size of the texture sampling stencil. -->
<!ATTLIST textures         side   (both|front|back) "both">       <!-- Determines on which side of a surface the texture is shown. -->
<!ELEMENT t                (#PCDATA)>                             <!-- Components of a texture coordinate, number of components is 'dim'. -->
<!ELEMENT imageCoords      (p,p)>                                 <!-- Image bounding box in texture coordinates, default is [0,1]x[0,1]. -->
<!ELEMENT tiling           (#PCDATA)>                             <!-- Number of images in interval [0.,1.] in each coordinate directions, default in 2D is (1, 1). -->
<!ELEMENT boundaries       (thickness?,color?,colorTag?,labelAtt?)>   <!-- Material properties of surface boundary, shared with silhouette. -->
<!ELEMENT color            (#PCDATA)>                             <!-- Color components separated by blanks. -->
<!ATTLIST color            type  (rgb|rgba|grey) "rgb">           <!-- Color space, currently supported: rgb only. -->
<!ELEMENT colorBack        (#PCDATA)>                             <!-- Color components separated by blanks. -->
<!ATTLIST colorBack        type  (rgb|rgba|grey) "rgb">           <!-- Color space, currently supported: rgb only. -->
<!ELEMENT colorTag         (#PCDATA)>                             <!-- Color components separated by blanks. -->
<!ATTLIST colorTag         type  (rgb|rgba|grey) "rgb">           <!-- Color space, currently supported: rgb only. -->
<!ELEMENT creaseAngle      (#PCDATA)>                             <!-- Crease angle in [0,Pi] determines sharp edges in smooth lighting (and coloring). Pi means everything is smooth -->

<!ELEMENT primitive        (cube|sphere|cylinder|cone)>           <!-- List of primitive geometries. -->

<!ELEMENT cube             (lowerLeft,upperRight)>                <!-- Cube primitive, not supported yet. -->
<!ELEMENT lowerLeft        (p)>                                   <!-- Lower left vertex of hyper cube -->
<!ELEMENT upperRight       (p)>                                   <!-- Upper right vertex of hyper cube -->

<!ELEMENT sphere           (midpoint,radius)>                     <!-- Sphere primitive, not supported yet. -->
<!ELEMENT midpoint         (p)>                                   <!-- Center of n-dimensional sphere -->

<!ELEMENT cylinder         (bottom,top,radius)>                   <!-- Cylinder primitive, not supported yet. -->
<!ELEMENT bottom           (p)>                                   <!-- Base center of n-dimensional cylinder -->
<!ELEMENT top              (p)>                                   <!-- Top center of n-dimensional cylinder -->

<!ELEMENT cone             (bottom,top,radius)>                   <!-- Cone primitive, not supported yet. -->

<!ELEMENT radius           (#PCDATA)>                             <!-- Double value, radius of circles and spheres -->
<!ELEMENT thickness        (#PCDATA)>                             <!-- Double value, thickness of lines and points -->
<!ELEMENT length           (#PCDATA)>                             <!-- Double value, length of lines -->

<!ELEMENT bndbox           (p,p)>                                 <!-- Min and max vertices of bounding box in world coordinates. -->
<!ATTLIST bndbox           visible (show|hide) "show">            <!-- Visibility of the bounding box of the geometry. -->

<!ELEMENT center           (p)>                                   <!-- Rotation center of geometry in world coordinates. -->
<!ATTLIST center           visible (show|hide) "show">            <!-- Visibility of the center of the geometry. -->


<!ELEMENT labelAtt         (xOffset?,yOffset?,size?,color?)>      <!-- Additional offset of label in screen space from its position of label, optional size and color of label. -->
<!ATTLIST labelAtt         visible  (show|hide) "show">           <!-- Show the label. -->
<!ATTLIST labelAtt         auto     (show|hide) "show">           <!-- Auto-generation of labels if missing, for example, from indices. -->
<!ATTLIST labelAtt         horAlign (head|center|tail) "head">    <!-- Horizontal alignment of label at its position. -->
<!ATTLIST labelAtt         verAlign (top|middle|bottom) "middle"> <!-- Vertical alignment of label at its position. -->
<!ATTLIST labelAtt         style    (plain|bold|italic) "plain">  <!-- Optional style of font. -->
<!ATTLIST labelAtt         font     (text|fixed|header2|header4|menu) "text"> <!-- Simple font and style of label, alternatively specify name of font in attribute 'name'. -->
<!ATTLIST labelAtt         name     CDATA #IMPLIED>               <!-- Name of font, alternative specification to simple default font in attribute 'font'. -->
<!ELEMENT xOffset          (#PCDATA)>                             <!-- Offset of label in x-direction of screen space. -->
<!ELEMENT yOffset          (#PCDATA)>                             <!-- Offset of label in y-direction of screen space. -->
<!ELEMENT size             (#PCDATA)>                             <!-- Size of font. -->

<!ELEMENT material         (ambientIntensity,diffuse,emissive,
                           shininess,specular,transparency?)>     <!-- Compare VRML 2.0 material specification. -->
<!ATTLIST material         shading (flat|gouraud) "flat">         <!-- Flat or smooth shading of faces, smooth shading requires vertex colors. -->
<!ELEMENT ambientIntensity (#PCDATA)>                             <!-- Double value in [0.,1.], determines how much light is reflected. -->
<!ELEMENT diffuse          (color)>                               <!-- Diffuse color, maybe overwritten by global/local element color, reflect light depending on angle. -->
<!ELEMENT emissive         (color)>                               <!-- Color when acting as light source. -->
<!ELEMENT shininess        (#PCDATA)>                             <!-- Double value in [0.,1.], specular exponent. -->
<!ELEMENT specular         (color)>                               <!-- Color of highlights. -->
<!ELEMENT transparency     (#PCDATA)>                             <!-- Double value in [0.,1.], 0==opaque, 1==fully transparent. -->
<!ATTLIST transparency     visible (show|hide) "hide">            <!-- Determines if transparency is enabled. -->

<!ELEMENT image            (url)>                                 <!-- Reference of a 2-dimensional image. -->
<!ATTLIST image            repeat (no|s|t|st) "no">               <!-- Infinite periodic pattern if pixels outside the image are requested. -->

<!ELEMENT transform        (modelMat?,ambient?)>                  <!-- Model and/or ambient transformation matrices. -->
<!ELEMENT modelMat         (row+)>                                <!-- 4*4 square modeling matrix. -->
<!ELEMENT row              (#PCDATA)>                             <!-- Row of matrix. -->
<!ELEMENT ambient          ((ambientMat,ambientInvMat)?)>         <!-- Ambient transformation of a geometry. -->
<!ATTLIST ambient          dim     CDATA #REQUIRED>               <!-- Dimension of ambient space. -->
<!ATTLIST ambient          space (euclidean|spherical|         
                           hyperbolic) "euclidean">               <!-- Type of ambient space. -->
                                                                  <!-- Euclidean == Points are in R^dim. -->
                                                                  <!-- Spherical == Points lie on unit sphere in R^dim. -->
                                                                  <!-- Hyperbolic== Points lie on unit sphere in Lorentz-Space R^dim with signature (+,..,+,-). -->
<!ATTLIST ambient          projection (parallel|stereographic|
                           poincare|klein|uhs) "parallel">        <!-- Method of projection from ambient space into R3. -->
<!ELEMENT ambientMat       (row+)>                                <!-- Ambient transformation, square matrix of dimension (dim+1,dim+1). -->
<!ELEMENT ambientInvMat    (row+)>                                <!-- Inverse of ambient transformation, square transformation matrix of dimension (dim+1,dim+1). -->


<!ELEMENT animation        (startTime, endTime, time)>            <!-- Global times mark the range of a scene animation, plus current global time. -->
<!ATTLIST animation        play   (pause|fwd|bwd) "fwd">          <!-- Current play mode. -->
<!ATTLIST animation        speed  (1) "1">                        <!-- Fraction of normal speed. -->
<!ATTLIST animation        frameRate (24) "24">                   <!-- Frame rate, may depend on hardware availability. -->
<!ATTLIST animation        repeat (once|loop) "loop">             <!-- Determines repetition mode. -->
<!ELEMENT startTime        (time)>                                <!-- Beginning time. -->
<!ELEMENT endTime          (time)>                                <!-- Finishing time. -->
<!ELEMENT time             (#PCDATA)>                             <!-- Time as double value. -->

<!ELEMENT animGeom         (startTime,endTime,time,(keyframe))>   <!-- Global time range of this geometry within the global scene animation. -->
                                                                  <!-- Optionally, current time at which animGeom is frozen. -->
                                                                  <!-- A keyframe or dynamic geometry. -->
<!ATTLIST animGeom         preVisible (show|hide) "hide">         <!-- Determines visibility before time range. -->
<!ATTLIST animGeom         postVisible (show|hide) "hide">        <!-- Determines visibility after time range. -->
<!ATTLIST animGeom         freeze (show|hide) "hide">             <!-- Determines if geometry is refreshed when time changes, or time is frozen. -->

<!ELEMENT keyframe         (startTime,endTime,(time, geometry)+)> <!-- Local time range of this geometry. -->
                                                                  <!-- List of single keyframe geometry and corresponding local time. -->
<!ATTLIST keyframe         blend (constant|linear|cubic) "linear"><!-- Determines interpolation between keyframes. -->
