VRML Part 4 logo

Annex A
(normative)

X3D DTD

 

--- VRML separator bar ---

A.1 Table of contents and introduction

A.1.1 Table of contents

This annex provides a detailed description of the XML grammar for each syntactic element in this part of ISO/IEC 14772. The following table of contents lists the topics in this clause:

Table A.1--Table of contents

A.1 Table of contents and introduction
        A.1.1 Table of contents
        A.1.2 Introduction
A.2 Data type definition (DTD)

A.1.2 Introduction

A.2 contains the Data Type Definition (DTD) which corresponds to this binding. The format of a DTD is defined in 2.[XML]. This DTD conforms to that format and contains the VRML elements as specified in the clauses of this part of ISO/IEC 14772.

--- VRML separator bar ---

A.2 Data type definition (DTD)

The following DTD is the compromise DTD approved by the X3D Task Group as a strawman DTD. The final version will remove all history and other comment data.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0066)http://www.web3d.org/TaskGroups/x3d/translation/x3d-compromise.dtd -->
<HTML><HEAD>
<META content="text/html; charset=windows-1252" http-equiv=Content-Type>
<META content="MSHTML 5.00.2722.2800" name=GENERATOR></HEAD>
<BODY><XMP><!--
# Extensible 3D (X3D) Document Type Definition (DTD)
#
# draft X3D DTD:
# http://www.web3D.org/TaskGroups/x3d/translation/x3d-compromise.dtd
#
# changelog:
# http://www.web3d.org/TaskGroups/x3d/translation/x3d-dtd-changelog.txt
#
# test world:
# http://www.web3D.org/TaskGroups/x3d/translation/AllVrml97Nodes.wrl
# http://www.web3D.org/TaskGroups/x3d/translation/AllVrml97Nodes.wrl.txt
#
# test translation:
# http://www.web3D.org/TaskGroups/x3d/translation/AllVrml97Nodes.xml
# http://www.web3D.org/TaskGroups/x3d/translation/AllVrml97Nodes.xml.txt
#
# editor:
# http://www.web3d.org/TaskGroups/x3d/translation/README.X3D-Edit.txt
#
# DTD version plans: 
# increment by .1 when each of the following is complete:
# - initial well-defined DTD 0.5
# - all nodes available in test scene and checked in DTD 0.6
# - Xeena able to present translated X3D scene using DTD 0.7
# - Xj3D able to translate full test scene using DTD into X3D 0.8
# - DTD compliance exercised by NIST's VRML & XML test suites 0.9
# - approval by task group, community, Web3D Consortium 1.0
# (estimated June 2000)
#
# current version: 0.78
#
# revised: 28 March 2000
#
-->

<!-- Profile: authors can override these default IGNORE/INCLUDE values.
If CoreProfile is INCLUDEd, all other profiles must be IGNOREd.
Note CoreProfile enforces strict compliance with Core capabilities. -->

<!ENTITY % Vrml97Profile "INCLUDE">
<!ENTITY % CoreProfile "IGNORE">
<!ENTITY % X3dExtensions "INCLUDE">
<!ENTITY % GeoVrmlProfile "IGNORE">

<!-- *** Entity declarations *** -->

<!ENTITY % X3dFieldTypes " Boolean | Booleans | Color | Colors | Float | Floats | Image | Integer | Integers | Node | Nodes | Rotation | Rotations | String | Strings | Time | Times | Vector2 | Vector2Array | Vector3 | Vector3Array " >

<!ENTITY % Vrml97FieldTypes " SFBool | MFBool | SFColor | MFColor | SFFloat | MFFloat | SFImage | SFInt32 | MFInt32 | SFNode | MFNode | SFRotation | MFRotation | SFString | MFString | SFTime | MFTime | SFVec3f | MFVec3f | SFVec2f | MFVec2f " >

<!ENTITY % SFBool "(true|false)"> <!-- Boolean -->
<!ENTITY % MFBool "CDATA"> <!-- Booleans -->
<!ENTITY % SFColor "CDATA"> <!-- Color -->
<!ENTITY % MFColor "CDATA"> <!-- Colors -->
<!ENTITY % SFFloat "CDATA"> <!-- Float -->
<!ENTITY % MFFloat "CDATA"> <!-- Floats -->
<!ENTITY % SFImage "CDATA"> <!-- Image -->
<!ENTITY % SFInt32 "CDATA"> <!-- Integer -->
<!ENTITY % MFInt32 "CDATA"> <!-- Integers -->
<!ENTITY % SFNode "#PCDATA"> <!-- Node -->
<!ENTITY % MFNode "#PCDATA"> <!-- Nodes -->
<!ENTITY % SFRotation "CDATA"> <!-- Rotation -->
<!ENTITY % MFRotation "CDATA"> <!-- Rotations -->
<!ENTITY % SFString "CDATA"> <!-- String -->
<!ENTITY % MFString "CDATA"> <!-- Strings -->
<!ENTITY % SFTime "CDATA"> <!-- Time -->
<!ENTITY % MFTime "CDATA"> <!-- Times -->
<!ENTITY % SFVec2f "CDATA"> <!-- Vector2 -->
<!ENTITY % MFVec2f "CDATA"> <!-- Vector2Array -->
<!ENTITY % SFVec3f "CDATA"> <!-- Vector3 -->
<!ENTITY % MFVec3f "CDATA"> <!-- Vector3Array -->

<!-- Fields: VRML 97 Part 5, Field and event reference
http://www.web3D.org/technicalinfo/specifications/vrml97/part1/

Notes:
1. Use of NMTOKEN/NMTOKENS precludes inclusion of commas,
[brackets], (parentheses) while CDATA permits anything.
Use of NMTOKENS for MF types is not yet agreed upon.

2. No separate tag for multifield URLs needed if no whitespace
permitted in the URLs (use percent-20 instead of 'blank' in URL)
-->

<!-- User needs to append | after each new node in any of these extensions.
For an example, see SpinGroupExternalDeclaration.xml -->

<!ENTITY % AppearanceNodeExtensions "" >
<!ENTITY % AudioClipNodeExtensions "" >
<!ENTITY % BindableNodeExtensions "" >
<!ENTITY % ColorNodeExtensions "" >
<!ENTITY % CoordinateNodeExtensions "" >
<!ENTITY % FontStyleNodeExtensions "" >
<!ENTITY % GeometryNodeExtensions "" >
<!ENTITY % GroupingNodeExtensions "" >
<!ENTITY % InterpolatorNodeExtensions "" > 
<!ENTITY % LightNodeExtensions "" >
<!ENTITY % MaterialNodeExtensions "" >
<!ENTITY % NormalNodeExtensions "" >
<!ENTITY % ScriptNodeExtensions "" > 
<!ENTITY % SensorNodeExtensions "" > 
<!ENTITY % ShapeNodeExtensions "" >
<!ENTITY % SoundNodeExtensions "" >

<!-- MovieTexture must be able to appear twice: -->
<!ENTITY % MovieTextureNodeExtensions "" >
<!ENTITY % TextureNodeExtensions "" >

<!ENTITY % TextureCoordinateNodeExtensions "" >
<!ENTITY % TextureTransformNodeExtensions "" >
<!ENTITY % WorldInfoNodeExtensions "" >

<!-- Users defining PROTOs do not override any of the following parameter entity declarations. -->

<!-- Declarations appearing only in Vrml97Profile -->

