Extensible 3D (X3D) encodings
Part 1: Extensible Markup Language (XML) encoding

Annex B

(informative)

XML Document Type Definition (DTD) for X3D

--- X3D separator bar ---

cube B.1 Table of contents and introduction

B.1.1 Table of contents

This annex provides a detailed description of the grammar for each syntactic element in this part of ISO/IEC 14772. Table B.1 contains a table of contents that lists the topics in this clause:

Table B.1 — Table of contents

B.1 Table of contents and introduction
B.1.1 Table of contents
B.1.2 Introduction
B.2 x3d-3.0.dtd
B.3 x3d-3.0-InputOutputFields.dtd

B.1.2 Introduction

An XML Document Type Definition (DTD) defines syntax of an XML tagset [XML] using a grammar first derived as part of the Standard Generalized Markup Language [WEBSGML].

The X3D DTD has sufficient expressive power to:

The X3D DTD does not have sufficient expressive power to:

B.2 x3d-3.0.dtd

x3d-3.0.dtd is the X3D DTD.

<!--
# Extensible 3D (X3D) Document Type Definition (DTD) x3d-3.0.dtd
#
# X3D SpecificationDTD:
#
#	http://www.web3D.org/specifications/x3d-3.0.dtd
#
#	current version:  3.0.3
#
#	revised:          13 January 2003
#
# Typical system location for this resource:
#	file://c:/www.web3d.org/specifications/x3d-3.0.dtd
#	  file:///www.web3d.org/specifications/x3d-3.0.dtd
#
# changelog:
#	http://www.web3d.org/TaskGroups/x3d/translation/x3d-dtd-changelog.txt
#
# X3D editor testing this DTD:
#	http://www.web3d.org/TaskGroups/x3d/translation/README.X3D-Edit.html
#
# DTD version plans:
#	- 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
#	- DTD compliance exercised by NIST's VRML & XML test suites		0.8
#	-  pre-SIGGRAPH 2002 change series    					0.8.x
#	- post-SIGGRAPH 2002 change series    					0.9.x
#	- matching X3D abstract specification, consolidation of parts, and	3.0
#	  to include rename and possibly several profile-customized DTDs
#	- approval by task group, community, Web3D Consortium      		3.0
#
# Further information on the Extensible 3D (X3D) specification is available at
#	http://www.web3D.org/x3d.html
-->

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

<!ENTITY % ImmersiveProfile	"INCLUDE">
<!ENTITY % InterchangeProfile  	"IGNORE">	<!-- if InterchangeProfile INCLUDE, then IGNORE all others -->
<!ENTITY % InteractiveProfile  	"IGNORE">	<!-- still needed... -->

<!-- consider changing default from Full profile to Immersive profile,
     which would turn the following 5 component flags to IGNORE -->

<!ENTITY % DISComponent		"INCLUDE">
<!ENTITY % GeoSpatialComponent	"INCLUDE">
<!ENTITY % HAnimComponent 	"INCLUDE">
<!ENTITY % NurbsComponent	"INCLUDE">
<!ENTITY % LatticeXvlComponent 	"INCLUDE">

<!ENTITY % X3dInputOutputFields "INCLUDE">

<!ENTITY % X3dExtensions 	"IGNORE">

<!ENTITY % profileNames   "(Core|Interchange|Interactive|Immersive|MPEG4|Full)" >

<!ENTITY % X3dFieldTypes	  " SFBool | MFBool | SFColor | MFColor | SFColorRGBA | MFColorRGBA | SFDouble | MFDouble | SFFloat | MFFloat | SFImage | MFImage | SFInt32 | MFInt32 | SFNode | MFNode | SFRotation | MFRotation | SFString | MFString | SFTime | MFTime | SFVec2f | MFVec2f | SFVec3f | MFVec3f| SFVec3d | MFVec3d " >

<!ENTITY % SFBool	"(true|false)">	<!-- Boolean	-->
<!ENTITY % MFBool	"CDATA">	<!-- Booleans	-->
<!ENTITY % SFColor	"CDATA">	<!-- Color	-->
<!ENTITY % MFColor	"CDATA">	<!-- Colors	-->
<!ENTITY % SFColorRGBA	"CDATA">	<!-- ColorRGBA	-->
<!ENTITY % MFColorRGBA	"CDATA">	<!-- ColorsRGBA	-->
<!ENTITY % SFFloat	"CDATA">	<!-- Float	-->
<!ENTITY % MFFloat	"CDATA">	<!-- Floats	-->
<!ENTITY % SFDouble	"CDATA">	<!-- Double	-->
<!ENTITY % MFDouble	"CDATA">	<!-- Doubles	-->
<!ENTITY % SFImage	"CDATA">	<!-- Image data	-->
<!ENTITY % MFImage	"CDATA">	<!-- Image array-->
<!ENTITY % SFInt32	"CDATA">	<!-- Integer	-->
<!ENTITY % MFInt32	"CDATA">	<!-- Integers	-->
<!ENTITY % SFNode	"#PCDATA">	<!-- Node  - handled by tag rules -->
<!ENTITY % MFNode	"#PCDATA">	<!-- Nodes - handled by tag rules -->
<!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">	<!-- Vector2Float	-->
<!ENTITY % MFVec2f	"CDATA">	<!-- Vector2FloatArray -->
<!ENTITY % SFVec3f	"CDATA">	<!-- Vector3Float	-->
<!ENTITY % MFVec3f	"CDATA">	<!-- Vector3FloatArray -->
<!ENTITY % SFVec3d	"CDATA">	<!-- Vector3Double	-->
<!ENTITY % MFVec3d	"CDATA">	<!-- Vector3DoubleArray -->


<!-- MultiTexture modePrefix and modeSuffix will likely get different names -->
<!ENTITY % MultiTextureModes   			"(MODULATE|REPLACE|MODULATE2X|MODULATE4X|ADD|ADDSIGNED|ADDSIGNED2X|SUBTRACT|ADDSMOOTH|BLENDDIFFUSEALPHA|BLENDTEXTUREALPHA|BLENDFACTORALPHA|BLENDCURRENTALPHA|MODULATEALPHA_ADDCOLOR|MODULATEINVALPHA_ADDCOLOR|MODULATEINVCOLOR_ADDALPHA|OFF|SELECTARG1|SELECTARG2|DOTPRODUCT3)" >
<!ENTITY % MultiTextureSourceValues		"(PREVIOUS|DIFFUSE|SPECULAR|FACTOR)" >
<!ENTITY % MultiTextureFunctionValues		"(NONE|COMPLEMENT|ALPHAREPLICATE)" >
<!ENTITY % TextureCoordinateGeneratorModes	"(SPHERE|CAMERASPACENORMAL|CAMERASPACEPOSITION|CAMERASPACEREFLECTIONVECTOR|SPHERE-LOCAL|COORD|COORD-EYE|NOISE|NOISE-EYE|SPHERE-REFLECT|SPHERE-REFLECT-LOCAL)" >

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

<!ENTITY % AppearanceNodeExtensions  "" >
<!ENTITY % AudioClipNodeExtensions  "" >
<!ENTITY % BindableNodeExtensions  "" >
<!ENTITY % ColorNodeExtensions  "" >
<!ENTITY % CoordinateNodeExtensions  "" >
<!ENTITY % FontStyleNodeExtensions  "" >
<!ENTITY % EventUtilityNodeExtensions  "" >
<!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 % UrlNodeExtensions  "" >
<!ENTITY % WorldInfoNodeExtensions  "" >

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

<![%ImmersiveProfile;[
<!ENTITY % WildcardNodes       	" (ProtoInstance) " >
]]>

<![%InterchangeProfile;[
<!ENTITY % WildcardNodes       	" " > <!-- USE -->
]]>

<![%DISComponent;[
<!ENTITY % DISGroupingNodes	" EspduTransform | SignalPdu | ReceiverPdu | TransmitterPdu | " >
]]>

<![%GeoSpatialComponent;[
<!ENTITY % GeoCoordinateNode		" GeoCoordinate | " >
<!ENTITY % GeoElevationGridNode		" GeoElevationGrid | " >
<!ENTITY % GeoGroupingNodes		" GeoInline | GeoLocation | GeoLOD | " >
<!ENTITY % GeoMetadataNode		" GeoMetadata | " >
<!ENTITY % GeoOriginNode		" GeoOrigin | " >
<!ENTITY % GeoBehaviorNodes		" GeoPositionInterpolator | GeoTouchSensor | " >
<!ENTITY % GeoViewpointNode		" GeoViewpoint | " >
]]>

<![%HAnimComponent;[
<!ENTITY % HAnimGroupingNodes		" HAnimJoint | HAnimSegment | HAnimSite | HAnimHumanoid | " >
<!ENTITY % DisplacerNode		" HAnimDisplacer | " >
]]>

<![%NurbsComponent;[
<!ENTITY % NurbsGroupingNodes	" Contour2D | CoordinateDeformer | NurbsGroup | NurbsTextureSurface | " >
<!ENTITY % NurbsGeometryNodes	" NurbsCurve | NurbsCurve2D | NurbsSurface | ContourPolyline2D | TrimmedSurface | " >
<!ENTITY % NurbsInterpolators	" NurbsPositionInterpolator | " >
]]>

<![%LatticeXvlComponent;[
<!ENTITY % LatticeXvlGeometryNodes	" XvlShell | " >
]]>

<!-- otherwise set tag lists to null strings if not previously defined by DIS, GeoSpatial, HAnim, LatticeXvl, Nurbs -->

<!ENTITY % DISGroupingNodes		"" >
<!ENTITY % GeoCoordinateNode		"" >
<!ENTITY % GeoElevationGridNode		"" >
<!ENTITY % GeoGroupingNodes		"" >
<!ENTITY % GeoMetadataNode		"" >
<!ENTITY % GeoOriginNode		"" >
<!ENTITY % GeoBehaviorNodes		"" >
<!ENTITY % GeoViewpointNode		"" >
<!ENTITY % HAnimGroupingNodes		"" >
<!ENTITY % DisplacerNode		"" >
<!ENTITY % NurbsGroupingNodes		"" >
<!ENTITY % NurbsGeometryNodes		"" >
<!ENTITY % NurbsInterpolators		"" >
<!ENTITY % LatticeXvlGroupingNodes	"" >
<!ENTITY % LatticeXvlGeometryNodes	"" >

<!-- no further content-model extensions needed -->

<![%InterchangeProfile;[
<!ENTITY % AudioClipNodes "" >
<!ENTITY % FontStyleNodes "" >
<!ENTITY % EventUtilityNodes "" >
<!ENTITY % MovieTextureNodes "" >
<!ENTITY % NormalNodes "" >
<!ENTITY % ScriptNodes "" >
<!ENTITY % SoundNodes "" >
<!ENTITY % TextureCoordinateNodes "" >
<!ENTITY % TextureTransformNodes "" >
]]>

<!ENTITY % UrlNodes	" %UrlNodeExtensions; Anchor | AudioClip | GeoInline | ImageTexture | Inline | MovieTexture | Script " >

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

<![%ImmersiveProfile;[

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

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

<!ENTITY % EventUtilityNodes		" %EventUtilityNodeExtensions; BooleanFilter | BooleanSequencer | BooleanToggle | BooleanTrigger | IntegerSequencer | IntegerTrigger | TimeTrigger " >

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

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

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

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

<!ENTITY % TextureCoordinateNodes	" %TextureCoordinateNodeExtensions; TextureCoordinate | TextureCoordinateGenerator | MultiTextureCoordinate " >

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

]]>

<!-- Declarations appearing differently in X3dExtensions, ImmersiveProfile and InterchangeProfile -->

<!-- X3D Extensions (superset overriding some ImmersiveProfile declarations) not yet defined. -->

<![%X3dExtensions;[

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

]]>

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

<![%InterchangeProfile;[

<!ENTITY % AppearanceNodes  	" Appearance " >

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

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

<!ENTITY % ColorNodes       	" Color | ColorRGBA " >

<!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 " >

]]>

<![%ImmersiveProfile;[

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

<!ENTITY % BehaviorLeafNodes	" %InterpolatorNodeExtensions; %SensorNodeExtensions; %ScriptNodeExtensions; %GeoBehaviorNodes; %DisplacerNode; %NurbsInterpolators; %EventUtilityNodes; | ColorInterpolator | CoordinateInterpolator | CoordinateInterpolator2D | CylinderSensor |  KeySensor | LoadSensor | NormalInterpolator | OrientationInterpolator | PlaneSensor | PositionInterpolator | PositionInterpolator2D | ProximitySensor | ScalarInterpolator | Script | SphereSensor | StringSensor | TimeSensor | TouchSensor | VisibilitySensor " >

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

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

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

]]>

<![%ImmersiveProfile;[

<!ENTITY % Geometry2DNodes    	" Arc2D | ArcClose2D | Circle2D | Disk2D | Polyline2D | Polypoint2D | Rectangle2D | TriangleSet2D " >

<!ENTITY % GeometryNodes    	" %GeometryNodeExtensions; %GeometryNodesX3dExtensions; %GeoElevationGridNode; %NurbsGeometryNodes; %LatticeXvlGeometryNodes; %Geometry2DNodes; | Box | Cone | Cylinder | ElevationGrid | Extrusion | IndexedFaceSet | IndexedLineSet | PointSet | Sphere | Text | TriangleFanSet | TriangleSet | TriangleStripSet " >

<!ENTITY % GroupingNodes    	" %GroupingNodeExtensions; %DISGroupingNodes; %GeoGroupingNodes; %HAnimGroupingNodes; %NurbsGroupingNodes; %LatticeXvlGroupingNodes; Anchor | Billboard | Collision | Group | Inline | LOD | StaticGroup | Switch | Transform " >

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

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

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

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

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

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

]]>

<!-- These VRML 97 specification terms relate to an 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 -->

<![%InterchangeProfile;[

<!ENTITY % GeometricPropertyNodes " %ColorNodes; " >

<!ENTITY % AppearanceChildNodes	" %MaterialNodes; " >

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

<!ENTITY % ProtoNodes       	"" >

]]>