<![%Vrml97Profile;[

<!ENTITY % AudioClipNodes " %AudioClipNodeExtensions; AudioClip " >

<!ENTITY % FontStyleNodes " %FontStyleNodeExtensions; FontStyle " >

<!ENTITY % MovieTextureNodes " %MovieTextureNodeExtensions; MovieTexture " >

<!ENTITY % NormalNodes " %NormalNodeExtensions; Normal " >

<!ENTITY % ScriptNodes " %ScriptNodeExtensions; Script " >

<!ENTITY % SoundNodes " %SoundNodeExtensions; Sound " >

<!ENTITY % TextureCoordinateNodes " %TextureCoordinateNodeExtensions; TextureCoordinate " >

<!ENTITY % TextureTransformNodes " %TextureTransformNodeExtensions; TextureTransform " >

]]>

<![%CoreProfile;[

<!ENTITY % AudioClipNodes "" >
<!ENTITY % FontStyleNodes "" >
<!ENTITY % MovieTextureNodes "" >
<!ENTITY % NormalNodes "" >
<!ENTITY % ScriptNodes "" >
<!ENTITY % SoundNodes "" >
<!ENTITY % TextureCoordinateNodes "" >
<!ENTITY % TextureTransformNodes "" >

]]>

<!-- Declarations appearing differently in X3dExtensions, Vrml97Profile and CoreProfile -->

<!-- X3D Extensions (superset overriding some Vrml97Profile declarations) -->

<![%X3dExtensions;[

<!ENTITY % AppearanceNodeX3dExtensions " MultiTexture | MultiTextureTree | MultiTextureAppearance | " >

<!ENTITY % GeometryNodesX3dExtensions " MultiTextureIndexedFaceSet | " >

]]>

<!ENTITY % AppearanceNodeX3dExtensions "" >
<!ENTITY % GeometryNodesX3dExtensions "" >

<![%Vrml97Profile;[

<!ENTITY % AppearanceNodes " %AppearanceNodeExtensions; %AppearanceNodeX3dExtensions; Appearance " >

<!ENTITY % BehaviorLeafNodes " %InterpolatorNodeExtensions; %SensorNodeExtensions; %ScriptNodeExtensions; ColorInterpolator | CoordinateInterpolator | CylinderSensor | NormalInterpolator | OrientationInterpolator | PlaneSensor | PositionInterpolator | ProximitySensor | ScalarInterpolator | Script | SphereSensor | TimeSensor | TouchSensor | VisibilitySensor " >

<!ENTITY % BindableNodes " %BindableNodeExtensions; Background | Fog | NavigationInfo | Viewpoint " >

<!ENTITY % ColorNodes " %ColorNodeExtensions; Color " >

<!ENTITY % CoordinateNodes " %CoordinateNodeExtensions; Coordinate " >

<!ENTITY % GeometryNodes " %GeometryNodeExtensions; %GeometryNodesX3dExtensions; Box | Cone | Cylinder | ElevationGrid | Extrusion | IndexedFaceSet | IndexedLineSet | PointSet | Sphere | Text " >

<!ENTITY % GroupingNodes " %GroupingNodeExtensions; Anchor | Billboard | Collision | Group | Inline | LOD | Switch | Transform " >

<!ENTITY % LightNodes " %LightNodeExtensions; DirectionalLight | SpotLight | PointLight " >

<!ENTITY % MaterialNodes " %MaterialNodeExtensions; Material " >

<!ENTITY % ShapeNodes " %ShapeNodeExtensions; Shape " >

<!ENTITY % TextureNodes " %TextureNodeExtensions; ImageTexture | MovieTexture | PixelTexture " >

<!ENTITY % WorldInfoNodes " %WorldInfoNodeExtensions; WorldInfo " >

]]>

<![%CoreProfile;[

<!ENTITY % AppearanceNodes " Appearance " >

<!ENTITY % BehaviorLeafNodes " CoordinateInterpolator | OrientationInterpolator | PositionInterpolator | ScalarInterpolator | TimeSensor | TouchSensor " >

<!ENTITY % BindableNodes " Background | NavigationInfo | Viewpoint " >

<!ENTITY % ColorNodes " Color " >

<!ENTITY % CoordinateNodes " Coordinate " >

<!ENTITY % GeometryNodes " IndexedFaceSet | IndexedLineSet | PointSet " >

<!ENTITY % GroupingNodes " Anchor | Group | Inline | Transform " >

<!ENTITY % LightNodes " DirectionalLight " >

<!ENTITY % MaterialNodes " Material " >

<!ENTITY % ShapeNodes " Shape " >

<!ENTITY % TextureNodes " ImageTexture " >

<!ENTITY % WorldInfoNodes " WorldInfo " >

]]>

<!-- These VRML 97 specification terms relate to a possible future object hierarchy of nodes.
For details, see VRML 97 4.6.5 Grouping and children nodes
http://www.web3D.org/technicalinfo/specifications/vrml97/part1/concepts.html#4.6.5 -->

<![%Vrml97Profile;[

<!ENTITY % GeometricPropertyNodes " %CoordinateNodes; | %ColorNodes; | %NormalNodes; | %TextureCoordinateNodes; " >

<!ENTITY % AppearanceChildNodes " %MaterialNodes; | %TextureNodes; | %TextureTransformNodes; " >

<!ENTITY % SceneLeafNodes " %LightNodes; | %ShapeNodes; | %SoundNodes; | %WorldInfoNodes; " >

<!ENTITY % ProtoNodes " %AppearanceNodes; | %AppearanceChildNodes; | %BehaviorLeafNodes; | %BindableNodes; | %GeometricPropertyNodes; | %GeometryNodes; | %GroupingNodes; | %SceneLeafNodes; " >

]]>

<![%CoreProfile;[

<!ENTITY % GeometricPropertyNodes " %ColorNodes; " >

<!ENTITY % AppearanceChildNodes " %MaterialNodes; | %TextureNodes; " >

<!ENTITY % SceneLeafNodes " %LightNodes; | %ShapeNodes; | %WorldInfoNodes; " >

<!ENTITY % ProtoNodes "" >

]]>


<![%Vrml97Profile;[

<!ENTITY % ChildrenNodes " %BehaviorLeafNodes; | %BindableNodes; | %GroupingNodes; | %SceneLeafNodes; " >

<!ENTITY % WildcardNodes " (USE | ProtoInstance) " >

<!ENTITY % SceneNodes " (ExternProtoDeclare|ProtoDeclare)*, ( %ChildrenNodes; | %WildcardNodes; )*, ROUTE* " >

]]>

<![%CoreProfile;[

<!ENTITY % ChildrenNodes " %BehaviorLeafNodes; | %BindableNodes; | %GroupingNodes; | %SceneLeafNodes; " >

<!ENTITY % WildcardNodes " USE " >

<!ENTITY % SceneNodes " ( %ChildrenNodes; | %WildcardNodes; )*, ROUTE* " >

]]>


<!ENTITY % AllVRML97Nodes " Anchor|Appearance|AudioClip|Background|Billboard|Box|Collision|Color|ColorInterpolator|Cone|Coordinate|CoordinateInterpolator|Cylinder|CylinderSensor|DirectionalLight|ElevationGrid|Extrusion|Fog|FontStyle|Group|Header|ImageTexture|IndexedFaceSet|IndexedLineSet|Inline|LOD|Material|MovieTexture|NavigationInfo|Normal|NormalInterpolator|OrientationInterpolator|PixelTexture|PlaneSensor|PointLight|PointSet|PositionInterpolator|ProximitySensor|ScalarInterpolator|Scene|Script|Shape|Sound|Sphere|SphereSensor|SpotLight|Switch|Text|TextureCoordinate|TextureTransform|TimeSensor|TouchSensor|Transform|Viewpoint|VisibilitySensor|WorldInfo " >


<!-- Not used (yet, anyway) in tagset definitions. -->

<!ENTITY % SensorNodes " Anchor | Collision | CylinderSensor | PlaneSensor | ProximitySensor | SphereSensor | TimeSensor | TouchSensor | VisibilitySensor " >

<!ENTITY % EnvironmentalSensorNodes " Collision | ProximitySensor | TimeSensor | VisibilitySensor " >

<!ENTITY % PointingDeviceSensors " Anchor | CylinderSensor | PlaneSensor | SphereSensor | TouchSensor " >

<!ENTITY % DragSensors " CylinderSensor | PlaneSensor | SphereSensor " >

<!ENTITY % InterpolatorNodes " ColorInterpolator | CoordinateInterpolator | NormalInterpolator | OrientationInterpolator | PositionInterpolator | ScalarInterpolator " >

<!ENTITY % TimeDependentNodes " AudioClip | MovieTexture | TimeSensor " >


<!-- ================================== -->
<!-- ****** Wrapper tags. ****** -->

<!ENTITY % WrapperTags "INCLUDE">

<![%WrapperTags;[

<!-- no attributes for wrapper tags, since there they are not nodes
instantiated by VRML to be DEFed. -->

<!ELEMENT appearance (%AppearanceNodes;|%WildcardNodes;)? >
<!ELEMENT children ( %ChildrenNodes;|%WildcardNodes; )* >
<!ELEMENT choice ( %ChildrenNodes;|%WildcardNodes; )* >
<!ELEMENT color (%ColorNodes;|%WildcardNodes;)? >
<!ELEMENT coord (%CoordinateNodes;|%WildcardNodes;)? >
<!ELEMENT fontStyle (%FontStyleNodes;|%WildcardNodes;)? >
<!ELEMENT geometry (%GeometryNodes;|%WildcardNodes;)? >
<!ELEMENT level ( %ChildrenNodes;|%WildcardNodes; )* >
<!ELEMENT material (%MaterialNodes;|%WildcardNodes;)? >
<!ELEMENT normal (%NormalNodes;|%WildcardNodes;)? >
<!ELEMENT proxy (%ChildrenNodes;|%WildcardNodes;)? >
<!ELEMENT source ( %AudioClipNodes; | %MovieTextureNodes; | %WildcardNodes; )? >
<!ELEMENT texture (%TextureNodes;|%WildcardNodes;)? >
<!ELEMENT texCoord (%TextureCoordinateNodes;|%WildcardNodes;)? >
<!ELEMENT textureTransform (%TextureTransformNodes;|%WildcardNodes;)? >

<!-- VRML 97 child nodes separated by wrapper tags. -->

<!ELEMENT Anchor (children)? >

<!ELEMENT Appearance (
(material, ((texture, textureTransform?) | (textureTransform, texture?))? ) |
(texture, ((material, textureTransform?) | (textureTransform, material?))? ) |
(textureTransform, ((texture, material?) | (material, texture?))? )?
) >

<!ELEMENT Billboard (children)? >
<!ELEMENT Collision ( (children, proxy?) | (proxy, children?) )? >
<!ELEMENT ElevationGrid (
(color, ((normal, texCoord?) | (texCoord, normal?))? ) |
(normal, ((color, texCoord?) | (texCoord, color?))? ) |
(texCoord, ((normal, color?) | (color, normal?))? )?
) >
<!ELEMENT Group (children)? >
<!ELEMENT IndexedFaceSet (color?, coord?, normal?, texCoord?) >
<!ELEMENT IndexedLineSet ( (color, coord?) | (coord, color?) )? >
<!ELEMENT LOD (level)? >
<!ELEMENT PointSet ( (color, coord?) | (coord, color?) )? >
<!ELEMENT Shape ((appearance, geometry?) | (geometry, appearance?)? ) >
<!ELEMENT Sound (source)? >
<!ELEMENT Switch (choice)? >
<!ELEMENT Text (fontStyle)? >
<!ELEMENT Transform (children)? >

<!-- set opposing boolean to override normal tag definitions -->
<!ENTITY % WrapperTagOverride "IGNORE">
]]>
<!-- otherwise set opposing boolean to include normal tag definitions -->
<!ENTITY % WrapperTagOverride "INCLUDE">
<!-- ================================== -->

<!-- *** X3D DTD *** -->

<![%Vrml97Profile;[

<!-- ****** --> <![%WrapperTagOverride;[
<!ELEMENT Anchor ( %ChildrenNodes; )* >
<!-- ****** --> ]]>

<!ATTLIST Anchor 
description %SFString; #IMPLIED
parameter %MFString; #IMPLIED
url %MFString; #IMPLIED
bboxCenter %SFVec3f; "0 0 0"
bboxSize %SFVec3f; "-1 -1 -1"
DEF ID #IMPLIED 
USE IDREF #IMPLIED >
]]>
<![%CoreProfile;[

<!-- ****** --> <![%WrapperTagOverride;[
<!ELEMENT Anchor ( %ChildrenNodes; )* >
<!-- ****** --> ]]>

<!ATTLIST Anchor 
url %MFString; #IMPLIED
bboxCenter %SFVec3f; "0 0 0"
bboxSize %SFVec3f; "-1 -1 -1"
DEF ID #IMPLIED 
USE IDREF #IMPLIED >
]]>