<![%ImmersiveProfile;[

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

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

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

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

]]>


<![%InterchangeProfile;[

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

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

]]>

<![%ImmersiveProfile;[

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

<!-- need any order for prototypes -->

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

]]>


<!ENTITY % AllVRML97Nodes   	" Anchor|Appearance|AudioClip|Background|BooleanFilter|BooleanSequencer|BooleanToggle|BooleanTrigger|Billboard|Box|Collision|Color|ColorInterpolator|Cone|Coordinate|CoordinateInterpolator|Cylinder|CylinderSensor|DirectionalLight|ElevationGrid|Extrusion|FillProperties|Fog|FontStyle|Group|head|ImageTexture|IndexedFaceSet|IndexedLineSet|Inline|IntegerSequencer|IntegerTrigger|KeySensor|LineProperties|LOD|Material|MovieTexture|MultiTextureCoordinate|NavigationInfo|Normal|NormalInterpolator|OrientationInterpolator|PixelTexture|PlaneSensor|PointLight|PointSet|PositionInterpolator|ProximitySensor|ScalarInterpolator|Scene|Script|Shape|Sound|Sphere|SphereSensor|SpotLight|StringSensor|StaticGroup|Switch|Text|TextureBackground|TextureCoordinate|TextureCoordinateGenerator|TextureTransform|TimeSensor|TimeTrigger|TouchSensor|Transform|TriangleFanSet|TriangleSet|TriangleStripSet|Viewpoint|VisibilitySensor|PositionInterpolator2D|CoordinateInterpolator2D|WorldInfo " >

<!ENTITY % AllGeoSpatialTags	" GeoCoordinate|GeoElevationGrid|GeoInline|GeoLocation|GeoLOD|GeoMetadata|GeoOrigin|GeoPositionInterpolator|GeoTouchSensor|GeoViewpoint " >

<!ENTITY % AllHAnimTags         " HAnimDisplacer|HAnimHumanoid|HAnimJoint|HAnimSegment|HAnimSite " >


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

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

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

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

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

<!ENTITY % KeyDeviceSensors	" " >

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

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



<!-- External DTDs now integrated.  -->

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

<![%ImmersiveProfile;[

<!-- isOver, touchTime added to Anchor to match multiple interface with TouchSensorNodeType -->

<!ELEMENT Anchor (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST Anchor 
	description %SFString; #IMPLIED
	parameter   %MFString; #IMPLIED
	url         %MFString; #IMPLIED
	bboxCenter  %SFVec3f;  "0 0 0"
	bboxSize    %SFVec3f;  "-1 -1 -1"
	containerField NMTOKEN "children"
	class       CDATA      #IMPLIED
	DEF         ID         #IMPLIED 
	USE         IDREF      #IMPLIED >
]]>

<![%InterchangeProfile;[

<!ELEMENT Anchor ( %ChildrenNodes; | %WildcardNodes; )* > 
<!ATTLIST Anchor 
	url         %MFString; #IMPLIED
	bboxCenter  %SFVec3f;  "0 0 0"
	bboxSize    %SFVec3f;  "-1 -1 -1"
	containerField NMTOKEN "children"
	class       CDATA      #IMPLIED
	DEF         ID         #IMPLIED 
	USE         IDREF      #IMPLIED >
]]>


<![%ImmersiveProfile;[

<!-- Complete, unordered, concisely enumerated version of Appearance by Heiko Grussbach.  Prepended either-order FillProperties/LineProperties. -->
<!ELEMENT Appearance (IS?,
(  (FillProperties, LineProperties?) | (LineProperties, FillProperties)? )?,
(  ((%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;)?) )? )
)? ) >
]]>


<![%InterchangeProfile;[

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

<!ATTLIST Appearance
	containerField NMTOKEN "appearance"
	class       CDATA       #IMPLIED
	DEF ID      #IMPLIED
	USE IDREF   #IMPLIED>

<![%ImmersiveProfile;[

<!ELEMENT AudioClip (IS?) >
<!ATTLIST AudioClip
	description %SFString; #IMPLIED
	loop        %SFBool;   "false"
	pitch       %SFFloat;  "1.0"
	startTime   %SFTime;   "0"
	stopTime    %SFTime;   "0"
	url         %MFString; #IMPLIED
	containerField NMTOKEN "source"
	class       CDATA      #IMPLIED
	DEF         ID         #IMPLIED
	USE         IDREF      #IMPLIED>
]]>


<!ELEMENT Background (IS?)>
<!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"
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF         ID         #IMPLIED 
	USE         IDREF      #IMPLIED >


<![%ImmersiveProfile;[

<!ELEMENT Billboard (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST Billboard
	axisOfRotation %SFVec3f; "0 1 0"
	bboxCenter     %SFVec3f; "0 0 0"
	bboxSize       %SFVec3f; "-1 -1 -1"
	containerField NMTOKEN "children"
	class          CDATA     #IMPLIED
	DEF            ID        #IMPLIED 
	USE            IDREF     #IMPLIED>

<!ELEMENT BooleanFilter (IS?) >
<!ATTLIST BooleanFilter
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT BooleanSequencer (IS?) >
<!ATTLIST BooleanSequencer
	key      %MFFloat; #IMPLIED
	keyValue %MFFloat; #IMPLIED
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT BooleanToggle (IS?) >
<!ATTLIST BooleanToggle
	toggle      %SFBool;  "false"
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT BooleanTrigger (IS?) >
<!ATTLIST BooleanTrigger
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>
]]>

<![%ImmersiveProfile;[

<!-- Geometry2D nodes -->

<!ELEMENT Arc2D (IS?)>
<!ATTLIST Arc2D
	radius     %SFFloat; "1"
	startAngle %SFFloat; "0"
	endAngle   %SFFloat; "1.570796"
	containerField NMTOKEN "geometry"
	class      CDATA    #IMPLIED
	DEF  ID    #IMPLIED 
	USE  IDREF #IMPLIED>

<!ELEMENT ArcClose2D (IS?)>
<!ATTLIST ArcClose2D
	radius      %SFFloat; "1"
	startAngle  %SFFloat; "0"
	endAngle    %SFFloat; "1.570796"
	closureType (PIE|CHORD) "PIE"
	containerField NMTOKEN "geometry"
	class       CDATA    #IMPLIED
	DEF  ID     #IMPLIED 
	USE  IDREF  #IMPLIED>

<!ELEMENT Circle2D (IS?)>
<!ATTLIST Circle2D
	radius     %SFFloat; "1"
	containerField NMTOKEN "geometry"
	class      CDATA    #IMPLIED
	DEF  ID    #IMPLIED 
	USE  IDREF #IMPLIED>

<!ELEMENT Disk2D (IS?)>
<!ATTLIST Disk2D
	innerRadius %SFFloat; "0"
	outerRadius %SFFloat; "1"
	containerField NMTOKEN "geometry"
	class       CDATA    #IMPLIED
	DEF  ID     #IMPLIED 
	USE  IDREF  #IMPLIED>

<!ELEMENT Polyline2D (IS?)>
<!ATTLIST Polyline2D
	lineSegments %MFVec2f; #IMPLIED
	containerField NMTOKEN "geometry"
	class        CDATA     #IMPLIED
	DEF  ID      #IMPLIED 
	USE  IDREF   #IMPLIED>

<!ELEMENT Polypoint2D (IS?)>
<!ATTLIST Polypoint2D
	points       %MFVec2f; #IMPLIED
	containerField NMTOKEN "geometry"
	class        CDATA     #IMPLIED
	DEF  ID      #IMPLIED 
	USE  IDREF   #IMPLIED>

<!ELEMENT Rectangle2D (IS?)>
<!ATTLIST Rectangle2D
	isFilled     %SFBool;  "true"
	size         %SFVec2f; "2 2"
	containerField NMTOKEN "geometry"
	class        CDATA     #IMPLIED
	DEF  ID      #IMPLIED 
	USE  IDREF   #IMPLIED>

<!ELEMENT TriangleSet2D (IS?)>
<!ATTLIST TriangleSet2D
	vertices     %MFVec2f; #IMPLIED
	containerField NMTOKEN "geometry"
	class        CDATA     #IMPLIED
	DEF  ID      #IMPLIED 
	USE  IDREF   #IMPLIED>
]]>

<![%ImmersiveProfile;[


<!ELEMENT Box (IS?)>
<!ATTLIST Box
	size %SFVec3f; "2 2 2"
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF  ID        #IMPLIED 
	USE  IDREF     #IMPLIED>

<!-- <!ELEMENT proxy ( %GroupingNodes; | Shape | %WildcardNodes; )? > -->

<!-- <!ELEMENT Collision ( ( %ChildrenNodes; | %WildcardNodes; )*, (proxy, ( %ChildrenNodes; | %WildcardNodes; )* )? )  > -->

<!ELEMENT Collision ( ( %ChildrenNodes; | %WildcardNodes; )* )  >
<!ATTLIST Collision
	enabled     %SFBool;  "true"
	bboxCenter  %SFVec3f; "0 0 0"
	bboxSize    %SFVec3f; "-1 -1 -1"
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF         ID        #IMPLIED 
	USE         IDREF     #IMPLIED >
]]>

<!ELEMENT Color (IS?) >
<!ATTLIST Color
	color       %MFColor; #IMPLIED
	class       CDATA     #IMPLIED
	containerField NMTOKEN "color"
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>

<!ELEMENT ColorRGBA (IS?) >
<!ATTLIST ColorRGBA
	color       %MFColorRGBA; #IMPLIED
	containerField NMTOKEN "color"
	class       CDATA     #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>

<![%ImmersiveProfile;[

<!ELEMENT ColorInterpolator (IS?)>
<!ATTLIST ColorInterpolator
	key         %MFFloat; #IMPLIED
	keyValue    %MFColor; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>
]]>

<!-- component(s) can extend an X3D profile, and may include choice of component level.
     still under discussion and development. -->
<!ELEMENT component EMPTY>  
<!ATTLIST component
  name        NMTOKEN        #REQUIRED
  level       CDATA          "1"
  originator  CDATA          #IMPLIED
  url         CDATA          #IMPLIED
  version     CDATA          #IMPLIED
  >

<![%ImmersiveProfile;[

<!ELEMENT Cone (IS?)>
<!ATTLIST Cone
	bottomRadius %SFFloat; "1"
	height       %SFFloat; "2"
	side         %SFBool;  "true"
	bottom       %SFBool;  "true"
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF          ID        #IMPLIED
	USE          IDREF     #IMPLIED>
]]>

<!ELEMENT Coordinate (IS?) >
<!ATTLIST Coordinate 
	point        %MFVec3f; #IMPLIED
	containerField NMTOKEN "coord"
	class       CDATA      #IMPLIED
	DEF          ID        #IMPLIED
	USE          IDREF     #IMPLIED>

<!ELEMENT CoordinateInterpolator (IS?)>
<!ATTLIST CoordinateInterpolator
	key      %MFFloat; #IMPLIED
	keyValue %MFVec3f; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<![%ImmersiveProfile;[

<!ELEMENT CoordinateInterpolator2D (IS?) >
<!ATTLIST CoordinateInterpolator2D
	key      %MFFloat; #IMPLIED
	keyValue %MFVec2f; #IMPLIED
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT Cylinder (IS?)>
<!ATTLIST Cylinder 
	bottom   %SFBool; "true"
	height   %SFFloat; "2"
	radius   %SFFloat; "1"
	side     %SFBool;  "true"
	top      %SFBool;  "true"
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT CylinderSensor (IS?)>
<!ATTLIST CylinderSensor
	description %SFString; #IMPLIED
	autoOffset %SFBool;     "true"
	diskAngle  %SFFloat;    "0.262"
	maxAngle   %SFFloat;    "-1"
	minAngle   %SFFloat;    "0"
	offset     %SFFloat;    "0"
	enabled    %SFBool;     "true"
	containerField NMTOKEN "children"
	class         CDATA     #IMPLIED
	DEF        ID           #IMPLIED
	USE        IDREF        #IMPLIED>

<!ELEMENT DirectionalLight (IS?)>
<!ATTLIST DirectionalLight
	ambientIntensity %SFFloat; "0"
	color            %SFColor; "1 1 1"
	direction        %SFVec3f; "0 0 -1"
	intensity        %SFFloat; "1"
	on               %SFBool;  "true"
	containerField NMTOKEN "children"
	class            CDATA     #IMPLIED
	DEF              ID        #IMPLIED
	USE              IDREF     #IMPLIED>
]]>

<![%InterchangeProfile;[

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

<![%ImmersiveProfile;[

<!-- Complete, concisely enumerated unordered version of ElevationGrid by Heiko Grussbach -->
<!ELEMENT ElevationGrid (IS?, (
   ((%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"
	containerField NMTOKEN "geometry"
	class           CDATA     #IMPLIED
	DEF             ID        #IMPLIED
	USE             IDREF     #IMPLIED>

<!ELEMENT ExternProtoDeclare ( field* ) >
<!ATTLIST ExternProtoDeclare
	name		NMTOKEN		#REQUIRED
	url		%MFString;	#REQUIRED
	appInfo 	%SFString;	#IMPLIED
	documentation	%SFString;	#IMPLIED>

<!ELEMENT Extrusion (IS?) >
<!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"
	containerField NMTOKEN "geometry"
	class        CDATA        #IMPLIED
	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
	name       	NMTOKEN  	#REQUIRED
	accessType (inputOnly | outputOnly | initializeOnly | inputOutput) #REQUIRED
	type 	   ( %X3dFieldTypes; ) #REQUIRED
	value      	CDATA   	#IMPLIED
  	xml:space  (default | preserve)	"default"
	appInfo 	%SFString;	#IMPLIED
	documentation	%SFString;	#IMPLIED>


<!-- fieldValue resets default field values inside a ProtoInstance.
     Initialization values for simple types go in the value attribute.  Otherwise
     contained-content tags are used for initialization of SFNode or MFNode values. -->

<!ELEMENT fieldValue ( %ProtoNodes; )* > 
<!ATTLIST fieldValue
	name	NMTOKEN	#REQUIRED
	value	CDATA	#IMPLIED>
]]>

<![%ImmersiveProfile;[

<!ELEMENT FillProperties (IS?) >
<!ATTLIST FillProperties
	fillStyle   (NONE|HATCHED) "NONE"
	hatchStyle  %SFInt32;      "1"
	hatchColor  %SFColor;      "1 1 1"
	containerField NMTOKEN "fillProperties"
	class           CDATA    #IMPLIED
	DEF             ID                   #IMPLIED
	USE             IDREF                #IMPLIED>

<!ELEMENT Fog (IS?) >
<!ATTLIST Fog
	color           %SFColor;            "1 1 1"
	fogType         (LINEAR|EXPONENTIAL) "LINEAR"
	visibilityRange %SFFloat;            "0"
	containerField NMTOKEN "children"
	class           CDATA    #IMPLIED
	DEF             ID                   #IMPLIED
	USE             IDREF                #IMPLIED>

<!ELEMENT FontStyle (IS?) >
<!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"
	containerField NMTOKEN "fontStyle"
	class       CDATA       #IMPLIED
	DEF         ID          #IMPLIED
	USE         IDREF       #IMPLIED>

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

<!ELEMENT Group (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST Group
	bboxCenter %SFVec3f; "0 0 0"
	bboxSize   %SFVec3f; "-1 -1 -1"
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF        ID        #IMPLIED
	USE        IDREF     #IMPLIED>

<!ELEMENT head ( component*, meta* ) >

<!ELEMENT ImageTexture (IS?) >
<!ATTLIST ImageTexture 
	url     %MFString; #IMPLIED
	repeatS %SFBool; "true"
	repeatT %SFBool; "true"
	containerField NMTOKEN "texture"
	class       CDATA       #IMPLIED
	DEF     ID       #IMPLIED
	USE     IDREF    #IMPLIED>

<!-- Complete, unordered, concisely enumerated version of IndexedFaceSet content model by Heiko Grussbach -->
<!ENTITY % ColorCoordinateNormalTextureCoordinateContentModel
"(IS?, (
 ((%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;), (	((%CoordinateNodes;),((%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;)?) )? ) )? )
)?  )" >

<![%ImmersiveProfile;[

<!ELEMENT IndexedFaceSet %ColorCoordinateNormalTextureCoordinateContentModel; >
<!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
	containerField NMTOKEN "geometry"
	class           CDATA     #IMPLIED
	DEF             ID        #IMPLIED
	USE             IDREF     #IMPLIED>

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

<![%InterchangeProfile;[

<!ELEMENT IndexedFaceSet ( ((%ColorNodes;), Coordinate?) | (Coordinate, (%ColorNodes;)?) )? >
<!ATTLIST IndexedFaceSet
	ccw             %SFBool;  "true"
	colorIndex      %MFInt32; #IMPLIED
	colorPerVertex  %SFBool;  "true"
	convex          %SFBool;  #IMPLIED
	coordIndex      %MFInt32; #IMPLIED
	creaseAngle     %SFFloat; "0"
	solid           %SFBool;  "true"
	containerField NMTOKEN "geometry"
	class           CDATA    #IMPLIED
	DEF             ID        #IMPLIED
	USE             IDREF     #IMPLIED>

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

<!ATTLIST IndexedLineSet
	colorIndex      %MFInt32; #IMPLIED
	colorPerVertex  %SFBool;  "true"
	coordIndex      %MFInt32; #IMPLIED
	containerField NMTOKEN "geometry"
	class           CDATA     #IMPLIED
	DEF             ID        #IMPLIED
	USE             IDREF     #IMPLIED>

<!ELEMENT Inline (IS?) >
<!ATTLIST Inline 
	load	%SFBool;  "true"
	url         %MFString; #IMPLIED
	bboxCenter  %SFVec3f;  "0 0 0"
	bboxSize    %SFVec3f;  "-1 -1 -1"
	containerField NMTOKEN "children"
	class       CDATA      #IMPLIED
	DEF         ID         #IMPLIED
	USE         IDREF      #IMPLIED>

<!ELEMENT EXPORT EMPTY >
<!ATTLIST EXPORT 
	   localDEF IDREF    #REQUIRED
		 AS NMTOKEN  #IMPLIED>

<!ELEMENT IMPORT EMPTY >
<!ATTLIST IMPORT 
	  InlineDEF IDREF    #REQUIRED
	exportedDEF NMTOKEN  #REQUIRED
	   	 AS ID       #IMPLIED>

<![%ImmersiveProfile;[

<!ELEMENT IntegerSequencer (IS?) >
<!ATTLIST IntegerSequencer
	key      %MFFloat; #IMPLIED
	keyValue %MFFloat; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT IntegerTrigger (IS?) >
<!ATTLIST IntegerTrigger
	integerKey   %SFInt32; "-1"
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT IS (connect)+ >

<!ELEMENT connect EMPTY >
<!ATTLIST connect 
	nodeField   NMTOKEN #REQUIRED
	protoField  NMTOKEN #REQUIRED>
]]>

<!ELEMENT KeySensor (IS?) >
<!ATTLIST KeySensor 
	enabled			%SFBool;	"true"
	containerField NMTOKEN "children"
	class         		CDATA    	#IMPLIED
	DEF			ID		#IMPLIED
	USE			IDREF		#IMPLIED>

<![%ImmersiveProfile;[

<!ELEMENT LineProperties (IS?) >
<!ATTLIST LineProperties
	lineStyle             %SFInt32;      "0"
	lineWidthScaleFactor  %SFFloat;      "0"
	containerField NMTOKEN "lineProperties"
	class           CDATA    #IMPLIED
	DEF             ID                   #IMPLIED
	USE             IDREF                #IMPLIED>
]]>

<!ELEMENT LoadSensor (IS?, ( %UrlNodes; | %WildcardNodes; )* ) >
<!ATTLIST LoadSensor 
	enabled			%SFBool;	"true"
	timeout 		%SFTime;	"0"
	containerField NMTOKEN "children"
	class         		CDATA    	#IMPLIED
	DEF			ID		#IMPLIED
	USE			IDREF		#IMPLIED>

<![%ImmersiveProfile;[

<!ELEMENT LOD (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST LOD
	center %SFVec3f; "0 0 0"
	range  %MFFloat; #IMPLIED
	bboxCenter     %SFVec3f; "0 0 0"
	bboxSize       %SFVec3f; "-1 -1 -1"
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF    ID        #IMPLIED
	USE    IDREF     #IMPLIED>

<!ELEMENT Material (IS?) >
<!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"
	containerField NMTOKEN "material"
	class       CDATA          #IMPLIED
	DEF              ID        #IMPLIED
	USE              IDREF     #IMPLIED>
]]>

<![%InterchangeProfile;[

<!ELEMENT Material EMPTY >
<!ATTLIST Material
	diffuseColor     %SFColor; "0.8 0.8 0.8"
	emissiveColor    %SFColor; "0 0 0"
	transparency     %SFFloat; "0"
	containerField NMTOKEN "material"
	class       	 CDATA     #IMPLIED
	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 [IETF RFC3066/BCP47] ftp://ftp.isi.edu/in-notes/bcp/bcp47.txt -->

<!-- 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, made attribute 'name' required -->
<!ELEMENT meta EMPTY>  
<!ATTLIST meta
  http-equiv  CDATA          #IMPLIED
  name        CDATA          #REQUIRED
  content     CDATA          #REQUIRED
  scheme      CDATA          #IMPLIED
  %i18n;
  >

<!-- FAQ:  MovieTexture containerField='source' when used as a Sound source -->

<![%ImmersiveProfile;[

<!ELEMENT MovieTexture (IS?) >
<!ATTLIST MovieTexture
	loop      %SFBool;   "false"
	speed     %SFFloat;  "1.0"
	startTime %SFTime;   "0"
	stopTime  %SFTime;   "0"
	url       %MFString; #IMPLIED
	repeatS   %SFBool;   "true"
	repeatT   %SFBool;   "true"
	containerField NMTOKEN "texture"
	class       CDATA       #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>

<!ELEMENT MultiTexture ( (IS?), (
   ((%MultiTextureChildTextures;)+, (%TextureTransformNodes;)*  )
 | ((%TextureTransformNodes;)+, (%MultiTextureChildTextures;)* )
)? ) > 
<!ATTLIST MultiTexture
	materialColor  %SFBool;   "false"
	materialAlpha  %SFBool;   "false"
	transparent    %SFBool;   "false"
	noMipMap       %SFBool;   "false"
	mode           %MultiTextureModes;		#IMPLIED
	source         %MultiTextureFunctionValues;	#IMPLIED
	function       %MultiTextureSourceValues;	#IMPLIED
	color          %SFColor;  "1 1 1"
	alpha          %SFFloat;  "1.0"
	containerField NMTOKEN "texture"
	class       CDATA       #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>

<!ELEMENT MultiTextureCoordinate ((IS?), (TextureCoordinate | TextureCoordinateGenerator)* ) >
<!ATTLIST MultiTextureCoordinate
	containerField NMTOKEN "texCoord"
	class       CDATA       #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>
]]>

<!ELEMENT NavigationInfo (IS?) >
<!ATTLIST NavigationInfo
	avatarSize      %MFFloat;  "0.25 1.6 0.75"
	headlight       %SFBool;   "true"
	speed           %SFFloat;  "1"
	type            %MFString; "WALK ANY"
	visibilityLimit %SFFloat;  "0"
	containerField NMTOKEN "children"
	class           CDATA      #IMPLIED
	DEF             ID         #IMPLIED
	USE             IDREF      #IMPLIED>


<![%ImmersiveProfile;[

<!ELEMENT Normal (IS?) >
<!ATTLIST Normal
	vector    %MFVec3f; #IMPLIED
	containerField NMTOKEN "normal"
	class     CDATA     #IMPLIED
	DEF       ID        #IMPLIED
	USE       IDREF     #IMPLIED>

<!ELEMENT NormalInterpolator (IS?) >
<!ATTLIST NormalInterpolator
	key      %MFFloat; #IMPLIED
	keyValue %MFVec3f; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>
]]>

<!ELEMENT OrientationInterpolator (IS?) >
<!ATTLIST OrientationInterpolator
	key      %MFFloat;    #IMPLIED
	keyValue %MFRotation; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF      ID           #IMPLIED
	USE      IDREF        #IMPLIED>

<![%ImmersiveProfile;[

<!ELEMENT PixelTexture (IS?) >
<!ATTLIST PixelTexture 
	image   %SFImage; "0 0 0"
	repeatS %SFBool;  "true"
	repeatT %SFBool;  "true"
	containerField NMTOKEN "texture"
	class       CDATA       #IMPLIED
	DEF     ID        #IMPLIED
	USE     IDREF     #IMPLIED>

<!ELEMENT PlaneSensor (IS?) >
<!ATTLIST PlaneSensor
	description %SFString; #IMPLIED
	autoOffset  %SFBool;  "true"
	enabled     %SFBool;  "true"
	maxPosition %SFVec2f; "-1 -1"
	minPosition %SFVec2f; "0 0"
	offset      %SFVec3f; "0 0 0"
	containerField NMTOKEN "children"
	class       CDATA     #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>

<!ELEMENT PointLight (IS?) >
<!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"
	containerField NMTOKEN "children"
	class            CDATA    	#IMPLIED
	DEF	  	 ID		#IMPLIED
	USE		 IDREF		#IMPLIED>

<!ELEMENT PointSet (IS?, (
	( (%ColorNodes;), ((%CoordinateNodes;) | %WildcardNodes;)? ) |
	( (%CoordinateNodes;), ((%ColorNodes;) | %WildcardNodes;)? ) |
	( %WildcardNodes;, ((%ColorNodes;) | (%CoordinateNodes;) | %WildcardNodes;)?)
)? ) >
]]>

<![%InterchangeProfile;[

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

<!ATTLIST PointSet
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF       ID        #IMPLIED
	USE       IDREF     #IMPLIED>

<!ELEMENT PositionInterpolator (IS?) >
<!ATTLIST PositionInterpolator
	key      %MFFloat; #IMPLIED
	keyValue %MFVec3f; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<![%ImmersiveProfile;[

<!ELEMENT PositionInterpolator2D (IS?) >
<!ATTLIST PositionInterpolator2D
	key      %MFFloat; #IMPLIED
	keyValue %MFVec2f; #IMPLIED
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT ProtoInterface ( field+ ) >

<!-- choice of required first node contained in ProtoBody constrained by valid ( %ProtoNodes; ) rather than %SceneNodes; ) >  -->

<!ELEMENT ProtoBody      ( ( %ProtoNodes; ), %SceneNodes; ) >

<!-- include previous and proposed forms until content is updated and evaluated.  work in progress. -->

<!ELEMENT ProtoDeclare (ProtoInterface? , ProtoBody) > <!-- ( | ( field*, ( %ProtoNodes; ), %SceneNodes; )) -->
<!ATTLIST ProtoDeclare
	name 		NMTOKEN   	#REQUIRED
	appInfo		%SFString;	#IMPLIED
	documentation	%SFString;	#IMPLIED>

<!ELEMENT ProtoInstance ( fieldValue*, IS? ) > <!-- %SceneNodes; -->
<!ATTLIST ProtoInstance
	name     NMTOKEN           #REQUIRED
	containerField NMTOKEN "children"
	class         CDATA        #IMPLIED
	DEF      ID                #IMPLIED
	USE      IDREF             #IMPLIED>

<!ELEMENT ProximitySensor (IS?) >
<!ATTLIST ProximitySensor
	center      %SFVec3f;    "0 0 0"
	size        %SFVec3f;    "0 0 0"
	enabled     %SFBool;     "true"
	containerField NMTOKEN "children"
	class       CDATA        #IMPLIED
	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 (IS?) >
<!ATTLIST ScalarInterpolator
	key      %MFFloat; #IMPLIED
	keyValue %MFFloat; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT Scene %SceneNodes; >


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

<![%ImmersiveProfile;[

<!-- script code should be included as CDATA sections.  watch out on content-model order, originally ( #PCDATA | field )* -->
<!-- can this mixed model be further tighted to allow only one IS, following zero or more field tags, prior to PCDATA?    -->
<!ELEMENT Script ( #PCDATA | field | IS )* >
<!ATTLIST Script
	url          %MFString; #IMPLIED
	directOutput %SFBool; "false"
	mustEvaluate %SFBool; "false"
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
  	xml:space    (default | preserve) #FIXED "preserve"
  	DEF ID       #IMPLIED
	USE IDREF    #IMPLIED>

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

<![%InterchangeProfile;[

<!ELEMENT Shape (
	( (%AppearanceNodes;), ( %GeometryNodes; )? ) |
	( ( %GeometryNodes; ), (%AppearanceNodes;)? )
)? >
]]>

<!ATTLIST Shape
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	bboxCenter %SFVec3f; "0 0 0"
	bboxSize   %SFVec3f; "-1 -1 -1"
	DEF ID       #IMPLIED
	USE IDREF    #IMPLIED>

<![%ImmersiveProfile;[

<!ELEMENT Sound (IS?, ( %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"
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF        ID        #IMPLIED
	USE        IDREF     #IMPLIED>

<!ELEMENT Sphere (IS?) >
<!ATTLIST Sphere
	radius %SFFloat; "1"
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF    ID        #IMPLIED
	USE    IDREF     #IMPLIED>

<!ELEMENT SphereSensor (IS?) >
<!ATTLIST SphereSensor
	description %SFString; #IMPLIED
	autoOffset %SFBool;     "true"
	enabled    %SFBool;     "true"
	offset     %SFRotation; "0 1 0 0"
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF        ID           #IMPLIED
	USE        IDREF        #IMPLIED>
]]>

<![%ImmersiveProfile;[

<!ELEMENT SpotLight (IS?) >
<!ATTLIST SpotLight
	ambientIntensity %SFFloat; "0"
	attenuation      %SFVec3f; "1 0 0"
	beamWidth        %SFFloat; "1.570796"
	color            %SFColor; "1 1 1"
	cutOffAngle      %SFFloat; "0.785398"
	direction        %SFVec3f; "0 0 -1"
	intensity        %SFFloat; "1"
	location         %SFVec3f; "0 0 0"
	on               %SFBool;  "true"
	radius           %SFFloat; "100"
	containerField NMTOKEN "children"
	class            CDATA    #IMPLIED
	DEF              ID        #IMPLIED
	USE              IDREF     #IMPLIED>

<!ELEMENT StaticGroup (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST StaticGroup
	bboxCenter %SFVec3f; "0 0 0"
	bboxSize   %SFVec3f; "-1 -1 -1"
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF        ID        #IMPLIED
	USE        IDREF     #IMPLIED>

<!ELEMENT StringSensor (IS?) >
<!ATTLIST StringSensor 
	enabled			%SFBool;	"true"
	deletionAllowed 	%SFBool;	"true"
	containerField NMTOKEN "children"
	class         		CDATA    #IMPLIED
	DEF			ID		#IMPLIED
	USE			IDREF		#IMPLIED>
]]>

<!ELEMENT Switch (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST Switch
	whichChoice %SFInt32; "-1"
	containerField NMTOKEN "children"
	bboxCenter       %SFVec3f;    "0 0 0"
	bboxSize         %SFVec3f;    "-1 -1 -1"
	class       CDATA       #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>

<![%ImmersiveProfile;[

<!ELEMENT Text (IS?, ( (%FontStyleNodes;)? | %WildcardNodes; ) ) >
<!ATTLIST Text
	string    %MFString; #IMPLIED
	length    %MFFloat;  #IMPLIED
	maxExtent %SFFloat;  "0.0"
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>

<!-- backTexture, bottomTexture, frontTexture, leftTexture, rightTexture, topTexture -->

<!-- could use rule for 0..6 children here -->

<!ELEMENT TextureBackground (IS?, (%TextureNodes;)* )>
<!ATTLIST TextureBackground
	groundAngle  %MFFloat;  #IMPLIED
	groundColor  %MFColor;  "0 0 0"
	skyAngle     %MFFloat;  #IMPLIED
	skyColor     %MFColor;  "0 0 0"
	transparency %MFFloat;  "0"
	containerField NMTOKEN "children"
	class        CDATA      #IMPLIED
	DEF          ID         #IMPLIED 
	USE          IDREF      #IMPLIED >
]]>

<!ELEMENT TextureCoordinate (IS?) >
<!ATTLIST TextureCoordinate
	point     %MFVec2f;  #IMPLIED
	containerField NMTOKEN "texCoord"
	class       CDATA    #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>

<!ELEMENT TimeSensor (IS?) >
<!ATTLIST TimeSensor
	cycleInterval %SFTime;  "1.0"
	enabled       %SFBool;  "true"
	loop          %SFBool;  "false"
	startTime     %SFTime;  "0"
	stopTime      %SFTime;  "0"
	pauseTime     %SFTime;  "0"
	resumeTime    %SFTime;  "0"
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF           ID        #IMPLIED
	USE           IDREF     #IMPLIED>

<![%ImmersiveProfile;[

<!ELEMENT TextureCoordinateGenerator (IS?) >
<!ATTLIST TextureCoordinateGenerator
	mode      %TextureCoordinateGeneratorModes;  "SPHERE"
	parameter %MFFloat;  #IMPLIED
	containerField NMTOKEN "texCoord"
	class       CDATA    #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>
	
<!ELEMENT TextureTransform (IS?) >
<!ATTLIST TextureTransform
	center      %SFVec2f; "0 0"
	rotation    %SFFloat; "0"
	scale       %SFVec2f; "1 1"
	translation %SFVec2f; "0 0"
	containerField NMTOKEN "textureTransform"
	class       CDATA     #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>
	
<!ELEMENT MultiTextureTransform ((IS?), (TextureTransform)* ) >
<!ATTLIST MultiTextureTransform
	containerField NMTOKEN "textureTransform"
	class       CDATA     #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>

]]>

<![%ImmersiveProfile;[

<!ELEMENT TimeTrigger (IS?) >
<!ATTLIST TimeTrigger
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT TouchSensor (IS?) >
<!ATTLIST TouchSensor
	description %SFString; #IMPLIED
	enabled      %SFBool;  "true"
	containerField NMTOKEN "children"
	class        CDATA     #IMPLIED
	DEF          ID        #IMPLIED
	USE          IDREF     #IMPLIED>
]]>

<!ELEMENT Transform (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!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"
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF              ID           #IMPLIED 
	USE              IDREF        #IMPLIED >

<!-- Triangle*Set nodes are Interchange profile -->

<!ELEMENT TriangleFanSet %ColorCoordinateNormalTextureCoordinateContentModel; >
<!ATTLIST TriangleFanSet
	ccw             %SFBool;  "true"
	colorPerVertex  %SFBool;  "true"
	creaseAngle     %SFFloat; "0"
	fanCount        %MFInt32; #IMPLIED
	normalPerVertex %SFBool;  "true"
	solid           %SFBool;  "true"
	containerField NMTOKEN "geometry"
	class           CDATA     #IMPLIED
	DEF             ID        #IMPLIED
	USE             IDREF     #IMPLIED>

<!ELEMENT TriangleSet %ColorCoordinateNormalTextureCoordinateContentModel; >
<!ATTLIST TriangleSet
	ccw             %SFBool;  "true"
	colorPerVertex  %SFBool;  "true"
	creaseAngle     %SFFloat; "0"
	normalPerVertex %SFBool;  "true"
	solid           %SFBool;  "true"
	containerField NMTOKEN "geometry"
	class           CDATA     #IMPLIED
	DEF             ID        #IMPLIED
	USE             IDREF     #IMPLIED>

<!ELEMENT TriangleStripSet %ColorCoordinateNormalTextureCoordinateContentModel; >
<!ATTLIST TriangleStripSet 
	ccw             %SFBool;  "true"
	colorPerVertex  %SFBool;  "true"
	creaseAngle     %SFFloat; "0"
	normalPerVertex %SFBool;  "true"
	solid           %SFBool;  "true"
	stripCount      %MFInt32; #IMPLIED
	containerField NMTOKEN "geometry"
	class           CDATA     #IMPLIED
	DEF             ID        #IMPLIED
	USE             IDREF     #IMPLIED>

<!ELEMENT Viewpoint (IS?) >
<!ATTLIST Viewpoint
	fieldOfView %SFFloat;    "0.785398"
	jump        %SFBool;     "true"
	orientation %SFRotation; "0 0 1 0"
	position    %SFVec3f;    "0 0 10"
	description %SFString;   #IMPLIED
	centerOfRotation  %SFVec3f; "0 0 0"
	containerField NMTOKEN "children"
	class       CDATA        #IMPLIED
	DEF         ID           #IMPLIED
	USE         IDREF        #IMPLIED>
	
<!-- centerOfRotation point relates to NavigationInfo EXAMINE mode. -->

<![%ImmersiveProfile;[

<!ELEMENT VisibilitySensor (IS?) >
<!ATTLIST VisibilitySensor 
	center    %SFVec3f; "0 0 0"
	enabled   %SFBool;  "true"
	size      %SFVec3f; "0 0 0"
	containerField NMTOKEN "children"
	class     CDATA     #IMPLIED
	DEF       ID        #IMPLIED
	USE       IDREF     #IMPLIED>
]]>

<!ELEMENT WorldInfo (IS?) >
<!ATTLIST WorldInfo 
	info  %MFString; #IMPLIED
	title %SFString; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF ID       #IMPLIED
	USE IDREF    #IMPLIED>

<!ELEMENT X3D    ( head? , Scene ) >
<!ATTLIST X3D
	profile %profileNames; #IMPLIED
	version %SFString;     #FIXED    "3.0">


<![%DISComponent;[


<!--
		DIS-Java-VRML 1.2 Document Type Definition (DTD)

 Description:	Define the DIS tag and attribute profile for X3D.
		These X3D native nodes correspond to VRML ExternProto declarations.

 		Elements in this tagset are enabled by setting the 
		DIS-Java-VRMLProfile entity to "INCLUDE" at the top of an 
		X3D scene file, as shown in several examples.  This flag then 
		triggers inclusion of the DIS-Java-VRML tags in the 
		x3d-3.0.dtd tagset.

 Status:	Supports the following Protocol Data Units (PDUs):
 		- EspduTransform (Entity State, Collision, Detonation, Fire)
 		- Radio communications family:  ReceiverPdu, SignalPdu, Transmitter
 
 		Testing results need updating to match new node signatures.

 Authors:	Don Brutzman and Dave Laflam

 References:	http://www.web3D.org/WorkingGroups/vrtp/dis-java-vrml

 Created:	15 October 2000

-->

<!ELEMENT EspduTransform (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST EspduTransform

	marking 	 		%SFString;	#IMPLIED
	siteID  	 		%SFInt32;	#IMPLIED
	applicationID	 		%SFInt32;	#IMPLIED
	entityID	 		%SFInt32;	#IMPLIED
	
	forceID		 		%SFInt32;	#IMPLIED
	entityKind	 		%SFInt32;	#IMPLIED
	entityDomain	 		%SFInt32;	#IMPLIED
	entityCountry	 		%SFInt32;	#IMPLIED
	entityCategory	 		%SFInt32;	#IMPLIED
	entitySubCategory 		%SFInt32;	#IMPLIED
	entitySpecific	 		%SFInt32;	#IMPLIED
	entityExtra	 		%SFInt32;	#IMPLIED

	readInterval	 		%SFTime;	"0.1"
	writeInterval	 		%SFTime;	"1"
	networkMode	 		(standAlone|networkReader|networkWriter)	"networkReader"

	translation	 		%SFVec3f;	"0 0 0"
	rotation	 		%SFRotation;	"0 0 1 0"
	scale   	 		%SFVec3f;	"1 1 1"
	scaleOrientation 		%SFRotation;	"0 0 1 0"
	bboxCenter	 		%SFVec3f;	"0 0 0"
	bboxSize	 		%SFVec3f;	"-1 -1 -1"
	center  	 		%SFVec3f;	"0 0 0"

	address 	 		%SFString;	#IMPLIED
	port    	 		%SFInt32;	#IMPLIED
	multicastRelayHost 		%SFString;	#IMPLIED
	multicastRelayPort 		%SFInt32;	#IMPLIED
	rtpHeaderExpected  		%SFBool;	"false"

	deadReckoning  			%SFBool;	"true"
	linearVelocity			%SFVec3f;	#IMPLIED
	linearAcceleration		%SFVec3f;	#IMPLIED
	
	fired1   			%SFBool;	"false"
	fired2   			%SFBool;	"false"
	munitionStartPoint 		%SFVec3f;	#IMPLIED
	munitionEndPoint   		%SFVec3f;	#IMPLIED
	munitionSiteID  	 	%SFInt32;	#IMPLIED
	munitionApplicationID	 	%SFInt32;	#IMPLIED
	munitionEntityID	 	%SFInt32;	#IMPLIED
	fireMissionIndex	 	%SFInt32;	#IMPLIED
	warhead			 	%SFInt32;	#IMPLIED
	fuse			 	%SFInt32;	#IMPLIED
	munitionQuantity	 	%SFInt32;	#IMPLIED
	firingRate		 	%SFInt32;	#IMPLIED
	firingRange		 	%SFInt32;	#IMPLIED

	articulationParameterCount 		  %SFInt32;	#IMPLIED
	articulationParameterDesignatorArray 	  %MFInt32;	#IMPLIED
	articulationParameterChangeIndicatorArray %MFInt32;	#IMPLIED
	articulationParameterIdPartAttachedArray  %MFInt32;	#IMPLIED
	articulationParameterTypeArray 		  %MFInt32;	#IMPLIED
	articulationParameterArray 		%MFFloat;	#IMPLIED

	containerField NMTOKEN "children"
	class         			CDATA		""
	DEF   				ID		#IMPLIED 
	USE             		IDREF		#IMPLIED >

<!-- also included in EspduTransform:  CollisionPdu DetonatePdu FirePdu -->

<!ELEMENT ReceiverPdu (IS?) >
<!ATTLIST ReceiverPdu 

	whichGeometry			%SFInt32;	#IMPLIED

	siteID				%SFInt32;	#IMPLIED
	applicationID			%SFInt32;	#IMPLIED
	entityID			%SFInt32;	#IMPLIED
	readInterval			%SFTime;	"1"
	writeInterval			%SFTime;	"0"
	networkMode	 		(standAlone|networkReader|networkWriter)	"networkReader"

	address				%SFString;	#IMPLIED
	port				%SFInt32;	#IMPLIED
	multicastRelayHost		%SFString;	#IMPLIED
	multicastRelayPort		%SFInt32;	#IMPLIED
	rtpHeaderExpected		%SFBool;	"false"

	radioID				%SFInt32;	#IMPLIED
	receiverPower			%SFFloat;	#IMPLIED
	receiverState			%SFInt32;	#IMPLIED
	transmitterSiteID		%SFInt32;	#IMPLIED
	transmitterApplicationID	%SFInt32;	#IMPLIED
	transmitterEntityID		%SFInt32;	#IMPLIED
	transmitterRadioID		%SFInt32;	#IMPLIED

	containerField NMTOKEN "children"
	class         			CDATA		""
	DEF   				ID		#IMPLIED 
	USE             		IDREF		#IMPLIED >


<!ELEMENT SignalPdu (IS?) >
<!ATTLIST SignalPdu
	whichGeometry			%SFInt32;	#IMPLIED

	siteID				%SFInt32;	#IMPLIED
	applicationID			%SFInt32;	#IMPLIED
	entityID			%SFInt32;	#IMPLIED
	readInterval			%SFTime;	"1"
	writeInterval			%SFTime;	"0"
	networkMode	 		(standAlone|networkReader|networkWriter)	"networkReader"

	address				%SFString;	#IMPLIED
	port				%SFInt32;	#IMPLIED
	multicastRelayHost		%SFString;	#IMPLIED
	multicastRelayPort		%SFInt32;	#IMPLIED
	rtpHeaderExpected		%SFBool;	"false"

	radioID				%SFInt32;	#IMPLIED
	encodingScheme			%SFInt32;	#IMPLIED
	tdlType				%SFInt32;	#IMPLIED
	sampleRate			%SFInt32;	#IMPLIED
	samples				%SFInt32;	#IMPLIED
	dataLength			%SFInt32;	#IMPLIED
	data				%MFInt32;	#IMPLIED

	containerField NMTOKEN "children"
	class         			CDATA		""
	DEF   				ID		#IMPLIED 
	USE             		IDREF		#IMPLIED >


<!ELEMENT TransmitterPdu (IS?) >
<!ATTLIST TransmitterPdu 

	whichGeometry			%SFInt32;	#IMPLIED

	siteID				%SFInt32;	#IMPLIED
	applicationID			%SFInt32;	#IMPLIED
	entityID			%SFInt32;	#IMPLIED
	readInterval			%SFTime;	"1"
	writeInterval			%SFTime;	"0"
	networkMode	 		(standAlone|networkReader|networkWriter)	"networkReader"

	address				%SFString;	#IMPLIED
	port				%SFInt32;	#IMPLIED
	multicastRelayHost		%SFString;	#IMPLIED
	multicastRelayPort		%SFInt32;	#IMPLIED
	rtpHeaderExpected		%SFBool;	"false"

	radioID				%SFInt32;	#IMPLIED
	antennaLocation			%SFVec3f;	#IMPLIED
	antennaPatternLength		%SFInt32;	#IMPLIED
	antennaPatternType		%SFInt32;	#IMPLIED
	cryptoKeyId			%SFInt32;	#IMPLIED
	cryptoSytem			%SFInt32;	#IMPLIED
	frequency			%SFInt32;	#IMPLIED
	inputSource			%SFInt32;	#IMPLIED
	lengthOfModulationParameters	%SFInt32;	#IMPLIED
	modulationTypeDetail		%SFInt32;	#IMPLIED
	modulationTypeMajor		%SFInt32;	#IMPLIED
	modulationTypeSpreadSpectrum	%SFInt32;	#IMPLIED
	modulationTypeSystem		%SFInt32;	#IMPLIED
	power				%SFInt32;	#IMPLIED
	radioEntityTypeCategory		%SFInt32;	#IMPLIED
	radioEntityTypeCountry		%SFInt32;	#IMPLIED
	radioEntityTypeDomain		%SFInt32;	#IMPLIED
	radioEntityTypeKind		%SFInt32;	#IMPLIED
	radioEntityTypeNomenclature	%SFInt32;	#IMPLIED
	radioEntityTypeNomenclatureVersion %SFInt32;	#IMPLIED
	relativeAntennaLocation		%SFVec3f;	#IMPLIED
	transmitFrequencyBandwidth	%SFInt32;	#IMPLIED
	transmitState			%SFInt32;	#IMPLIED

	containerField NMTOKEN "children"
	class         			CDATA		""
	DEF   				ID		#IMPLIED 
	USE             		IDREF		#IMPLIED >

]]>


<![%GeoSpatialComponent;[

<!--
		GeoSpatial (GeoVrml 1.0) Document Type Definition (DTD)

 Description:	Define the GeoSpatial tag and attribute profile for X3D.
		These X3D native nodes correspond to VRML ExternProto declarations.

 		Elements in this tagset are enabled by setting the 
		GeoSpatialProfile entity to "INCLUDE" at the top of an 
		X3D scene file, as shown in several examples such as
		examples/GeoSpatial/newGeoSpatialScene.xml.  This flag then 
		triggers inclusion of the GeoSpatial tags in the 
		x3d-compromise.dtd tagset.  Thus the GeoSpatial.dtd
		demonstrates X3D extensibility for profiles.

 Status:	Testing results satisfactory.  Compact form also needed.

 Authors:	Martin Reddy and GeoVrml Working Group for GeoVrml specifications
		Don Brutzman produced XML encoding for X3D
 
 Reference:	GeoVrml 1.0 Specification, http://www.geovrml.org/1.0

 Address:	http://www.web3D.org/TaskGroups/x3d/translation/GeoSpatial-compact.dtd

 Created:	16 May 2000

 Revised:	2 January 2003
-->

<!-- supported GeoSystem values:  GD (GDC), UTM, GC (GCC) -->

<!ENTITY % GeoSystemType ' CDATA "GDC" ' >

<!-- field tags for contained nodes:  only rootNode needed -->

<!-- GeoSpatial's rootNode depends on profile-specific parameter-entity definitions,
     so it appears inside the X3D DTD rather than in GeoSpatial.dtd
 -->

<!ELEMENT rootNode ( %ChildrenNodes; | %WildcardNodes; )* >

<!-- element nodes -->

<!ELEMENT GeoCoordinate ( IS?, GeoOrigin? ) >  <!-- X3DCoordinateNodeType -->
<!ATTLIST GeoCoordinate
	geoSystem	%GeoSystemType;
	point		%MFVec3d;	#IMPLIED
	nodeType	NMTOKEN		#FIXED	"Coordinate"
	containerField NMTOKEN "coord"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!--
   (GeoOrigin, ((color,	((normal,texCoord?) | (texCoord,normal)?)?) |
		(normal,((color,texCoord?) | (texCoord,color?))?) |
		(texCoord,((color,normal?) | (normal,color?))?) )? )
 | (color, (	(GeoOrigin, ((normal,texCoord?) | (texCoord,normal)?)?) |
		(normal,((GeoOrigin,texCoord?) | (texCoord,GeoOrigin?))?) |
		(texCoord,((GeoOrigin,normal?) | (normal,GeoOrigin?))?) )? )
 | (normal, (	(color,	((GeoOrigin,texCoord?) | (texCoord,GeoOrigin?))?) |
		(GeoOrigin,((color,texCoord?) | (texCoord,color?))?) |
		(texCoord,((color,GeoOrigin?) | (GeoOrigin,color?))?) )? )
 | (texCoord, (	(color,	((GeoOrigin,normal?) | (normal,GeoOrigin?))?) |
		(GeoOrigin,((color,normal?) | (normal,color?))?) |
		(normal,((color,GeoOrigin?) | (GeoOrigin,color?))?) )? )?
-->

<!ELEMENT GeoElevationGrid (IS?, (
 ((%ColorNodes;), (
 	(GeoOrigin, (	((%NormalNodes;),((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
				((%TextureCoordinateNodes;),((%NormalNodes;)|%WildcardNodes;)?) |
				(%WildcardNodes;,((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
	| ((%NormalNodes;), (	(GeoOrigin,((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
	   			((%TextureCoordinateNodes;),(GeoOrigin|%WildcardNodes;)?) |
	   			(%WildcardNodes;,(GeoOrigin|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
	| ((%TextureCoordinateNodes;), (
				(GeoOrigin,((%NormalNodes;)|%WildcardNodes;)?) |
	 			((%NormalNodes;),(GeoOrigin|%WildcardNodes;)?) |
	 			(%WildcardNodes;,(GeoOrigin|(%NormalNodes;)|%WildcardNodes;)?) )? )
	| (%WildcardNodes;, (	(GeoOrigin,((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
	 			((%NormalNodes;),(GeoOrigin|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
	 			((%TextureCoordinateNodes;),((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
	 			(%WildcardNodes;,(GeoOrigin|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? ) )? )
 | (GeoOrigin, (
	((%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;), (	(GeoOrigin,((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
 				((%TextureCoordinateNodes;),(GeoOrigin|%WildcardNodes;)?) |
 				(%WildcardNodes;,(GeoOrigin|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
 	| (GeoOrigin,(((%ColorNodes;),((%TextureCoordinateNodes;)|%WildcardNodes;)?) |
 				((%TextureCoordinateNodes;),((%ColorNodes;)|%WildcardNodes;)?) |
 				(%WildcardNodes;,((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
 	| ((%TextureCoordinateNodes;), (
 				((%ColorNodes;),(GeoOrigin|%WildcardNodes;)?) |
 				(GeoOrigin,((%ColorNodes;)|%WildcardNodes;)?) |
 				(%WildcardNodes;,((%ColorNodes;)|GeoOrigin|%WildcardNodes;)?) )? )
 	| (%WildcardNodes;, (	((%ColorNodes;),(GeoOrigin|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
 				(GeoOrigin,((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
 				((%TextureCoordinateNodes;),((%ColorNodes;)|GeoOrigin|%WildcardNodes;)?) |
 				(%WildcardNodes;,((%ColorNodes;)|GeoOrigin|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? ) )? )
 | ((%TextureCoordinateNodes;), (
	((%ColorNodes;), (	(GeoOrigin,((%NormalNodes;)|%WildcardNodes;)?) |
				((%NormalNodes;),(GeoOrigin|%WildcardNodes;)?) |
				(%WildcardNodes;,(GeoOrigin|(%NormalNodes;)|%WildcardNodes;)?) )? )
 	| (GeoOrigin,(((%ColorNodes;),((%NormalNodes;)|%WildcardNodes;)?) |
 				((%NormalNodes;),((%ColorNodes;)|%WildcardNodes;)?) |
 				(%WildcardNodes;,((%ColorNodes;)|(%NormalNodes;)|%WildcardNodes;)?) )? )
 	| ((%NormalNodes;), (	((%ColorNodes;),(GeoOrigin|%WildcardNodes;)?) |
				(GeoOrigin,((%ColorNodes;)|%WildcardNodes;)?) |
				(%WildcardNodes;,((%ColorNodes;)|GeoOrigin|%WildcardNodes;)?) )? )
	| (%WildcardNodes;, (	((%ColorNodes;),((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
				(GeoOrigin,((%ColorNodes;)|(%NormalNodes;)|%WildcardNodes;)?) |
				((%NormalNodes;),((%ColorNodes;)|GeoOrigin|%WildcardNodes;)?) |
				(%WildcardNodes;,((%ColorNodes;)|GeoOrigin|(%NormalNodes;)|%WildcardNodes;)?) )? ) )? )
 | (%WildcardNodes;,  (
	((%ColorNodes;), (	(GeoOrigin,((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
				((%NormalNodes;),(GeoOrigin|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
				((%TextureCoordinateNodes;),(GeoOrigin|(%NormalNodes;)|%WildcardNodes;)?) |
				(%WildcardNodes;,(GeoOrigin|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
	| (GeoOrigin,(((%ColorNodes;),((%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
				((%NormalNodes;),((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
				((%TextureCoordinateNodes;),((%ColorNodes;)|(%NormalNodes;)|%WildcardNodes;)?) |
				(%WildcardNodes;,((%ColorNodes;)|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
	| ((%NormalNodes;), (	((%ColorNodes;),(GeoOrigin|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
				(GeoOrigin,((%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
				((%TextureCoordinateNodes;),((%ColorNodes;)|GeoOrigin|%WildcardNodes;)?) |
				(%WildcardNodes;,(GeoOrigin|(%ColorNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? )
	| ((%TextureCoordinateNodes;), (
				((%ColorNodes;),(GeoOrigin|(%NormalNodes;)|%WildcardNodes;)?) |
				(GeoOrigin,((%ColorNodes;)|(%NormalNodes;)|%WildcardNodes;)?) |
				((%NormalNodes;),((%ColorNodes;)|GeoOrigin|%WildcardNodes;)?) |
				(%WildcardNodes;,((%ColorNodes;)|GeoOrigin|(%NormalNodes;)|%WildcardNodes;)?) )? )
	| (%WildcardNodes;, (	((%ColorNodes;),(GeoOrigin|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
				(GeoOrigin,((%ColorNodes;)|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
				((%NormalNodes;),((%ColorNodes;)|GeoOrigin|(%TextureCoordinateNodes;)|%WildcardNodes;)?) |
				((%TextureCoordinateNodes;),((%ColorNodes;)|GeoOrigin|(%NormalNodes;)|%WildcardNodes;)?) |
				(%WildcardNodes;,((%ColorNodes;)|GeoOrigin|(%NormalNodes;)|(%TextureCoordinateNodes;)|%WildcardNodes;)?) )? ) )? )
)? ) >

<!ATTLIST GeoElevationGrid
	geoSystem	%GeoSystemType;
	geoGridOrigin	%SFVec3d;	"0 0 0"
	xDimension	%SFInt32;	"0"
	xSpacing	%SFDouble;	"1.0"
	yScale		%SFFloat;	"1.0"
	zDimension	%SFInt32;	"0"
	zSpacing	%SFDouble;	"1.0"
	height		%MFFloat; 	#IMPLIED
	normalPerVertex	%SFBool;	"true"
	ccw		%SFBool;	"true"
	colorPerVertex	%SFBool;	"true"
	creaseAngle	%SFFloat;	"0"
	solid		%SFBool;	"true"
	nodeType	NMTOKEN 	#FIXED	"ElevationGrid"
	containerField NMTOKEN "geometry"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>
	
<!-- Inline may contain nodes once url is loaded.         -->
<!-- This permits external access - open technical issue. -->
<!-- Will be ( %SceneNodes; ) in x3d-compact.dtd form.    -->

<!ELEMENT GeoInline (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST GeoInline
	url		%MFString;	#IMPLIED
	load		%SFBool;	"true"	
	bboxCenter	%SFVec3d;	"0 0 0"	
	bboxSize	%SFVec3d;	"-1 -1 -1"	
	nodeType	NMTOKEN 	#FIXED	"Inline"
	containerField NMTOKEN "children"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>
	
<!--
	((GeoOrigin, children?) | (children, GeoOrigin?))?
-->
<!ELEMENT GeoLocation (IS?,
	( %ChildrenNodes; | %WildcardNodes; )*, (GeoOrigin, ( %ChildrenNodes; | %WildcardNodes; )* )?
) >
<!ATTLIST GeoLocation
	geoSystem	%GeoSystemType;
	geoCoords	%MFVec3d;	#IMPLIED
	nodeType	NMTOKEN 	#FIXED	"Transform"
	containerField NMTOKEN "children"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!--
	(GeoOrigin, ((children, rootNode?) | (rootNode, children?))? ) |
	(children, ((GeoOrigin, rootNode?) | (rootNode, GeoOrigin?))? ) |
	(rootNode, ((children, GeoOrigin?) | (GeoOrigin, children?))? )?
-->
<!ELEMENT GeoLOD (IS?, (
	( %ChildrenNodes; | %WildcardNodes; )*,
		( (GeoOrigin?, ( %ChildrenNodes; | %WildcardNodes; )*, rootNode?,  ( %ChildrenNodes; | %WildcardNodes; )* )? | 
		  (rootNode,   ( %ChildrenNodes; | %WildcardNodes; )*, GeoOrigin?, ( %ChildrenNodes; | %WildcardNodes; )* )? )
)? ) >

<!ATTLIST GeoLOD
	geoSystem	%GeoSystemType;
	rootUrl	 	%MFString;	#IMPLIED
	child1Url	%MFString;	#IMPLIED
	child2Url	%MFString;	#IMPLIED
	child3Url	%MFString;	#IMPLIED
	child4Url 	%MFString;	#IMPLIED
	range		%SFDouble;	#IMPLIED
	center		%SFVec3d;	#IMPLIED
	nodeType	NMTOKEN 	#FIXED	"LOD"
	containerField NMTOKEN "children"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!-- GeoMetadata includes proposed itemization of specified 'summary' attributes in the X3D encoding -->

<!ELEMENT GeoMetadata (IS?) >
<!ATTLIST GeoMetadata
	url		%MFString;	#IMPLIED
	data		IDREFS		#IMPLIED
	summary		%MFString;	#IMPLIED
	title		%SFString;	#IMPLIED
	description	%SFString;	#IMPLIED
	coordinateSystem %SFString;	#IMPLIED
	horizontalDatum	%SFString;	#IMPLIED
	verticalDatum	%SFString;	#IMPLIED
	ellipsoid	%SFString;	#IMPLIED
	extent		%SFString;	#IMPLIED
	resolution	%SFString;	#IMPLIED
	originator	%SFString;	#IMPLIED
	copyright	%SFString;	#IMPLIED
	date		%SFString;	#IMPLIED
	metadataFormat	%SFString;	#IMPLIED
	dataUrl		%SFString;	#IMPLIED
	dataFormat	%SFString;	#IMPLIED
	nodeType	NMTOKEN 	#FIXED	"WorldInfo"
	containerField NMTOKEN "children"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>
	
<!ELEMENT GeoOrigin (IS?) >
<!ATTLIST GeoOrigin
	geoSystem	%GeoSystemType;
	geoCoords	%MFVec3d;	#IMPLIED
	rotateYUp	%SFBool;	"false"
	nodeType	NMTOKEN 	#FIXED	"geoOrigin"
	containerField NMTOKEN "geoOrigin"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT GeoPositionInterpolator ( IS?, GeoOrigin? ) >
<!ATTLIST GeoPositionInterpolator
	geoSystem	%GeoSystemType;
	key		%MFFloat;	#IMPLIED
	keyValue	%MFVec3d;	#IMPLIED
	geoValue	%SFVec3d;	#IMPLIED
	nodeType	NMTOKEN #FIXED	"PositionInterpolator"
	containerField NMTOKEN "children"
	class         	CDATA		""
	DEF		ID	#IMPLIED
	USE		IDREF	#IMPLIED>

<!ELEMENT GeoTouchSensor ( IS?, GeoOrigin? ) >
<!ATTLIST GeoTouchSensor	
	geoSystem	%GeoSystemType;
	enabled		%SFBool;	"true"
	hitNormal	%SFVec3f;	#IMPLIED
	hitGeoCoordinate %SFVec3d;	#IMPLIED
	hitPoint	%SFVec3f;	#IMPLIED
	hitTexCoord	%SFVec2f;	#IMPLIED
	isActive	%SFBool;	#IMPLIED
	isOver		%SFBool;	#IMPLIED
	touchTime	%SFTime;	#IMPLIED
	nodeType	NMTOKEN #FIXED	"TouchSensor"
	containerField NMTOKEN "children"
	class         	CDATA		""
	DEF		ID	#IMPLIED
	USE		IDREF	#IMPLIED>

<!ELEMENT GeoViewpoint ( IS?, GeoOrigin? ) >
<!ATTLIST GeoViewpoint
	geoSystem	%GeoSystemType;
	position	%SFVec3d;	"0 0 100000"
	orientation	%SFRotation;	"0 0 1 0"
	fieldOfView	%SFFloat;	"0.785398"
	jump		%SFBool;	"true"
	navType		%MFString;	#IMPLIED
	headlight	%SFBool;	"true"
	description	%SFString;	#IMPLIED
	speed		%SFFloat;	"1"
	examine		%SFVec3f;	"0 0 0"
	nodeType	NMTOKEN 	#FIXED	"Viewpoint"
	containerField NMTOKEN "children"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

]]>

<![%HAnimComponent;[

<!--
		Humanoid Animation (H-Anim) 2.0 Document Type Definition (DTD)

 Description:	Define the H-Anim tag and attribute profile for X3D.
		These X3D native nodes correspond to VRML Prototype declarations.

 		Elements in this tagset are enabled by setting the 
		H-AnimProfile entity to "INCLUDE" at the top of an 
		X3D scene file, as shown in several examples such as
		examples/HumanoidAnimation/NancyNativeTags.xml.  This flag then 
		triggers inclusion of the HumanoidAnimation tags in the 
		x3d-compact.dtd tagset.  Thus the HumanoidAnimation.dtd
		demonstrates X3D extensibility for profiles.

		Added bboxCenter and bboxSize to Joint and Site as part of
		Schema development and SAI API normalization of node types.
		Work in progress.  See ongoing 2000/2001 e-mail threads for
		details.

 Status:	Testing results in progress.  Compromise form also needed.
 		JointNames need to be verified/split.

 Authors:	Don Brutzman produced XML encoding for X3D
 		Bernie Roehl and H-Anim Working Group for H-Anim specifications
 		Matt Beitler for syntax/semantics of upgrades from 1.1 to 2.0
 		James Smith provided BoxMan model for testing 2.0 nodes and prototypes

 References:	H-Anim 2001 Specification (Draft)
 		http://h-anim.org/Specifications/H-Anim2001
 		http://www.web3D.org/TaskGroups/x3d/translation/examples/HumanoidAnimation/JointNames.txt

 Address:	http://www.web3D.org/TaskGroups/x3d/translation/HumanoidAnimation2.0-compact.dtd

 Created:	 4 July 2000

 Revised:	30 December 2002
-->

<!-- These need to get verified.  Matt will split into JointNames, SegmentNames and SiteNames.
     Note that setting as enumerations does not permit validation of other names. -->
<!ENTITY % JointNames "(
c1|c2|c3|c4|c5|c6|c7|jaw|HumanoidRoot|l_acromioclavicular|l_ankle|l_calf|
l_clavicle|l_elbow|l_eyeball|l_eyeball_joint|l_eyebrow|l_eyebrow_joint|
l_eyelid|l_eyelid_joint|l_forearm|l_forefoot|l_hand|l_hindfoot|l_hip|
l_index_distal|l_index_metacarpal|l_index_middle|l_index_proximal|
l_index0|l_index1|l_index2|l_index3|l_knee|l_metatarsal|l_middistal|
l_middle_distal|l_middle_metacarpal|l_middle_middle|l_middle_proximal|
l_middle0|l_middle1|l_middle2|l_middle3|l_midproximal|l_midtarsal|
l_pinky_distal|l_pinky_metacarpal|l_pinky_middle|l_pinky_proximal|
l_pinky0|l_pinky1|l_pinky2|l_pinky3|l_ring_distal|l_ring_metacarpal|
l_ring_middle|l_ring_proximal|l_ring0|l_ring1|l_ring2|l_ring3|l_scapula|
l_shoulder|l_sternoclavicular|l_subtalar|l_thigh|l_thumb_distal|
l_thumb_metacarpal|l_thumb_proximal|l_thumb1|l_thumb2|l_thumb3|
l_upperarm|l_wrist|l1|l2|l3|l4|l5|pelvis|r_acromioclavicular|r_ankle|
r_calf|r_clavicle|r_elbow|r_eyeball|r_eyeball_joint|r_eyebrow|
r_eyebrow_joint|r_eyelid|r_eyelid_joint|r_forearm|r_forefoot|r_hand|
r_hindfoot|r_hip|r_index_distal|r_index_metacarpal|r_index_middle|
r_index_proximal|r_index0|r_index1|r_index2|r_index3|r_knee|r_metatarsal|
r_middistal|r_middle_distal|r_middle_metacarpal|r_middle_middle|
r_middle_proximal|r_middle0|r_middle1|r_middle2|r_middle3|r_midproximal|
r_midtarsal|r_pinky_distal|r_pinky_metacarpal|r_pinky_middle|
r_pinky_proximal|r_pinky0|r_pinky1|r_pinky2|r_pinky3|r_ring_distal|
r_ring_metacarpal|r_ring_middle|r_ring_proximal|r_ring0|r_ring1|r_ring2|
r_ring3|r_scapula|r_shoulder|r_sternoclavicular|r_subtalar|r_thigh|
r_thumb_distal|r_thumb_metacarpal|r_thumb_proximal|r_thumb1|r_thumb2|
r_thumb3|r_upperarm|r_wrist|sacroiliac|sacrum|skull|skullbase|
t1|t2|t3|t4|t5|t6|t7|t8|t9|t10|t11|t12|temporomandibular|
vc1|vc2|vc3|vc4|vc5|vc6|vc7|vl1|vl2|vl3|vl4|vl5|
vt1|vt2|vt3|vt4|vt5|vt6|vt7|vt8|vt9|vt10|vt11|vt12)" >

<!-- Nodes -->

<!ELEMENT HAnimDisplacer (IS?) >
<!ATTLIST HAnimDisplacer
	name		%SFString;	#IMPLIED
	coordIndex	%MFInt32;	#IMPLIED
	displacements	%MFVec3f;	#IMPLIED
	containerField NMTOKEN #IMPLIED
	class         	CDATA  		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!-- no nodeType for Displacer since it has no similar node in VRML 97 -->

<!-- humanoidBody is H-Anim 1.1, superceded by 2.0 specification -->
<!ELEMENT humanoidBody ( %ChildrenNodes; | %WildcardNodes; )* >

<!-- skeleton, skin defined by 2.0 specification -->
<!ELEMENT skeleton ( %ChildrenNodes; | %WildcardNodes; )* >
<!ELEMENT skin ( Shape | %WildcardNodes; )* >
<!ELEMENT skinCoord ( Coordinate | %WildcardNodes; )* >
<!ELEMENT skinNormal ( Normal | %WildcardNodes; )* >

<!-- the following content model can likely be improved but it supports either 1.1 or 2.0 -->
<!ELEMENT HAnimHumanoid (IS?, 
	(humanoidBody? | (skeleton, (skinCoord, skinNormal?, skin)?)),
	(HAnimJoint | HAnimSegment | HAnimSite | Viewpoint)* ) >
<!ATTLIST HAnimHumanoid
	name			%SFString;	#IMPLIED
	version			(1.1|2.0)	#IMPLIED
	humanoidVersion		%SFString;	#IMPLIED
	info			%MFString;	#IMPLIED
	authorName		%SFString;	#IMPLIED
	authorEmail		%SFString;	#IMPLIED
	copyright		%SFString;	#IMPLIED
	creationDate		%SFString;	#IMPLIED
	usageRestrictions	%SFString;	#IMPLIED
	age			%SFString;	#IMPLIED
	gender			%SFString;	#IMPLIED
	height			%SFString;	#IMPLIED
	weight			%SFString;	#IMPLIED
	translation		%SFVec3f;	"0 0 0"
	rotation		%SFRotation;	"0 0 1 0"
	scale			%SFVec3f;	"1 1 1"
	scaleOrientation	%SFRotation;	"0 0 1 0"
	center			%SFVec3f;	"0 0 0"
	bboxCenter		%SFVec3f;	"0 0 0"
	bboxSize		%SFVec3f;	"-1 -1 -1"
	containerField NMTOKEN "children"
	class         		CDATA  		""
	DEF			ID		#IMPLIED
	USE			IDREF		#IMPLIED>

<!ELEMENT HAnimJoint (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST HAnimJoint
	name			%JointNames;	#IMPLIED
	ulimit			%MFFloat;	#IMPLIED
	llimit			%MFFloat;	#IMPLIED
	limitOrientation	%SFRotation;	"0 0 1 0"
	skinCoordIndex		%MFInt32;	#IMPLIED
	skinCoordWeight		%MFFloat;	#IMPLIED
	stiffness		%MFFloat;	"0 0 0"
	translation		%SFVec3f;	"0 0 0"
	rotation		%SFRotation;	"0 0 1 0"
	scale			%SFVec3f;	"1 1 1"
	scaleOrientation	%SFRotation;	"0 0 1 0"
	center			%SFVec3f;	"0 0 0"
	bboxCenter		%SFVec3f;	"0 0 0"
	bboxSize		%SFVec3f;	"-1 -1 -1"
	containerField NMTOKEN "children"
	class         		CDATA		""
	DEF			ID		#IMPLIED
	USE			IDREF		#IMPLIED>

<!-- Multiple Displacer nodes must appear consecutively inside Segment -->

<!--
	(children, ((coord, Displacer*) | (Displacer+, coord?))? ) |
	(coord, ((children, Displacer*) | (Displacer+, children?))? ) |
	(Displacer+, ((coord, children?) | (children, coord?))? )?
-->
<!ELEMENT HAnimSegment (IS?, (
	((%ChildrenNodes;|%WildcardNodes;)*, ((Coordinate, HAnimDisplacer*) | (HAnimDisplacer+, Coordinate?))? ) |
	(Coordinate, (((%ChildrenNodes;)*, HAnimDisplacer*) | (HAnimDisplacer+, (%ChildrenNodes;|%WildcardNodes;)*))? ) |
	(HAnimDisplacer+, ((Coordinate, (%ChildrenNodes;|%WildcardNodes;)*) | ((%ChildrenNodes;|%WildcardNodes;)*, Coordinate?))? )?
) ) >
<!ATTLIST HAnimSegment
	name			%JointNames;	#IMPLIED
	mass			%SFFloat;	"0"
	centerOfMass		%SFVec3f;	"0 0 0"
	momentsOfInertia	%MFFloat;	"0 0 0 0 0 0 0 0 0"
	bboxCenter		%SFVec3f;	"0 0 0"
	bboxSize		%SFVec3f;	"-1 -1 -1"
	containerField NMTOKEN "children"
	class         		CDATA   	""
	DEF			ID		#IMPLIED
	USE			IDREF		#IMPLIED>

<!ELEMENT HAnimSite (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST HAnimSite
	name			%SFString;	#IMPLIED
	translation		%SFVec3f;	"0 0 0"
	rotation		%SFRotation;	"0 0 1 0"
	scale			%SFVec3f;	"1 1 1"
	scaleOrientation	%SFRotation;	"0 0 1 0"
	center			%SFVec3f;	"0 0 0"
	bboxCenter		%SFVec3f;	"0 0 0"
	bboxSize		%SFVec3f;	"-1 -1 -1"
	containerField NMTOKEN "children"
	class         		CDATA  		""
	DEF			ID		#IMPLIED
	USE			IDREF		#IMPLIED>

]]>


<![%NurbsComponent;[

<!--
		Nurbs 1.0 Document Type Definition (DTD)

 Description:	Define the Nurbs tag and attribute profile for X3D.
		These X3D native nodes will correspond to forthcoming
		VRML ExternProto declarations.

 		Elements in this tagset are enabled by setting the 
		NurbsProfile entity to "INCLUDE" at the top of an 
		X3D scene file, as shown in several examples such as
		examples/Nurbs/newNurbsScene.xml.  This flag then 
		triggers inclusion of the Nurbs tags in the 
		x3d-compromise.dtd tagset.  Thus the Nurbs.dtd
		demonstrates X3D extensibility for profiles.

 Status:	Under development.  Working node prototypes needed.
 		Compact form also needed (eliminate all field tags except
 		inputCoord and outputCoord).

 Authors:	blaxxun interactive proposed the Nurbs extensions,
		Don Brutzman produced XML encoding of Nurbs nodes for X3D

 Reference:	Nurbs Extension for VRML 97 proposal
 		http://www.blaxxun.com/developer/contact/3d/nurbs/overview.html
		http://www.blaxxun.com/support/developerguide/developer/contact/3d/nurbs/spec/nurbsproposal.html
		
 Issues:	- why isn't a complete set of prototype implementations available?
 		- nodeTypeHints need to be checked, proposal and examples inconsistent
 		- what are NurbsCurve2ILS and NurbsSurface2ILS? Utility prototypes?
 		  (yes)
 		- should they be included in the DTD and extension profile?
 		  (no, but these can be good example/prototype authoring assists)
 		- how is (unimplemented) NurbsTextureSurface utilized?  examples?
 		- what is default value of NurbsCurve tessellation, 0? (yes)
 		- should NurbsPositionInterpolator have more fields:
 		  fraction (is in prototype; how else to set fraction along curve)? (yes)
 		  value (is in prototype; how else to get output)? (yes)
 		  key (probably not, keyValues probably correspond to knots)?
 		  dimension (probably not, but mentioned in description paragraph)?
 		  computeTangent, tangent (seem important to add)?

 Address:	http://www.web3D.org/TaskGroups/x3d/translation/Nurbs.dtd

 Created:	  7 November 2000

 Revised:	 30 December 2002
-->

<!-- Field tags for contained nodes -->

<!ELEMENT inputCoord		( Coordinate? ) >
<!ELEMENT inputTransform	( Transform?  ) >
<!ELEMENT outputCoord		( Coordinate? ) >

<!-- Nurbs nodes -->

<!ELEMENT Contour2D (IS?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST Contour2D
	bboxCenter	%SFVec3f;	"0 0 0"	
	bboxSize	%SFVec3f;	"-1 -1 -1"
	containerField NMTOKEN "children"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT CoordinateDeformer (IS?, (
   (inputCoord, ((outputCoord,	((inputTransform,( %ChildrenNodes; | %WildcardNodes; )*) | (( %ChildrenNodes; | %WildcardNodes; )*,inputTransform)?)?) |
		(inputTransform,((outputCoord,( %ChildrenNodes; | %WildcardNodes; )*) | (( %ChildrenNodes; | %WildcardNodes; )*,outputCoord?))?) |
		(( %ChildrenNodes; | %WildcardNodes; )*,((outputCoord,inputTransform?) | (inputTransform,outputCoord?))?) )? )
 | (outputCoord, ((inputCoord, ((inputTransform,( %ChildrenNodes; | %WildcardNodes; )*) | (( %ChildrenNodes; | %WildcardNodes; )*,inputTransform)?)?) |
		(inputTransform,((inputCoord,( %ChildrenNodes; | %WildcardNodes; )*) | (( %ChildrenNodes; | %WildcardNodes; )*,inputCoord?))?) |
		(( %ChildrenNodes; | %WildcardNodes; )*,((inputCoord,inputTransform?) | (inputTransform,inputCoord?))?) )? )
 | (inputTransform, ((outputCoord,((inputCoord,( %ChildrenNodes; | %WildcardNodes; )*) | (( %ChildrenNodes; | %WildcardNodes; )*,inputCoord?))?) |
		(inputCoord,((outputCoord,( %ChildrenNodes; | %WildcardNodes; )*) | (( %ChildrenNodes; | %WildcardNodes; )*,outputCoord?))?) |
		(( %ChildrenNodes; | %WildcardNodes; )*,((outputCoord,inputCoord?) | (inputCoord,outputCoord?))?) )? )
 | (( %ChildrenNodes; | %WildcardNodes; )*, (	(outputCoord,	((inputCoord,inputTransform?) | (inputTransform,inputCoord?))?) |
		(inputCoord,((outputCoord,inputTransform?) | (inputTransform,outputCoord?))?) |
		(inputTransform,((outputCoord,inputCoord?) | (inputCoord,outputCoord?))?) )? )?
) )>
<!ATTLIST CoordinateDeformer
	uDimension	%SFInt32;	"0"
	vDimension	%SFInt32;	"0"
	wDimension	%SFInt32;	"0"
	uKnot		%MFDouble;	#IMPLIED
	vKnot		%MFDouble;	#IMPLIED
	wKnot		%MFDouble;	#IMPLIED
	uOrder		%SFInt32;	"2"
	vOrder		%SFInt32;	"2"
	wOrder		%SFInt32;	"2"
	controlPoint	%MFVec3f;	#IMPLIED
	weight		%MFFloat;	#IMPLIED
	bboxCenter	%SFVec3f;	"0 0 0"	
	bboxSize	%SFVec3f;	"-1 -1 -1"	
	containerField NMTOKEN "children"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>
	
<!ELEMENT NurbsCurve (IS?) >
<!ATTLIST NurbsCurve
	knot		%MFDouble;	#IMPLIED
	order		%SFInt32;	"3"
	controlPoint	%MFVec3f;	#IMPLIED
	weight		%MFDouble;	#IMPLIED
	tessellation	%SFInt32;	"0"
	containerField NMTOKEN "geometry"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsCurve2D (IS?) >
<!ATTLIST NurbsCurve2D
	knot		%MFFloat;	#IMPLIED
	order		%SFInt32;	"3"
	controlPoint	%MFVec2f;	#IMPLIED
	weight		%MFFloat;	#IMPLIED
	tessellation	%SFInt32;	"0"
	containerField NMTOKEN "geometry"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsGroup (IS?, (%ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST NurbsGroup
	tessellationScale	%SFFloat;	"1.0"
	bboxCenter		%SFVec3f;	"0 0 0"	
	bboxSize		%SFVec3f;	"-1 -1 -1"
	containerField NMTOKEN "children"
	class         		CDATA		""
	DEF			ID		#IMPLIED
	USE			IDREF		#IMPLIED>

<!ELEMENT NurbsPositionInterpolator (IS?) >
<!ATTLIST NurbsPositionInterpolator
	knot			%MFDouble;	#IMPLIED
	dimension		%SFInt32;	"0"
	order			%SFInt32;	"3"
	keyValue		%MFVec3f;	#IMPLIED
	keyWeight		%MFDouble;	#IMPLIED
	fractionAbsolute	%SFBool;	"true"
	containerField NMTOKEN "children"
	class         		CDATA		""
	DEF			ID	#IMPLIED
	USE			IDREF	#IMPLIED>


<!ELEMENT NurbsSurface (IS?, ( %TextureCoordinateNodes; )? ) >
<!ATTLIST NurbsSurface
	uDimension	%SFInt32;	"0"
	vDimension	%SFInt32;	"0"
	uKnot		%MFDouble;	#IMPLIED
	vKnot		%MFDouble;	#IMPLIED
	uOrder		%SFInt32;	"3"
	vOrder		%SFInt32;	"3"
	controlPoint	%MFVec3f;	#IMPLIED
	weight		%MFDouble;	#IMPLIED
	uTessellation	%SFInt32;	"0"
	vTessellation	%SFInt32;	"0"
	ccw		%SFBool;  	"true"
	solid		%SFBool;  	"true"
	containerField NMTOKEN "geometry"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsTextureSurface (IS?) >
<!ATTLIST NurbsTextureSurface
	uDimension	%SFInt32;	"0"
	vDimension	%SFInt32;	"0"
	uKnot		%MFDouble;	#IMPLIED
	vKnot		%MFDouble;	#IMPLIED
	uOrder		%SFInt32;	"3"
	vOrder		%SFInt32;	"3"
	controlPoint	%MFVec2f;	#IMPLIED
	weight		%MFFloat;	#IMPLIED
	containerField NMTOKEN "texCoord"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT ContourPolyline2D (IS?) >
<!ATTLIST ContourPolyline2D
	point		%MFVec2f;	#IMPLIED
	containerField NMTOKEN "geometry"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!-- single NurbsSurface, preceded or followed by Contour2D -->

<!ELEMENT TrimmedSurface (IS?, ((NurbsSurface,Contour2D*) | (Contour2D+,NurbsSurface,Contour2D*)) ) >
<!ATTLIST TrimmedSurface
	containerField NMTOKEN "geometry"
	class         	CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

]]>

<![%LatticeXvlComponent;[


<!-- LatticeXVL will likely get moved back into a separate DTD.  -->

<!--
		XVL 1.0 Document Type Definition (DTD)

Filename:	LatticeXvl-compact.dtd

Description:	Define the XVL tag and attribute profile for X3D.
  
		This X3D native node corresponds to a VRML ExternProto
		declaration.

 		Elements in this tagset are enabled by setting the 
		XvlProfile entity to "INCLUDE" at the top of an 
		X3D scene file, as shown in several examples such as
		examples/LatticeXvl/XvlShellAll.x3d.  This flag then 
		triggers inclusion of the XVL tags in the 
		x3d-compact.dtd tagset.  Thus the Xvl.dtd
		demonstrates X3D extensibility for profiles.

 Status:	In testing and preparation for February 2002 SDK CDs

 Authors:	Lattice Technology, Inc. proposed the Xvl extensions,
		Makito Seki produced XML encoding of XVL nodes for X3D
		with additional work by Marc Jablonski and Don Brutzman

 Reference:	LatticeXvl extension for X3D
 		http://www.web3d.org/TaskGroups/x3d/translation/examples/LatticeXvl/doc/proposal/LatticeProposal.html
 		http://www.Xvl3D.com

 Issues:	Mark has the list!

 Address:	http://www.web3D.org/TaskGroups/x3d/translation/LatticeXvl-compact.dtd

 Created:	10 May 2001

 Revised:	10 November 2002
-->

<!-- for future: G1T1 level -->

<!ENTITY % XvlG1T1ShellTypes "" >

<!-- Types of XVL Shells -->

<!ENTITY % XvlShell.shellTypes " %XvlG1T1ShellTypes; POLYGON_MESH | LATTICE_MESH " >


<!ELEMENT   XvlShell (IS?, (
	( (%TextureCoordinateNodes;), ((%CoordinateNodes;) | %WildcardNodes;)  ) |
	( (%CoordinateNodes;), ((%TextureCoordinateNodes;) | %WildcardNodes;)? ) |
	( %WildcardNodes;, ((%TextureCoordinateNodes;) | (%CoordinateNodes;) | %WildcardNodes;)?) )?
)>
<!ATTLIST   XvlShell
	shellType          ( %XvlShell.shellTypes; )  #IMPLIED
	numberOfDivisions  	%SFInt32;	#IMPLIED
	vertexRound        	%MFFloat;	#IMPLIED
	edgeBeginCoordIndex	%MFInt32;	#IMPLIED
	edgeEndCoordIndex  	%MFInt32;	#IMPLIED
	edgeRound          	%MFFloat;	#IMPLIED
	edgeBeginVector    	%MFVec3f;	#IMPLIED
	edgeEndVector      	%MFVec3f;	#IMPLIED
	faceCoordIndex     	%MFInt32;	#IMPLIED
	faceTexCoordIndex  	%MFInt32;	#IMPLIED
	faceEmpty          	%MFBool; 	#IMPLIED
	faceHidden         	%MFBool; 	#IMPLIED
	containerField NMTOKEN "geometry"
	class         	 	CDATA		""
	DEF                	ID      	#IMPLIED
	USE                	IDREF   	#IMPLIED>

]]>

<![%X3dInputOutputFields;[

<!ENTITY % FieldsDTD SYSTEM "x3d-3.0-InputOutputFields.dtd">

%FieldsDTD;

]]>

B.3 x3d-3.0-InputOutputFields.dtd

x3d-3.0-InputOutputFields.dtd extends the X3D DTD by also including fields with accessType inputOnly and outputOnly. Although X3D scene files cannot validly set values for any of these attributes, the DTD defines names and relationships of all fields and can be used by DTD-aware processing tools.

<!--

# Purpose: the Extensible 3D (X3D) Document Type Definition (DTD)
# is augmented by field definitions in x3d-3.0-InputOutputFields.dtd
#
# X3D Specification DTDs:
#
#	http://www.web3D.org/specifications/x3d-3.0.dtd
#	http://www.web3D.org/specifications/x3d-3.0-InputOutputFields.dtd
#
#	current version:  3.0.2
#
#	revised:          13 January 2003
#
# Typical system location for this resource is adjacent to x3d-3.0.dtd:
#	file://c:/www.web3d.org/specifications/x3d-3.0-InputOutputFields.dtd
#	  file:///www.web3d.org/specifications/x3d-3.0-InputOutputFields.dtd
#
# changelog:
#	http://www.web3d.org/TaskGroups/x3d/translation/x3d-dtd-changelog.txt
#
-->

<!ATTLIST AudioClip
	duration_changed %SFTime; #FIXED ""
	isActive    CDATA      #FIXED "">
	
<!ATTLIST Background
	set_bind    CDATA      #FIXED ""
	bindTime    %SFTime;   #FIXED ""
	isBound     CDATA      #FIXED "">

<!ATTLIST BooleanFilter
	set_boolean CDATA #FIXED ""
	inputTrue   CDATA #FIXED ""
	inputFalse  CDATA #FIXED ""
	inputNegate CDATA #FIXED "">
	
<!-- value_changed is CDATA instead of %SFBool% in order to set empty value on an enumeration -->

<!ATTLIST BooleanSequencer
	set_fraction %SFFloat; #FIXED ""
	value_changed    CDATA  #FIXED ""
	previous CDATA   #FIXED ""
	next     CDATA   #FIXED "">

<!ATTLIST BooleanToggle
	set_boolean CDATA #FIXED "">
	
<!ATTLIST BooleanTrigger
	set_triggerTime %SFTime; #FIXED ""
	triggerTrue     CDATA    #FIXED "">

<!ATTLIST Collision
	collideTime %SFTime;   #FIXED ""
	isActive    CDATA      #FIXED "">

<!ATTLIST ColorInterpolator
	set_fraction    %SFFloat; #FIXED ""
	value_changed       %SFColor; #FIXED "">

<!ATTLIST CoordinateInterpolator
	set_fraction %SFFloat; #FIXED ""
	value_changed    %MFVec3f; #FIXED "">

<!ATTLIST CoordinateInterpolator2D
	set_fraction %SFFloat; #FIXED ""
	value_changed    %MFVec2f; #FIXED "">

<!ATTLIST CylinderSensor
	isActive   CDATA     	#FIXED ""
	isOver     CDATA     	#FIXED ""
	rotation_changed   %SFRotation; #FIXED ""
	trackPoint_changed %SFVec3f;    #FIXED "">

<!ATTLIST ElevationGrid
	set_height      %MFFloat; #FIXED "">

<!ATTLIST Extrusion
	set_crossSection %MFVec2f;    #FIXED ""
	set_orientation  %MFRotation; #FIXED ""
	set_scale        %MFVec2f;    #FIXED ""
	set_spine        %MFVec3f;    #FIXED "">

<!ATTLIST Fog
	set_bind        CDATA      #FIXED ""
	bindTime        %SFTime;   #FIXED ""
	isBound         CDATA      #FIXED "">

<!ATTLIST IndexedFaceSet
	set_colorIndex      %MFInt32; #FIXED ""
	set_coordIndex      %MFInt32; #FIXED ""
	set_normalIndex     %MFInt32; #FIXED ""
	set_texCoordIndex   %MFInt32; #FIXED "">

<!ATTLIST IndexedLineSet
	set_colorIndex  %MFInt32; #FIXED ""
	set_coordIndex  %MFInt32; #FIXED "">

<!ATTLIST IntegerSequencer
	set_fraction %SFFloat; #FIXED ""
	value_changed    %SFInt32; #FIXED ""
	previous CDATA   #FIXED ""
	next     CDATA   #FIXED "">

<!ATTLIST IntegerTrigger
	set_boolean  CDATA #FIXED ""
	triggerValue %SFInt32;   #FIXED "">

<!ATTLIST KeySensor
	isActive		CDATA      	#FIXED ""
	keyPress		%SFInt32;	#FIXED ""
	keyRelease		%SFInt32;	#FIXED ""
	actionKeyPress		%SFInt32;	#FIXED ""
	actionKeyRelease	%SFInt32;	#FIXED ""
	altKey			CDATA  		#FIXED ""
	controlKey		CDATA  		#FIXED ""
	shiftKey		CDATA  		#FIXED "">

<!ATTLIST LoadSensor 
	isActive		CDATA       	#FIXED ""
	isLoaded		CDATA  		#FIXED ""
	loadTime		%SFTime;	#FIXED ""
	progress		%SFFloat;	#FIXED "">

<!ATTLIST MovieTexture
	duration_changed  %SFTime;   #FIXED ""
	isActive  CDATA       	#FIXED "">

<!ATTLIST NavigationInfo
	set_bind        CDATA      #FIXED ""
	bindTime        %SFTime;   #FIXED ""
	isBound         CDATA      #FIXED "">

<!ATTLIST NormalInterpolator
	set_fraction %SFFloat; #FIXED ""
	value_changed    %MFVec3f; #FIXED "">

<!ATTLIST OrientationInterpolator
	set_fraction %SFFloat;    #FIXED ""
	value_changed    %SFRotation; #FIXED "">

<!ATTLIST PlaneSensor
	isActive    CDATA  	#FIXED ""
	isOver      CDATA     	#FIXED ""
	trackPoint_changed  %SFVec3f; #FIXED ""
	translation_changed %SFVec3f; #FIXED "">

<!ATTLIST PositionInterpolator
	set_fraction %SFFloat; #FIXED ""
	value_changed    %SFVec3f; #FIXED "">

<!ATTLIST PositionInterpolator2D
	set_fraction %SFFloat; #FIXED ""
	value_changed    %SFVec2f; #FIXED "">

<!ATTLIST ProximitySensor
	isActive    CDATA     	 #FIXED ""
	position_changed    %SFVec3f;    #FIXED ""
	orientation_changed %SFRotation; #FIXED ""
	centerOfRotation_changed  %SFVec3f;	#FIXED ""
	enterTime   %SFTime;     #FIXED ""
	exitTime    %SFTime;     #FIXED "">
	
<!ATTLIST ScalarInterpolator
	set_fraction %SFFloat; #FIXED ""
	value_changed    %SFFloat; #FIXED "">

<!ATTLIST SphereSensor
	isActive   CDATA     	#FIXED ""
	isOver      CDATA     	#FIXED ""
	rotation_changed   %SFRotation; #FIXED ""
	trackPoint_changed %SFVec3f;    #FIXED "">

<!ATTLIST StringSensor
	isActive		CDATA     	#FIXED ""
	enteredText		%SFString;	#FIXED ""
	finalText		%SFString;	#FIXED "">

<!ATTLIST TextureBackground
	set_bind     CDATA      #FIXED ""
	bindTime     %SFTime;   #FIXED ""
	isBound      CDATA      #FIXED "">

<!ATTLIST TimeSensor
	cycleTime     %SFTime;  #FIXED ""
	fraction_changed  %SFFloat; #FIXED ""
	isActive      CDATA    	#FIXED ""
	isPaused      CDATA    	#FIXED ""
	time          %SFTime;  #FIXED "">

<!ATTLIST TimeTrigger
	set_boolean  CDATA #FIXED ""
	triggerTime %SFTime;   #FIXED "">

<!ATTLIST TouchSensor
	hitNormal_changed    %SFVec3f; 	#FIXED ""
	hitPoint_changed     %SFVec3f; 	#FIXED ""
	hitTexCoord_changed  %SFVec2f; 	#FIXED ""
	isActive     CDATA     #FIXED ""
	isOver       CDATA     #FIXED ""
	touchTime    %SFTime;  #FIXED "">

<!ATTLIST Viewpoint
	set_bind    CDATA        #FIXED ""
	bindTime    %SFTime;     #FIXED ""
	isBound     CDATA        #FIXED "">

<!ATTLIST VisibilitySensor
	enterTime %SFTime;  #FIXED ""
	exitTime  %SFTime;  #FIXED ""
	isActive  CDATA     #FIXED "">

<!ATTLIST EspduTransform
	isStandAlone		 		CDATA		#FIXED ""
	isNetworkReader	 			CDATA		#FIXED ""
	isNetworkWriter	 			CDATA		#FIXED ""
	rtpHeaderHeard     			%SFBool;	#IMPLIED
	isActive   				CDATA		#FIXED ""
	timestamp	 			%SFTime;	#IMPLIED
	set_articulationParameterValue0		%SFFloat;	#FIXED ""
	set_articulationParameterValue1		%SFFloat;	#FIXED ""
	set_articulationParameterValue2		%SFFloat;	#FIXED ""
	set_articulationParameterValue3		%SFFloat;	#FIXED ""
	set_articulationParameterValue4		%SFFloat;	#FIXED ""
	set_articulationParameterValue5		%SFFloat;	#FIXED ""
	set_articulationParameterValue6		%SFFloat;	#FIXED ""
	set_articulationParameterValue7		%SFFloat;	#FIXED ""
	articulationParameterValue0_changed	%SFFloat;	#FIXED ""
	articulationParameterValue1_changed	%SFFloat;	#FIXED ""
	articulationParameterValue2_changed	%SFFloat;	#FIXED ""
	articulationParameterValue3_changed	%SFFloat;	#FIXED ""
	articulationParameterValue4_changed	%SFFloat;	#FIXED ""
	articulationParameterValue5_changed	%SFFloat;	#FIXED ""
	articulationParameterValue6_changed	%SFFloat;	#FIXED ""
	articulationParameterValue7_changed	%SFFloat;	#FIXED ""
	isCollided   			%SFBool;	"false"
	collideTime   			%SFTime;	#IMPLIED
	isDetonated   			%SFBool;	"false"
	detonateTime   			%SFTime;	#IMPLIED
	firedTime   			%SFTime;	#IMPLIED
>
<!ATTLIST ReceiverPdu 
	isStandAlone		 		CDATA		#FIXED ""
	isNetworkReader	 			CDATA		#FIXED ""
	isNetworkWriter	 			CDATA		#FIXED ""
	rtpHeaderHeard     			%SFBool;	#IMPLIED
	isActive   				CDATA		#FIXED ""
	timestamp	 			%SFTime;	#IMPLIED
>

<!ATTLIST SignalPdu
	isStandAlone		 		CDATA		#FIXED ""
	isNetworkReader	 			CDATA		#FIXED ""
	isNetworkWriter	 			CDATA		#FIXED ""
	rtpHeaderHeard     			%SFBool;	#IMPLIED
	isActive   				CDATA		#FIXED ""
	timestamp	 			%SFTime;	#IMPLIED
>

<!ATTLIST TransmitterPdu
	isStandAlone		 		CDATA		#FIXED ""
	isNetworkReader	 			CDATA		#FIXED ""
	isNetworkWriter	 			CDATA		#FIXED ""
	rtpHeaderHeard     			%SFBool;	#IMPLIED
	isActive   				CDATA		#FIXED ""
	timestamp	 			%SFTime;	#IMPLIED
>

<!ATTLIST GeoPositionInterpolator
	set_fraction	%SFFloat;	#FIXED ""
	value_changed	%SFVec3f;	#FIXED ""
	geovalue_changed %SFVec3d;	#FIXED "">

<!ATTLIST GeoViewpoint
	set_bind        CDATA      #FIXED ""
	set_position    %SFVec3d;  #FIXED ""
	bindTime        %SFTime;   #FIXED ""
	isBound         CDATA      #FIXED "">

<!ATTLIST GeoTouchSensor
	hitGeoCoord_changed     %SFString;      #FIXED "">

<!ATTLIST NurbsPositionInterpolator
	set_fraction		%SFFloat;	#FIXED ""
	value_changed		%SFVec3f;	#FIXED "">

--- X3D separator bar ---