<!-- ****** --> <![%WrapperTagOverride;[
<![%Vrml97Profile;[

<!-- Complete, ordered version of Appearance -->
<!-- 
<!ELEMENT Appearance (
((%MaterialNodes;)|%WildcardNodes;)?, ((%TextureNodes;)|%WildcardNodes;)?, ((%TextureTransformNodes;)|%WildcardNodes;)?
) >
-->

<!-- Complete, unordered, concisely enumerated version of Appearance by Heiko Grussbach -->
<!ELEMENT Appearance (
((%MaterialNodes;), (((%TextureNodes;),((%TextureTransformNodes;)|%WildcardNodes;)?) |
((%TextureTransformNodes;),((%TextureNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%TextureNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) )? )
| ((%TextureNodes;), ( ((%MaterialNodes;),((%TextureTransformNodes;)|%WildcardNodes;)?) |
((%TextureTransformNodes;),((%MaterialNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%MaterialNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) )? )
| ((%TextureTransformNodes;), (((%MaterialNodes;),((%TextureNodes;)|%WildcardNodes;)?) |
((%TextureNodes;),((%MaterialNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%MaterialNodes;)|(%TextureNodes;)|%WildcardNodes;)?) )? )
| (%WildcardNodes;, ( ((%MaterialNodes;),((%TextureNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) |
((%TextureNodes;),((%MaterialNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) |
((%TextureTransformNodes;),((%MaterialNodes;)|(%TextureNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%MaterialNodes;)|(%TextureNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) )? )
)? >
]]>
<![%CoreProfile;[

<!ELEMENT Appearance (
((%MaterialNodes;), (%TextureNodes;)? )
| ((%TextureNodes;), (%MaterialNodes;)? )
)? >
]]>
<!-- ****** --> ]]>

<!ATTLIST Appearance
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<![%Vrml97Profile;[

<!ELEMENT AudioClip EMPTY >
<!ATTLIST AudioClip
description %SFString; #IMPLIED
loop %SFBool; "false"
pitch %SFFloat; "1.0"
startTime %SFTime; "0"
stopTime %SFTime; "0"
url %MFString; #IMPLIED
duration %SFTime; "0.0"
isActive %SFBool; "false"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<![%Vrml97Profile;[

<!ELEMENT Background EMPTY>
<!ATTLIST Background
groundAngle %MFFloat; #IMPLIED
groundColor %MFColor; "0 0 0"
backUrl %MFString; #IMPLIED
bottomUrl %MFString; #IMPLIED
frontUrl %MFString; #IMPLIED
leftUrl %MFString; #IMPLIED
rightUrl %MFString; #IMPLIED
topUrl %MFString; #IMPLIED
skyAngle %MFFloat; #IMPLIED
skyColor %MFColor; "0 0 0"
bind %SFBool; "false"
bindTime %SFTime; "-1"
isBound %SFBool; "false"
DEF ID #IMPLIED 
USE IDREF #IMPLIED >
]]>
<![%CoreProfile;[

<!ELEMENT Background EMPTY>
<!ATTLIST Background
bottomUrl %MFString; #IMPLIED
skyAngle %MFFloat; #IMPLIED
skyColor %SFColor; "0 0 0"
bind %SFBool; "false"
bindTime %SFTime; "-1"
isBound %SFBool; "false"
DEF ID #IMPLIED 
USE IDREF #IMPLIED >
]]>

<![%Vrml97Profile;[

<!-- ****** --> <![%WrapperTagOverride;[
<!ELEMENT Billboard ( %ChildrenNodes; )* >
<!-- ****** --> ]]>
<!ATTLIST Billboard
axisOfRotation %SFVec3f; "0 1 0"
bboxCenter %SFVec3f; "0 0 0"
bboxSize %SFVec3f; "-1 -1 -1"
DEF ID #IMPLIED 
USE IDREF #IMPLIED>

<!ELEMENT Box EMPTY>
<!ATTLIST Box
size %SFVec3f; "2 2 2"
DEF ID #IMPLIED 
USE IDREF #IMPLIED>

]]>

<![%Vrml97Profile;[

<!-- ****** --> <![%WrapperTagOverride;[
<!ELEMENT Collision ( ( %ChildrenNodes; )*, (Proxy, ( %ChildrenNodes; )* )? ) >
<!-- ****** --> ]]>
<!ATTLIST Collision
collide %SFBool; "true"
bboxCenter %SFVec3f; "0 0 0"
bboxSize %SFVec3f; "-1 -1 -1"
collideTime %SFTime; "0.0"
DEF ID #IMPLIED 
USE IDREF #IMPLIED >

]]>

<!ELEMENT Color EMPTY >
<!ATTLIST Color
color %MFColor; #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<![%Vrml97Profile;[

<!ELEMENT ColorInterpolator EMPTY>
<!ATTLIST ColorInterpolator
fraction %SFFloat; "0"
key %MFFloat; #IMPLIED
keyValue %MFColor; #IMPLIED
value %SFColor; "0 0 0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT Cone EMPTY>
<!ATTLIST Cone
bottomRadius %SFFloat; "1"
height %SFFloat; "2"
side %SFBool; "true"
bottom %SFBool; "true"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<!ELEMENT Coordinate EMPTY >
<!ATTLIST Coordinate 
point %MFVec3f; #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT CoordinateInterpolator EMPTY>
<!ATTLIST CoordinateInterpolator
fraction %SFFloat; "0"
key %MFFloat; #IMPLIED
keyValue %MFVec3f; #IMPLIED
value %MFVec3f; "0 0 0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<![%Vrml97Profile;[

<!ELEMENT Cylinder EMPTY>
<!ATTLIST Cylinder 
bottom %SFBool; "true"
height %SFFloat; "2"
radius %SFFloat; "1"
side %SFBool; "true"
top %SFBool; "true"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT CylinderSensor EMPTY>
<!ATTLIST CylinderSensor
autoOffset %SFBool; "true"
diskAngle %SFFloat; "0.262"
enabled %SFBool; "true"
maxAngle %SFFloat; "-1"
minAngle %SFFloat; "0"
offset %SFFloat; "0"
isActive %SFBool; "false" 
rotation %SFRotation; "0 0 1 0"
trackPoint %SFVec3f; "0 0 0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!-- fieldValue resets default field values inside a ProtoInstance.
Initialization values for simple types go in the value attribute.
Contained content tags are only for initialization of Node or Nodes. -->

<!ELEMENT fieldValue ( %ProtoNodes; )* >
<!ATTLIST fieldValue
fieldName NMTOKEN #REQUIRED
value CDATA #IMPLIED
USE IDREF #IMPLIED>

]]>

<![%Vrml97Profile;[

<!ELEMENT DirectionalLight EMPTY>
<!ATTLIST DirectionalLight
ambientIntensity %SFFloat; "0"
color %SFColor; "1 1 1"
direction %SFVec3f; "0 0 -1"
intensity %SFFloat; "1"
on %SFBool; "true"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>
<![%CoreProfile;[

<!ELEMENT DirectionalLight EMPTY>
<!ATTLIST DirectionalLight
color %SFColor; "1 1 1"
direction %SFVec3f; "0 0 -1"
intensity %SFFloat; "1"
on %SFBool; "true"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<![%Vrml97Profile;[

<!-- ****** --> <![%WrapperTagOverride;[

<!-- Complete, ordered version of ElevationGrid -->
<!-- 
<!ELEMENT ElevationGrid (
((%ColorNodes;)|%WildcardNodes;)?, ((%NormalNodes;)|%WildcardNodes;)?, ((%TextureCoordinateNodes;)|%WildcardNodes;)?
) >
-->

<!-- Complete, more concisely enumerated unordered version of ElevationGrid by Heiko Grussbach -->
<!ELEMENT ElevationGrid (
((%ColorNodes;), ( ((%NormalNodes;),((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%NormalNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
| ((%NormalNodes;), ( ((%ColorNodes;),((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%ColorNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
| ((%TextureCoordinateNodes;), (((%ColorNodes;),((%NormalNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%ColorNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%NormalNodes;)|%WildcardNodes;)?) )? )
| (%WildcardNodes;, ( ((%ColorNodes;),((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%ColorNodes;)|(%NormalNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
)? >

<!-- ****** --> ]]>

<!ATTLIST ElevationGrid
height %MFFloat; #IMPLIED
ccw %SFBool; "true"
colorPerVertex %SFBool; "true"
creaseAngle %SFFloat; "0"
normalPerVertex %SFBool; "true"
solid %SFBool; "true"
xDimension %SFInt32; "0"
xSpacing %SFFloat; "1.0"
zDimension %SFInt32; "0"
zSpacing %SFFloat; "1.0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT ExternProtoDeclare ( field* ) >
<!ATTLIST ExternProtoDeclare
name NMTOKEN #REQUIRED
url %MFString; #REQUIRED
nodeTypeHint ( %AllVRML97Nodes; ) #IMPLIED>

<!ELEMENT Extrusion EMPTY >
<!ATTLIST Extrusion
beginCap %SFBool; "true"
ccw %SFBool; "true"
convex %SFBool; "true"
creaseAngle %SFFloat; "0.0"
crossSection %MFVec2f; "1 1 1 -1 -1 -1 -1 1 1 1"
endCap %SFBool; "true"
orientation %MFRotation; "0 0 1 0"
scale %MFVec2f; "1 1"
solid %SFBool; "true"
spine %MFVec3f; "0 0 0 0 1 0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!-- field is only used in a Script, ProtoDeclare or ExternProtoDeclare.
Initialization values for simple types go in the value attribute.
Contained content tags are only for initialization of Node or Nodes. -->

<!ELEMENT field ( %ProtoNodes; )* >
<!ATTLIST field
type ( %X3dFieldTypes; ) #REQUIRED
name NMTOKEN #REQUIRED
value CDATA #IMPLIED
IS NMTOKENS #IMPLIED
USE IDREF #IMPLIED
vrml97Hint (eventIn | eventOut | field | exposedField) #IMPLIED>

<!ELEMENT Fog EMPTY >
<!ATTLIST Fog
color %SFColor; "1 1 1"
fogType (LINEAR|EXPONENTIAL) "LINEAR"
visibilityRange %SFFloat; "0"
bind %SFBool; "false"
bindTime %SFTime; "-1"
isBound %SFBool; "false"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT FontStyle EMPTY >
<!ATTLIST FontStyle
family %MFString; '"SERIF"'
horizontal %SFBool; "true"
justify %MFString; '"BEGIN"'
language %SFString; #IMPLIED
leftToRight %SFBool; "true"
size %SFFloat; "1.0"
spacing %SFFloat; "1.0"
style (PLAIN|BOLD|ITALIC|BOLDITALIC) "PLAIN"
topToBottom %SFBool; "true"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!-- Minimum supported values mentioned in VRML 97 specification
family ' "SERIF" "SANS" "TYPEWRITER" '
justify ' "FIRST" "BEGIN" "MIDDLE" "END" ' -->

]]>

<!-- ****** --> <![%WrapperTagOverride;[
<!ELEMENT Group ( %ChildrenNodes; )* >
<!-- ****** --> ]]>
<!ATTLIST Group
bboxCenter %SFVec3f; "0 0 0"
bboxSize %SFVec3f; "-1 -1 -1"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT Header ( #PCDATA | meta )* >

<!ELEMENT ImageTexture EMPTY >
<!ATTLIST ImageTexture 
url %MFString; #IMPLIED
repeatS %SFBool; "true"
repeatT %SFBool; "true"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<![%Vrml97Profile;[

<!-- ****** --> <![%WrapperTagOverride;[

<!-- Complete, ordered version of IndexedFaceSet -->
<!-- 
<!ELEMENT IndexedFaceSet (
((%ColorNodes;)|%WildcardNodes;)?, ((%CoordinateNodes;)|%WildcardNodes;)?, ((%NormalNodes;)|%WildcardNodes;)?, ((%TextureCoordinateNodes;)|%WildcardNodes;)?
) >
-->

<!-- Complete, unordered, concisely enumerated version of IndexedFaceSet by Heiko Grussbach -->
<!ELEMENT IndexedFaceSet (
((%ColorNodes;), (
((%CoordinateNodes;), ( ((%NormalNodes;),((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%NormalNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
| ((%NormalNodes;), ( ((%CoordinateNodes;),((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%CoordinateNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%CoordinateNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
| ((%TextureCoordinateNodes;), (
((%CoordinateNodes;),((%NormalNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%CoordinateNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%CoordinateNodes;)|(%NormalNodes;)|%WildcardNodes;)?) )? )
| (%WildcardNodes;, ( ((%CoordinateNodes;),((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%CoordinateNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%CoordinateNodes;)|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? ) )? )
| ((%CoordinateNodes;), (
((%ColorNodes;), ( ((%NormalNodes;),((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%NormalNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
| ((%NormalNodes;), ( ((%ColorNodes;),((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%ColorNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
| ((%TextureCoordinateNodes;), (
((%ColorNodes;),((%NormalNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%ColorNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%NormalNodes;)|%WildcardNodes;)?) )? )
| (%WildcardNodes;, ( ((%ColorNodes;),((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? ) )? )
| ((%NormalNodes;), (
((%ColorNodes;), ( (Coordinate,((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%CoordinateNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%CoordinateNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
| ((%CoordinateNodes;),(((%ColorNodes;),((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%ColorNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
| ((%TextureCoordinateNodes;), (
((%ColorNodes;),((%CoordinateNodes;)|%WildcardNodes;)?) |
((%CoordinateNodes;),((%ColorNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%CoordinateNodes;)|%WildcardNodes;)?) )? )
| (%WildcardNodes;, ( ((%ColorNodes;),((%CoordinateNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%CoordinateNodes;),((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%ColorNodes;)|(%CoordinateNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%CoordinateNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? ) )? )
| ((%TextureCoordinateNodes;), (
((%ColorNodes;), ( ((%CoordinateNodes;),((%NormalNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%CoordinateNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%CoordinateNodes;)|(%NormalNodes;)|%WildcardNodes;)?) )? )
| ((%CoordinateNodes;),(((%ColorNodes;),((%NormalNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%ColorNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%NormalNodes;)|%WildcardNodes;)?) )? )
| ((%NormalNodes;), ( ((%ColorNodes;),((%CoordinateNodes;)|%WildcardNodes;)?) |
((%CoordinateNodes;),((%ColorNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%CoordinateNodes;)|%WildcardNodes;)?) )? )
| (%WildcardNodes;, ( ((%ColorNodes;),((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%CoordinateNodes;),((%ColorNodes;)|(%NormalNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%ColorNodes;)|(%CoordinateNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%CoordinateNodes;)|(%NormalNodes;)|%WildcardNodes;)?) )? ) )? )
| (%WildcardNodes;, (
((%ColorNodes;), ( ((%CoordinateNodes;),((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%CoordinateNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%CoordinateNodes;)|(%NormalNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%CoordinateNodes;)|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
| ((%CoordinateNodes;),(((%ColorNodes;),((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%ColorNodes;)|(%NormalNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
| ((%NormalNodes;), ( ((%ColorNodes;),((%CoordinateNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%CoordinateNodes;),((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%ColorNodes;)|(%CoordinateNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%CoordinateNodes;)|(%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
| ((%TextureCoordinateNodes;), (
((%ColorNodes;),((%CoordinateNodes;)|(%NormalNodes;)|%WildcardNodes;)?) |
((%CoordinateNodes;),((%ColorNodes;)|(%NormalNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%ColorNodes;)|(%CoordinateNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%CoordinateNodes;)|(%NormalNodes;)|%WildcardNodes;)?) )? )
| (%WildcardNodes;, ( ((%ColorNodes;),((%CoordinateNodes;)|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%CoordinateNodes;),((%ColorNodes;)|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%NormalNodes;),((%ColorNodes;)|(%CoordinateNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
((%TextureCoordinateNodes;),((%ColorNodes;)|(%CoordinateNodes;)|(%NormalNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%ColorNodes;)|(%CoordinateNodes;)|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? ) )? )
)? >

<!-- ****** --> ]]>

<!ATTLIST IndexedFaceSet
ccw %SFBool; "true"
colorIndex %MFInt32; #IMPLIED
colorPerVertex %SFBool; "true"
convex %SFBool; "true"
coordIndex %MFInt32; #IMPLIED
creaseAngle %SFFloat; "0"
normalIndex %MFInt32; #IMPLIED
normalPerVertex %SFBool; "true"
solid %SFBool; "true"
texCoordIndex %MFInt32; #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

]]>

<!-- ****** --> <![%WrapperTagOverride;[

<![%CoreProfile;[

<!ELEMENT IndexedFaceSet (
(Color, ((Coordinate, TextureCoordinate?) |
(TextureCoordinate, Coordinate?))? ) |
(Coordinate, ((Color, TextureCoordinate?) |
(TextureCoordinate, Color?))? ) |
(TextureCoordinate, ((Coordinate, Color?) |
(Color, Coordinate?))? )
)? >
<!ATTLIST IndexedFaceSet
ccw %SFBool; "true"
colorIndex %MFInt32; #IMPLIED
colorPerVertex %SFBool; "true"
convex %SFBool; #FIXED "true"
coordIndex %MFInt32; #IMPLIED
creaseAngle %SFFloat; "0"
normalPerVertex %SFBool; "true"
solid %SFBool; "true"
texCoordIndex %MFInt32; #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<!-- ****** --> ]]>

<!-- ****** --> <![%WrapperTagOverride;[

<![%Vrml97Profile;[

<!ELEMENT IndexedLineSet (
( (%ColorNodes;), ((%CoordinateNodes;) | %WildcardNodes;)? ) |
( (%CoordinateNodes;), ((%ColorNodes;) | %WildcardNodes;)? ) |
( %WildcardNodes;, ((%ColorNodes;) | (%CoordinateNodes;) | %WildcardNodes;)?)
)? >
]]>
<![%CoreProfile;[

<!ELEMENT IndexedLineSet (
( Color, Coordinate? ) |
( Coordinate, Color?)
)? >
]]>

<!-- ****** --> ]]>

<!ATTLIST IndexedLineSet
colorIndex %MFInt32; #IMPLIED
colorPerVertex %SFBool; "true"
coordIndex %MFInt32; #IMPLIED
lineWidth %SFFloat; "1.0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!-- Inline may contain nodes once url is loaded -->

<!ELEMENT Inline ( %SceneNodes; ) >
<!ATTLIST Inline 
url %MFString; #IMPLIED
bboxCenter %SFVec3f; "0 0 0"
bboxSize %SFVec3f; "-1 -1 -1"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<![%Vrml97Profile;[

<!-- ****** --> <![%WrapperTagOverride;[
<!ELEMENT LOD ( %ChildrenNodes; )* >
<!-- ****** --> ]]>
<!ATTLIST LOD
center %SFVec3f; "0 0 0"
range %MFFloat; #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<![%Vrml97Profile;[

<!ELEMENT Material EMPTY >
<!ATTLIST Material
ambientIntensity %SFFloat; "0.2"
diffuseColor %SFColor; "0.8 0.8 0.8"
emissiveColor %SFColor; "0 0 0"
shininess %SFFloat; "0.2"
specularColor %SFColor; "0 0 0"
transparency %SFFloat; "0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>
<![%CoreProfile;[

<!ELEMENT Material EMPTY >
<!ATTLIST Material
diffuseColor %SFColor; "0.8 0.8 0.8"
emissiveColor %SFColor; "0 0 0"
transparency %SFFloat; "0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<!-- *** XHTML exerpts to define meta tag, should convert
to external declaration when tools are robust *** -->

<!-- i18n, language, meta tag definitions from XHTML 1.0
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd -->

<!ENTITY % LanguageCode "NMTOKEN">
<!-- a language code, as per [RFC1766] -->

<!-- internationalization attributes
lang language code (backwards compatible)
xml:lang language code (as per XML 1.0 spec)
dir direction for weak/neutral text
-->
<!ENTITY % i18n
"lang %LanguageCode; #IMPLIED
xml:lang %LanguageCode; #IMPLIED
dir (ltr|rtl) #IMPLIED"
>

<!-- generic metadata information, matches HTML usage -->
<!ELEMENT meta EMPTY> 
<!ATTLIST meta
%i18n;
http-equiv CDATA #IMPLIED
name CDATA #IMPLIED
content CDATA #REQUIRED
scheme CDATA #IMPLIED
>

<![%Vrml97Profile;[

<!ELEMENT MovieTexture EMPTY >
<!ATTLIST MovieTexture
loop %SFBool; "true"
speed %SFFloat; "1.0"
startTime %SFTime; "0"
stopTime %SFTime; "0"
url %MFString; #IMPLIED
repeatS %SFBool; "true"
repeatT %SFBool; "true"
duration %SFTime; "0.0"
isActive %SFBool; "false"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<![%Vrml97Profile;[

<!ELEMENT NavigationInfo EMPTY >
<!ATTLIST NavigationInfo
avatarSize %MFFloat; "0.25 1.6 0.75"
headlight %SFBool; "true"
speed %SFFloat; "1"
type %MFString; #IMPLIED
visibilityLimit %SFFloat; "0"
bind %SFBool; "false"
bindTime %SFTime; "-1"
isBound %SFBool; "false"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>
<![%CoreProfile;[

<!ELEMENT NavigationInfo EMPTY >
<!ATTLIST NavigationInfo
headlight %SFBool; "true"
bind %SFBool; "false"
bindTime %SFTime; "-1"
isBound %SFBool; "false"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<![%Vrml97Profile;[

<!ELEMENT Normal EMPTY >
<!ATTLIST Normal
vector %MFVec3f; #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT NormalInterpolator EMPTY >
<!ATTLIST NormalInterpolator
fraction %SFFloat; "0"
key %MFFloat; #IMPLIED
keyValue %MFVec3f; #IMPLIED
value %MFVec3f; "0 0 0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<!ELEMENT OrientationInterpolator EMPTY >
<!ATTLIST OrientationInterpolator
fraction %SFFloat; "0"
key %MFFloat; #IMPLIED
keyValue %MFRotation; #IMPLIED
value %SFRotation; "0 0 1 0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<![%Vrml97Profile;[

<!ELEMENT PixelTexture EMPTY >
<!ATTLIST PixelTexture 
image %SFImage; "0 0 0"
repeatS %SFBool; "true"
repeatT %SFBool; "true"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT PlaneSensor EMPTY >
<!ATTLIST PlaneSensor 
autoOffset %SFBool; "true"
enabled %SFBool; "true"
maxPosition %SFVec2f; "-1 -1"
minPosition %SFVec2f; "0 0"
offset %SFVec3f; "0 0 0"
isActive %SFBool; "false"
trackPoint %SFVec3f; "0 0 0"
translation %SFVec3f; "0 0 0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT PointLight EMPTY >
<!ATTLIST PointLight
ambientIntensity %SFFloat; "0"
attenuation %SFVec3f; "1 0 0"
color %SFColor; "1 1 1"
intensity %SFFloat; "1"
location %SFVec3f; "0 0 0"
on %SFBool; "true"
radius %SFFloat; "100"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<!-- ****** --> <![%WrapperTagOverride;[

<![%Vrml97Profile;[
<!ELEMENT PointSet (
( (%ColorNodes;), ((%CoordinateNodes;) | %WildcardNodes;)? ) |
( (%CoordinateNodes;), ((%ColorNodes;) | %WildcardNodes;)? ) |
( %WildcardNodes;, ((%ColorNodes;) | (%CoordinateNodes;) | %WildcardNodes;)?)
)? >
]]>
<![%CoreProfile;[
<!ELEMENT PointSet (
( Color, Coordinate? ) |
( Coordinate, Color? )
)? >
]]>

<!-- ****** --> ]]>

<!ATTLIST PointSet
pointSize %SFFloat; "1.0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT PositionInterpolator EMPTY >
<!ATTLIST PositionInterpolator
fraction %SFFloat; "0"
key %MFFloat; #IMPLIED
keyValue %MFVec3f; #IMPLIED
value %SFVec3f; "0 0 0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<![%Vrml97Profile;[

<!-- choice of nodes contained in PROTO constrained by valid ( %ProtoNodes; )* rather than ( ANY )* ) > -->

<!ELEMENT ProtoDeclare ( field*, (ProtoDeclare|ExternProtoDeclare)*, ( %ProtoNodes; )+, ROUTE* ) >
<!ATTLIST ProtoDeclare
name NMTOKEN #REQUIRED> <!-- the name given this type of PROTO -->

<!ELEMENT ProtoInstance ( fieldValue*, ( %ProtoNodes; )* ) >
<!ATTLIST ProtoInstance
name NMTOKEN #REQUIRED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT ProximitySensor EMPTY >
<!ATTLIST ProximitySensor
center %SFVec3f; "0 0 0"
size %SFVec3f; "0 0 0"
enabled %SFBool; "true"
isActive %SFBool; "false"
position %SFVec3f; "0 0 0"
orientation %SFRotation; "0 0 1 0"
enterTime %SFTime; "0"
exitTime %SFTime; "0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!-- ****** --> <![%WrapperTagOverride;[
<!ELEMENT Proxy ( %ChildrenNodes; )? >
<!-- ****** --> ]]>
<!ATTLIST proxy
DEF ID #IMPLIED 
USE IDREF #IMPLIED >

]]>

<!ELEMENT ROUTE EMPTY >
<!ATTLIST ROUTE
fromNode IDREF #REQUIRED
fromField NMTOKEN #REQUIRED
toNode IDREF #REQUIRED
toField NMTOKEN #REQUIRED>

<!ELEMENT ScalarInterpolator EMPTY >
<!ATTLIST ScalarInterpolator
fraction %SFFloat; "0"
key %MFFloat; #IMPLIED
keyValue %MFFloat; #IMPLIED
value %SFFloat; "0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT Scene ( %SceneNodes; ) >

<!-- Script is similar to PROTO regarding user definition
of multiple fields -->

<![%Vrml97Profile;[

<!ELEMENT Script ( field* ) >
<!ATTLIST Script
url %MFString; #IMPLIED
directOutput %SFBool; "false"
mustEvaluate %SFBool; "false"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>


<!-- ****** --> <![%WrapperTagOverride;[ 

<![%Vrml97Profile;[
<!ELEMENT Shape (
( (%AppearanceNodes;), (( %GeometryNodes; ) | %WildcardNodes;)? ) |
( ( %GeometryNodes; ), ((%AppearanceNodes;) | %WildcardNodes;)? ) |
( %WildcardNodes;, (( %GeometryNodes; ) | (%AppearanceNodes;) | %WildcardNodes;)? )
)? >
]]>
<![%CoreProfile;[
<!ELEMENT Shape (
( (%AppearanceNodes;), ( %GeometryNodes; )? ) |
( ( %GeometryNodes; ), (%AppearanceNodes;)? )
)? >
]]>

<!-- ****** --> ]]>

<!ATTLIST Shape
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<![%Vrml97Profile;[

<!-- ****** --> <![%WrapperTagOverride;[ 

<!ELEMENT Sound ( %AudioClipNodes; | %MovieTextureNodes; | %WildcardNodes; ) >

<!-- ****** --> ]]>

<!ATTLIST Sound
direction %SFVec3f; "0 0 1"
intensity %SFFloat; "1"
location %SFVec3f; "0 0 0"
maxBack %SFFloat; "10"
maxFront %SFFloat; "10"
minBack %SFFloat; "1"
minFront %SFFloat; "1"
priority %SFFloat; "0"
spatialize %SFBool; "true"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT Sphere EMPTY >
<!ATTLIST Sphere
radius %SFFloat; "1"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT SphereSensor EMPTY >
<!ATTLIST SphereSensor 
autoOffset %SFBool; "true"
enabled %SFBool; "true"
offset %SFRotation; "0 1 0 0"
isActive %SFBool; "false"
rotation %SFRotation; "0 1 0 0"
trackPoint %SFVec3f; "0 0 0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT SpotLight EMPTY >
<!ATTLIST SpotLight
ambientIntensity %SFFloat; "0"
attenuation %SFVec3f; "1 0 0"
beamWidth %SFFloat; "1.570796"
color %SFColor; "1 1 1"
cutOffAngle %SFFloat; ".785398"
direction %SFVec3f; "0 0 -1"
intensity %SFFloat; "1"
location %SFVec3f; "0 0 0"
on %SFBool; "true"
radius %SFFloat; "100"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!-- ****** --> <![%WrapperTagOverride;[
<!ELEMENT Switch ( %ChildrenNodes; )* >
<!-- ****** --> ]]>
<!ATTLIST Switch
whichChoice %SFInt32; "-1"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!-- ****** --> <![%WrapperTagOverride;[
<!ELEMENT Text ( (%FontStyleNodes;)? | %WildcardNodes; ) >
<!-- ****** --> ]]>
<!ATTLIST Text
string %MFString; #IMPLIED
length %MFFloat; #IMPLIED
maxExtent %SFFloat; "0.0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<!ELEMENT TextureCoordinate EMPTY >
<!ATTLIST TextureCoordinate
point %MFVec2f; #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<![%Vrml97Profile;[

<!ELEMENT TextureTransform EMPTY >
<!ATTLIST TextureTransform
center %SFVec2f; "0 0"
rotation %SFFloat; "0"
scale %SFVec2f; "1 1"
translation %SFVec2f; "0 0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<!ELEMENT TimeSensor EMPTY >
<!ATTLIST TimeSensor
cycleInterval %SFTime; "1.0"
enabled %SFBool; "true"
loop %SFBool; "false"
startTime %SFTime; "0"
stopTime %SFTime; "0"
cycleTime %SFTime; "0"
fraction %SFFloat; "0"
isActive %SFBool; "false"
time %SFTime; "0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT TouchSensor EMPTY >
<!ATTLIST TouchSensor
enabled %SFBool; "true"
hitNormal %SFVec3f; "0 0 1"
hitPoint %SFVec3f; "0 0 0"
hitTexCoord %SFVec2f; "0 0"
isActive %SFBool; "false"
isOver %SFBool; "false"
touchTime %SFTime; "0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!-- ****** --> <![%WrapperTagOverride;[
<!ELEMENT Transform ( %ChildrenNodes; )* >
<!-- ****** --> ]]>

<!ATTLIST Transform 
center %SFVec3f; "0 0 0"
rotation %SFRotation; "0 0 1 0"
scale %SFVec3f; "1 1 1"
scaleOrientation %SFRotation; "0 0 1 0"
translation %SFVec3f; "0 0 0"
bboxCenter %SFVec3f; "0 0 0"
bboxSize %SFVec3f; "-1 -1 -1"
DEF ID #IMPLIED 
USE IDREF #IMPLIED >

<!ELEMENT USE EMPTY >
<!ATTLIST USE
node IDREF #REQUIRED>

<!ELEMENT Viewpoint EMPTY >
<!ATTLIST Viewpoint
fieldOfView %SFFloat; "0.785398"
jump %SFBool; "true"
orientation %SFRotation; "0 0 1 0"
position %SFVec3f; "0 0 10"
description %SFString; #IMPLIED
bind %SFBool; "false"
bindTime %SFTime; "-1"
isBound %SFBool; "false"
examine %SFVec3f; "0 0 0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
<!-- examine (point of rotation) is proposed addition, maybe belongs in NavigationInfo instead... -->

<![%Vrml97Profile;[

<!ELEMENT VisibilitySensor EMPTY >
<!ATTLIST VisibilitySensor 
center %SFVec3f; "0 0 0"
enabled %SFBool; "true"
size %SFVec3f; "0 0 0"
enterTime %SFTime; "0.0"
exitTime %SFTime; "0.0"
isActive %SFBool; "false"
DEF ID #IMPLIED
USE IDREF #IMPLIED>
]]>

<!ELEMENT WorldInfo EMPTY >
<!ATTLIST WorldInfo 
info %MFString; #IMPLIED
title %SFString; #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT X3D ( Header? , Scene ) >


<!-- ***** X3D Extensions, under development ***** -->


<![%X3dExtensions;[

<!-- ***** MultiTexture Extensions proposal by Rob Glidden ***** -->


<!-- Tool problems when invoking XHTML DTD here for img | object | iframe | div

<!ENTITY img PUBLIC
"-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<!ENTITY object PUBLIC
"-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<!ENTITY iframe PUBLIC
"-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<!ENTITY div PUBLIC
"-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
-->

<!-- Tool problems when invoking Structured Vector Graphics (SVG) DTD for svg

<!ENTITY svg SYSTEM
"http://www.w3.org/Graphics/SVG/SVG-19991203.dtd">

<!ELEMENT Surface (( %MaterialNodes; | img | object | iframe | div | svg | Scene3D ), TextureTransform?) >

-->


<!ELEMENT Surface (( %MaterialNodes; | Scene3D ), TextureTransform?) >
<!ATTLIST Surface
textureTransform IDREF #IMPLIED
mappingSurfaceCoordinates IDREF #IMPLIED
repeatS %SFBool; "true"
repeatT %SFBool; "true"
width %SFInt32; "0"
height %SFInt32; "0"
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT Scene3D ((Background, Viewpoint?) | (Viewpoint, Background?))? >
<!ATTLIST Scene3D
Root IDREF #REQUIRED
Viewpoint IDREF #REQUIRED
Background IDREF #REQUIRED
RenderInfo IDREF #REQUIRED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT MultiTexture ((Material, Surface*) | (Surface+, Material?))? >
<!ATTLIST MultiTexture
diffuseSurface IDREF #IMPLIED
ambientSurface IDREF #IMPLIED
bumpSurface IDREF #IMPLIED
material IDREF #IMPLIED
reflectionType (USER | USERCUBIC | USERSPHERE | REFLECT | CUBIC | SPHERE) "USER"
reflectionSurfaces IDREFS #IMPLIED
maskSurface IDREF #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT MultiTextureTree ( RenderOp ) >
<!ATTLIST MultiTextureTree
DEF ID #IMPLIED
USE IDREF #IMPLIED> 

<!-- what is Vector ??
<!ELEMENT RenderOp ((Surface | RenderOp), (Script, Vector?, Color? )? ) >
-->
<!ELEMENT RenderOp ((Surface | RenderOp), (Script, Color? )? ) >
<!ATTLIST RenderOp
factor %SFFloat; ".5"
type (ADD | MODULATE | MODULATE2 | LINEAR | SCRIPT) #REQUIRED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!-- Curtis Beeson's alternative: lightweight multitexture proposal
http://www.web3d.org/WorkingGroups/x3d-contributors/hypermail/1999/1855.html

Appearance {
exposedField SFMaterial diffuseMaterial
exposedField SFTexture lightMap
exposedField SFTexture diffuseMap
exposedField SFTexture envMap
exposedField SFTexture envMapMask
exposedField SFTextureTransform lightMapTransform
exposedField SFTextureTransform diffuseMapTransform
exposedField SFTextureTransform envMapTransform
exposedField SFTextureTransform envMapMaskTransform
exposedField SFEnum envMapType { SPHERICAL | CUBIC }
}
-->

<!ELEMENT MultiTextureAppearance
(((%MaterialNodes;), ((%TextureNodes;) | (%TextureTransformNodes;))*) |
(((%TextureNodes;) | (%TextureTransformNodes;))*, 
(%MaterialNodes;)?, 
((%TextureNodes;) | (%TextureTransformNodes;))*)
)? >
<!ATTLIST MultiTextureAppearance
diffuseMaterial IDREF #IMPLIED
lightMap IDREF #IMPLIED
diffuseMap IDREF #IMPLIED
envMap IDREF #IMPLIED
envMapMask IDREF #IMPLIED
lightMapTransform IDREF #IMPLIED
diffuseMapTransform IDREF #IMPLIED
envMapTransform IDREF #IMPLIED
envMapMaskTransform IDREF #IMPLIED
envMapType (SPHERICAL|CUBIC) #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!--
IndexedFaceSet {
eventIn MFInt32 set_colorIndex
eventIn MFInt32 set_coordIndex
eventIn MFInt32 set_normalIndex
eventIn MFInt32 set_texCoordIndex
exposedField SFNode color NULL
exposedField SFNode coord NULL
exposedField SFNode normal NULL
field SFBool ccw TRUE
field MFInt32 colorIndex [] # [-1,)
field SFBool colorPerVertex TRUE
field SFBool convex TRUE
field MFInt32 coordIndex [] # [-1,)
field SFFloat creaseAngle 0 # [0,)
field MFInt32 normalIndex [] # [-1,)
field SFBool normalPerVertex TRUE
field SFBool solid TRUE

(begin new stuff)
exposedField SFNode lightTexCoord NULL
field MFInt32 lightCoordIndex [] # [-1,)
exposedField SFNode diffuseTexCoord NULL
field MFInt32 diffusetexCoordIndex [] # [-1,)
exposedField SFNode envTexCoord NULL
field MFInt32 envTexCoordIndex [] # [-1,)
exposedField SFNode envMaskTexCoord NULL
field MFInt32 envMaskTexCoordIndex [] # [-1,)
}


-->

<!ELEMENT MultiTextureIndexedFaceSet (Color?, Coordinate*, Normal?, TextureCoordinate*) >
<!ATTLIST MultiTextureIndexedFaceSet
ccw %SFBool; "true"
colorIndex %MFInt32; #IMPLIED
colorPerVertex %SFBool; "true"
convex %SFBool; #FIXED "true"
coordIndex %MFInt32; #IMPLIED
creaseAngle %SFFloat; "0"
normalIndex %MFInt32; #IMPLIED
normalPerVertex %SFBool; "true"
solid %SFBool; "true"
texCoordIndex %MFInt32; #IMPLIED

lightTexCoord IDREF #IMPLIED
lightCoordIndex %MFInt32; #IMPLIED
diffuseTexCoord IDREF #IMPLIED
diffusetexCoordIndex %MFInt32; #IMPLIED
envTexCoord IDREF #IMPLIED
envTexCoordIndex %MFInt32; #IMPLIED
envMaskTexCoord IDREF #IMPLIED
envMaskTexCoordIndex %MFInt32; #IMPLIED

DEF ID #IMPLIED
USE IDREF #IMPLIED>

]]>

</XMP></BODY></HTML>

--- VRML separator bar ---