A.1.1

Replace Table A.1 with the following:

A.1 Table of contents and introduction
A.1.1 Table of contents
A.1.2 Introduction
A.2 x3d-3.0.dtd
A.3 x3d-3.0-InputOutputFields.dtd
A.4 x3d-3.1.dtd
A.5 x3d-3.1-InputOutputFields.dtd

A.2

Replace the content of A.2 with the following text:

x3d-3.0.dtd is the X3D DTD that validates X3D version 3.0 content:

<!--
# Extensible 3D (X3D) Specification Document Type Definition (DTD) x3d-3.0.dtd
#
#	http://www.web3d.org/specifications/x3d-3.0.dtd
#
#	current version:  3.0.20
#
#	revised:          10 January 2006
#
#	Author:           Don Brutzman
#
# X3D Specification DTDs:
#	http://www.web3d.org/specifications/x3d-3.0.dtd
#	http://www.web3d.org/specifications/x3d-3.0-InputOutputFields.dtd
#	http://www.web3d.org/specifications/x3d-3.0-Web3dExtensionsPublic.dtd
#	http://www.web3d.org/specifications/x3d-3.0-Web3dExtensionsPrivate.dtd
#
# X3D Revision DTDs:
#	http://www.web3d.org/x3d/content/x3d-3.0.dtd
#	http://www.web3d.org/x3d/content/x3d-3.0-InputOutputFields.dtd
#	http://www.web3d.org/x3d/content/x3d-3.0-Web3dExtensionsPublic.dtd
#	http://www.web3d.org/x3d/content/x3d-3.0-Web3dExtensionsPrivate.dtd
#
# Final doctype:
#  <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
#
# Transitional doctype:
#  <!DOCTYPE X3D PUBLIC "http://www.web3d.org/specifications/x3d-3.0.dtd" "file:///www.web3d.org/specifications/x3d-3.0.dtd">
#
# 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
#
# Change log:
#	http://www.web3d.org/specifications/x3d-dtd-changelog.txt
#
# Further information on the Extensible 3D (X3D) specification is available at
#	http://www.web3D.org/x3d.html
-->

<!--	Profile:  default is Full profile and all components.
	Authors can override these default IGNORE/INCLUDE values.
	If InterchangeProfile or InteractiveProfile is INCLUDEd, then IGNORE all others. -->
<!ENTITY % ImmersiveProfile		"INCLUDE">
<!ENTITY % InterchangeProfile		"IGNORE">
<!ENTITY % InteractiveProfile		"IGNORE">
<!ENTITY % DISComponent 		"INCLUDE">
<!ENTITY % GeoSpatialComponent	"INCLUDE">
<!ENTITY % HAnimComponent 		"INCLUDE">
<!ENTITY % NurbsComponent 		"INCLUDE">
<!ENTITY % Web3dExtensionComponent	"INCLUDE">
<!ENTITY % X3dInputOutputFields		"INCLUDE">
<!ENTITY % X3dExtensions		"IGNORE">

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

<!ENTITY % componentNames "(Core|DIS|EnvironmentalEffects|EnvironmentalSensor|EventUtilities|Geometry2D|Geometry3D|Geospatial|Grouping|H-Anim|Interpolation|KeyDeviceSensor|Lighting|Navigation|Networking|NURBS|PointingDeviceSensor|Rendering|Scripting|Shape|Sound|Text|Texturing|Time)">

<!ENTITY % componentLevels "(1|2|3|4)">

<!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|SFVec2d|MFVec2d|SFVec3f|MFVec3f|SFVec3d|MFVec3d ">

<!-- X3D type definitions as DTD types -->
<!ENTITY % SFBool	"(true|false)">
<!ENTITY % MFBool	"CDATA">
<!ENTITY % SFColor	"CDATA">
<!ENTITY % MFColor	"CDATA">
<!ENTITY % SFColorRGBA	"CDATA">
<!ENTITY % MFColorRGBA	"CDATA">
<!ENTITY % SFFloat	"CDATA">
<!ENTITY % MFFloat	"CDATA">
<!ENTITY % SFDouble	"CDATA">
<!ENTITY % MFDouble	"CDATA">
<!ENTITY % SFImage	"CDATA">
<!ENTITY % MFImage	"CDATA">
<!ENTITY % SFInt32	"CDATA">
<!ENTITY % MFInt32	"CDATA">
<!ENTITY % SFRotation	"CDATA">
<!ENTITY % MFRotation	"CDATA">
<!ENTITY % SFString	"CDATA">
<!ENTITY % MFString	"CDATA">
<!ENTITY % SFTime	"CDATA">
<!ENTITY % MFTime	"CDATA">
<!ENTITY % SFVec2f	"CDATA">
<!ENTITY % MFVec2f	"CDATA">
<!ENTITY % SFVec2d	"CDATA">
<!ENTITY % MFVec2d	"CDATA">
<!ENTITY % SFVec3f	"CDATA">
<!ENTITY % MFVec3f	"CDATA">
<!ENTITY % SFVec3d	"CDATA">
<!ENTITY % MFVec3d	"CDATA">

<!ENTITY % TextureCoordinateGeneratorModes	"(SPHERE|CAMERASPACENORMAL|CAMERASPACEPOSITION|CAMERASPACEREFLECTIONVECTOR|SPHERE-LOCAL|COORD|COORD-EYE|NOISE|NOISE-EYE|SPHERE-REFLECT|SPHERE-REFLECT-LOCAL)">

<!--	User needs to append | after listing each new node in any of these extensions.
	For an example, see examples/development/ProtoTagDtdDeclarationExamples.x3d   -->
<!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 % MetadataNodeExtensions "">
<!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 % NetworkSensorNodeExtensions "">
<!ENTITY % WorldInfoNodeExtensions "">
<!-- Users defining PROTOs do not override any of the following parameter entity declarations. -->
<![%ImmersiveProfile;[
<!ENTITY % WildcardNodes       	" (ProtoInstance) " >
]]>
<![%InterchangeProfile;[
<!ENTITY % WildcardNodes       	" " >
]]>
<![%DISComponent;[
<!ENTITY % DISGroupingNodes	" EspduTransform|SignalPdu|ReceiverPdu|TransmitterPdu|" >
]]>
<![%GeoSpatialComponent;[
<!ENTITY % GeoCoordinateNode		" GeoCoordinate|" >
<!ENTITY % GeoElevationGridNode		" GeoElevationGrid|" >
<!ENTITY % GeoGroupingNodes		" 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	  " NurbsOrientationInterpolator|NurbsPositionInterpolator|NurbsSurfaceInterpolator|NurbsSet|" >
<!ENTITY % NurbsGeometryNodes	  " Contour2D|NurbsCurve|NurbsCurve2D|NurbsPatchSurface|NurbsSweptSurface|NurbsSwungSurface|NurbsTrimmedSurface|" >
<!ENTITY % NurbsInterpolators	  " NurbsPositionInterpolator|NurbsOrientationInterpolator|NurbsSurfaceInterpolator|" >
<!ENTITY % NurbsControlCurveNodes " NurbsCurve2D|ContourPolyline2D " >
]]>
<![%Web3dExtensionComponent;[
<!ENTITY % Web3dExtensionGeometryNodes	" XvlShell|" >
]]>
<!-- otherwise set tag lists to null strings if not previously defined -->
<!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 % Web3dExtensionGroupingNodes "">
<!ENTITY % Web3dExtensionGeometryNodes "">
<!-- 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 "" >
]]>
<!-- NetworkSensorNodes used by LoadSensor -->
<!ENTITY % NetworkSensorNodes " %NetworkSensorNodeExtensions; Anchor|AudioClip|GeoMetadata|ImageTexture|Inline|MovieTexture|ProtoInstance|Script ">

<![%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|NurbsTextureCoordinate " >

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

<![%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|CoordinateDouble " >

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

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

<!ENTITY % LightNodes       	" DirectionalLight " >

<!ENTITY % MaterialNodes    	" Material " >

<!ENTITY % ShapeNodes       	" Shape " >

<!ENTITY % Texture2DNodes     	" ImageTexture " >

<!ENTITY % WorldInfoNodes   	" WorldInfo " >
]]>
<![%ImmersiveProfile;[

<!ENTITY % AppearanceNodes  	" %AppearanceNodeExtensions; 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 " >
]]>
<![%ImmersiveProfile;[
<!ENTITY % BindableNodes    	" %BindableNodeExtensions; %GeoViewpointNode; Background|Fog|NavigationInfo|TextureBackground|Viewpoint " >

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

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

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

<!ENTITY % GeometryNodes    	" %GeometryNodeExtensions; %GeoElevationGridNode; %NurbsGeometryNodes; %Web3dExtensionGeometryNodes; %Geometry2DNodes;|Box|Cone|Cylinder|ElevationGrid|Extrusion|IndexedFaceSet|IndexedLineSet|LineSet|PointSet|Sphere|Text|IndexedTriangleFanSet|IndexedTriangleSet|IndexedTriangleStripSet|TriangleFanSet|TriangleSet|TriangleStripSet " >

<!ENTITY % GroupingNodes    	" %GroupingNodeExtensions; %DISGroupingNodes; %GeoGroupingNodes; %HAnimGroupingNodes; %NurbsGroupingNodes; %Web3dExtensionGroupingNodes; Anchor|Billboard|Collision|Group|Inline|LOD|StaticGroup|Switch|Transform " >
]]>
<![%ImmersiveProfile;[
<!ENTITY % LightNodes       	" %LightNodeExtensions; DirectionalLight|SpotLight|PointLight " >

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

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

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

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

<!ENTITY % WorldInfoNodes   	  " %WorldInfoNodeExtensions; %GeoMetadataNode; WorldInfo " >
]]>
<![%InterchangeProfile;[
<!ENTITY % GeometricPropertyNodes " %ColorNodes; " >

<!ENTITY % AppearanceChildNodes	" %MaterialNodes; " >

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

<!ENTITY % MetadataNodes 	" %MetadataNodeExtensions; MetadataDouble|MetadataFloat|MetadataInteger|MetadataSet|MetadataString ">

<!ENTITY % ProtoNodes       	"" >
]]>
<![%ImmersiveProfile;[
<!ENTITY % GeometricPropertyNodes " %CoordinateNodes;|%ColorNodes;|%NormalNodes;|%TextureCoordinateNodes; " >

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

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

<!ENTITY % OtherLeafNodes   	" AudioClip|LineProperties|FillProperties " >

<!ENTITY % MetadataNodes 	" %MetadataNodeExtensions; MetadataDouble|MetadataFloat|MetadataInteger|MetadataSet|MetadataString|ProtoInstance ">

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

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

<![%InterchangeProfile;[
<!ENTITY % SceneNodes       	" %ChildrenNodes;|%WildcardNodes; " >
]]>
<![%ImmersiveProfile;[
<!ENTITY % SceneNodes       	" ExternProtoDeclare|ProtoDeclare|%ChildrenNodes;|%WildcardNodes; " >
]]>
<!-- SensorNodes not used (yet, anyway) in tagset content-model 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 ">

<!-- ***** X3D DTD ***** -->
<![%ImmersiveProfile;[
<!ELEMENT Anchor (IS?, (%MetadataNodes;)?, ( %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 (%MetadataNodes;)?, ( %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?, (%MetadataNodes;)?,
(  (FillProperties, LineProperties?)|(LineProperties, FillProperties)? )?,
(  ((%MaterialNodes;), (
			((%Texture2DNodes;),((%TextureTransformNodes;)|%WildcardNodes;)?) |
			((%TextureTransformNodes;),((%Texture2DNodes;)|%WildcardNodes;)?) |
			(%WildcardNodes;,((%Texture2DNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) )? )
|((%Texture2DNodes;), (	
			((%MaterialNodes;),((%TextureTransformNodes;)|%WildcardNodes;)?) |
			((%TextureTransformNodes;),((%MaterialNodes;)|%WildcardNodes;)?) |
			(%WildcardNodes;,((%MaterialNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) )? )
|((%TextureTransformNodes;), (
			((%MaterialNodes;),((%Texture2DNodes;)|%WildcardNodes;)?) |
			((%Texture2DNodes;),((%MaterialNodes;)|%WildcardNodes;)?) |
			(%WildcardNodes;,((%MaterialNodes;)|(%Texture2DNodes;)|%WildcardNodes;)?) )? )
|(%WildcardNodes;, (	
			((%MaterialNodes;),((%Texture2DNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) |
			((%Texture2DNodes;),((%MaterialNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) |
			((%TextureTransformNodes;),((%MaterialNodes;)|(%Texture2DNodes;)|%WildcardNodes;)?) |
			(%WildcardNodes;,((%MaterialNodes;)|(%Texture2DNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) )? )
)? ) >
]]>
<![%InterchangeProfile;[
<!ELEMENT Appearance ( (%MetadataNodes;)?, 
(  ((%MaterialNodes;), (%Texture2DNodes;)?  )
|((%Texture2DNodes;),  (%MaterialNodes;)? )
)? ) > 
]]>
<!ATTLIST Appearance
	containerField NMTOKEN "appearance"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT AudioClip ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST AudioClip
	description %SFString; #IMPLIED
	loop        %SFBool;   "false"
	pitch       %SFFloat;  "1.0"
	startTime   %SFTime;   "0"
	stopTime    %SFTime;   "0"
	pauseTime   %SFTime;   "0"
	resumeTime  %SFTime;   "0"
	url         %MFString; #IMPLIED
	containerField NMTOKEN "source"
	class       CDATA      #IMPLIED
	DEF         ID         #IMPLIED
	USE         IDREF      #IMPLIED>
]]>
<!ELEMENT Background ((IS?), (%MetadataNodes;)?)>
<!ATTLIST Background
	groundAngle %MFFloat; #IMPLIED
	groundColor %MFColor; #IMPLIED
	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?, (%MetadataNodes;)?, ( %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?), (%MetadataNodes;)? ) >
<!ATTLIST BooleanFilter
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

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

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

<!ELEMENT BooleanTrigger ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST BooleanTrigger
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>
]]>
<![%ImmersiveProfile;[
<!-- Geometry2D nodes -->

<!ELEMENT Arc2D ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!ATTLIST ArcClose2D
	radius      %SFFloat; "1"
	startAngle  %SFFloat; "0"
	endAngle    %SFFloat; "1.570796"
	closureType (PIE|CHORD) "PIE"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class       CDATA    #IMPLIED
	DEF  ID     #IMPLIED 
	USE  IDREF  #IMPLIED>

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

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

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

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

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

<!ELEMENT TriangleSet2D ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TriangleSet2D
	vertices     %MFVec2f; #IMPLIED
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class        CDATA     #IMPLIED
	DEF  ID      #IMPLIED 
	USE  IDREF   #IMPLIED>
]]>
<![%ImmersiveProfile;[
<!ELEMENT Box ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST Box
	size  %SFVec3f; "2 2 2"
	solid %SFBool;  "true"
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF  ID        #IMPLIED 
	USE  IDREF     #IMPLIED>

<!ELEMENT Collision ( (IS?), (%MetadataNodes;)?, ( %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?), (%MetadataNodes;)?)>
<!ATTLIST Color
	color %MFColor; #IMPLIED
	class CDATA #IMPLIED
	containerField NMTOKEN "color"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT ColorRGBA ((IS?), (%MetadataNodes;)?)>
<!ATTLIST ColorRGBA
	color %MFColorRGBA; #IMPLIED
	containerField NMTOKEN "color"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT component EMPTY>
<!ATTLIST component
	name  %componentNames; #REQUIRED
	level %componentLevels; #REQUIRED>
<![%ImmersiveProfile;[
<!ELEMENT ColorInterpolator ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST ColorInterpolator
	key         %MFFloat; #IMPLIED
	keyValue    %MFColor; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>

<!ELEMENT Cone ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST Cone
	bottomRadius %SFFloat; "1"
	height       %SFFloat; "2"
	side         %SFBool;  "true"
	bottom       %SFBool;  "true"
	solid           %SFBool;  "true"
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF          ID        #IMPLIED
	USE          IDREF     #IMPLIED>
]]>
<!ELEMENT Coordinate ((IS?), (%MetadataNodes;)?)>
<!ATTLIST Coordinate
	point %MFVec3f; #IMPLIED
	containerField NMTOKEN "coord"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT CoordinateDouble ((IS?), (%MetadataNodes;)?)>
<!ATTLIST CoordinateDouble
	point %MFVec3d; #IMPLIED
	containerField NMTOKEN "coord"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT CoordinateInterpolator ((IS?), (%MetadataNodes;)?)>
<!ATTLIST CoordinateInterpolator
	key %MFFloat; #IMPLIED
	keyValue %MFVec3f; #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT CoordinateInterpolator2D ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST CoordinateInterpolator2D
	key      %MFFloat; #IMPLIED
	keyValue %MFVec2f; #IMPLIED
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

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

<!ELEMENT CylinderSensor ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST CylinderSensor
	description %SFString; #IMPLIED
	autoOffset %SFBool;     "true"
	diskAngle  %SFFloat;    "0.26179167"
	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?), (%MetadataNodes;)? ) >
<!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 (%MetadataNodes;)? >
<!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?, (%MetadataNodes;)?, (
   ((%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?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!ATTLIST FillProperties
	filled   %SFBool;   "true"
	hatched  %SFBool;   "true"
	hatchStyle  %SFInt32;      "1"
	hatchColor  %SFColor;      "1 1 1"
	containerField NMTOKEN "fillProperties"
	class	  CDATA    #IMPLIED
	DEF             ID                   #IMPLIED
	USE             IDREF                #IMPLIED>

<!ELEMENT Fog ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!ATTLIST FontStyle
	family      %MFString; '&quot;SERIF&quot;'
	horizontal  %SFBool;   "true"
	justify     %MFString; '&quot;BEGIN&quot;'
	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:
	family  ' "SERIF" "SANS" "TYPEWRITER" '
	justify ' "FIRST" "BEGIN" "MIDDLE" "END" ' -->
]]>
<!ELEMENT Group (IS?, (%MetadataNodes;)?, (%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 ImageTexture ((IS?), (%MetadataNodes;)?)>
<!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?, (%MetadataNodes;)?, (
 ((%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; ) >

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

<!ELEMENT LineSet (IS?, (%MetadataNodes;)?, (
	( (%ColorNodes;), ((%CoordinateNodes;)|%WildcardNodes;)? ) |
	( (%CoordinateNodes;), ((%ColorNodes;)|%WildcardNodes;)? ) |
	( %WildcardNodes;, ((%ColorNodes;)|(%CoordinateNodes;)|%WildcardNodes;)?)
)? ) >
]]>
<![%InterchangeProfile;[
<!ELEMENT IndexedFaceSet ( (%MetadataNodes;)?, ((%ColorNodes;), Coordinate?)|(Coordinate, (%ColorNodes;)?) )? >

<!ELEMENT IndexedLineSet ( (%MetadataNodes;)?, ( Color, Coordinate? )|( Coordinate, Color?) )? >

<!ELEMENT LineSet ( (%MetadataNodes;)?, ( Color, Coordinate? )|( Coordinate, Color?) )? >
]]>
<!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>
<!ATTLIST IndexedLineSet
	colorIndex %MFInt32; #IMPLIED
	colorPerVertex %SFBool; "true"
	coordIndex %MFInt32; #IMPLIED
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ATTLIST LineSet
	vertexCount %MFInt32; #IMPLIED
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT Inline ((IS?), (%MetadataNodes;)?)>
<!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
	importedDEF NMTOKEN #REQUIRED
	AS ID #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT IntegerSequencer ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST IntegerSequencer
	key      %MFFloat; #IMPLIED
	keyValue %MFInt32; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT IntegerTrigger ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)?)>
<!ATTLIST KeySensor
	enabled %SFBool; "true"
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT LineProperties ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST LineProperties
	applied %SFBool; "true"
	linetype %SFInt32; "1"
	linewidthScaleFactor %SFFloat; "0"
	containerField NMTOKEN "lineProperties"
	class	  CDATA    #IMPLIED
	DEF             ID                   #IMPLIED
	USE             IDREF                #IMPLIED>
]]>
<!ELEMENT LoadSensor (IS?, (%MetadataNodes;)?, (%NetworkSensorNodes;|%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?, (%MetadataNodes;)?, ( %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?), (%MetadataNodes;)? ) >
<!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 ( (%MetadataNodes;)? ) >
<!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 *** -->
<!-- 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">
<!ELEMENT head (component*, meta*)>
<!-- 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; >
<!-- formal X3D Metadata nodes -->
<!ELEMENT MetadataDouble (IS?, (%MetadataNodes;)?)>
<!ATTLIST MetadataDouble
	name %SFString; #IMPLIED
	value %MFDouble; #IMPLIED
	reference %SFString; #IMPLIED
	containerField NMTOKEN "metadata"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT MetadataFloat (IS?, (%MetadataNodes;)?)>
<!ATTLIST MetadataFloat
	name %SFString; #IMPLIED
	value %MFFloat; #IMPLIED
	reference %SFString; #IMPLIED
	containerField NMTOKEN "metadata"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT MetadataInteger (IS?, (%MetadataNodes;)?)>
<!ATTLIST MetadataInteger
	name %SFString; #IMPLIED
	value %MFInt32; #IMPLIED
	reference %SFString; #IMPLIED
	containerField NMTOKEN "metadata"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT MetadataString (IS?, (%MetadataNodes;)?)>
<!ATTLIST MetadataString
	name %SFString; #IMPLIED
	value %MFString; #IMPLIED
	reference %SFString; #IMPLIED
	containerField NMTOKEN "metadata"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!-- containerField discriminates whether child Metadata node(s) are 'metadata' or 'value' fields.
	NMTOKEN vice enumeration, since containerField might have another value as field in a ProtoInstance. -->
<!ELEMENT MetadataSet (IS?, (%MetadataNodes;)*)>
<!ATTLIST MetadataSet
	reference %SFString; #IMPLIED
	name %SFString; #IMPLIED
	containerField NMTOKEN "metadata"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!-- FAQ:  MovieTexture
	containerField='source'  when used as a Sound source,
	containerField='texture' when used as a Appearance texture source-->
<!ELEMENT MovieTexture ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST MovieTexture
	loop      %SFBool;   "false"
	speed     %SFFloat;  "1.0"
	startTime %SFTime;   "0"
	stopTime  %SFTime;   "0"
	url       %MFString; #IMPLIED
	repeatS   %SFBool;   "true"
	repeatT   %SFBool;   "true"
	pauseTime %SFTime;   "0"
	resumeTime %SFTime;  "0"
	containerField NMTOKEN "texture"
	class       CDATA       #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>

<!ELEMENT MultiTexture ( (IS?), (%MetadataNodes;)?, (%MultiTextureChildTextures;|%WildcardNodes; )* ) >
<!ATTLIST MultiTexture
	mode           %MFString;	#IMPLIED
	source         %MFString;	#IMPLIED
	function       %MFString;	#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?), (%MetadataNodes;)?, (TextureCoordinate|TextureCoordinateGenerator|ProtoInstance)* ) >
<!ATTLIST MultiTextureCoordinate
	containerField NMTOKEN "texCoord"
	class       CDATA       #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>
]]>
<!ELEMENT NavigationInfo ((IS?), (%MetadataNodes;)?)>
<!ATTLIST NavigationInfo
	avatarSize %MFFloat; "0.25 1.6 0.75"
	headlight %SFBool; "true"
	speed %SFFloat; "1"
	type %MFString; "&quot;EXAMINE&quot; &quot;ANY&quot;"
	transitionType %MFString; "&quot;ANIMATE&quot;"
	visibilityLimit %SFFloat; "0"
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT Normal ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST Normal
	vector    %MFVec3f; #IMPLIED
	containerField NMTOKEN "normal"
	class	  CDATA     #IMPLIED
	DEF       ID        #IMPLIED
	USE       IDREF     #IMPLIED>

<!ELEMENT NormalInterpolator ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST NormalInterpolator
	key      %MFFloat; #IMPLIED
	keyValue %MFVec3f; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>
]]>
<!ELEMENT OrientationInterpolator ((IS?), (%MetadataNodes;)?)>
<!ATTLIST OrientationInterpolator
	key %MFFloat; #IMPLIED
	keyValue %MFRotation; #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT PixelTexture ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!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?, (%MetadataNodes;)?, (
	( (%ColorNodes;), ((%CoordinateNodes;)|%WildcardNodes;)? ) |
	( (%CoordinateNodes;), ((%ColorNodes;)|%WildcardNodes;)? ) |
	( %WildcardNodes;, ((%ColorNodes;)|(%CoordinateNodes;)|%WildcardNodes;)?)
)? ) >
]]>
<![%InterchangeProfile;[
<!ELEMENT PointSet ( (%MetadataNodes;)?, ( ( Color, Coordinate? )|( Coordinate, Color? ) )? ) >
]]>
<!ATTLIST PointSet
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT PositionInterpolator ((IS?), (%MetadataNodes;)?)>
<!ATTLIST PositionInterpolator
	key %MFFloat; #IMPLIED
	keyValue %MFVec3f; #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT PositionInterpolator2D ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST PositionInterpolator2D
	key      %MFFloat; #IMPLIED
	keyValue %MFVec2f; #IMPLIED
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>
]]>
<![%ImmersiveProfile;[
<!ELEMENT ProtoInterface ( field* ) >

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

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

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

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

<!ELEMENT ProximitySensor ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)?)>
<!ATTLIST ScalarInterpolator
	key %MFFloat; #IMPLIED
	keyValue %MFFloat; #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT Scene ((%MetadataNodes;)?, (%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 )* -->

<!ELEMENT Script ( #PCDATA|%MetadataNodes;|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?, (%MetadataNodes;)?, (
     ( (%AppearanceNodes;), (( %GeometryNodes; )|%WildcardNodes;)? ) |
     ( ( %GeometryNodes; ), ((%AppearanceNodes;)|%WildcardNodes;)? ) |
     ( %WildcardNodes;, (( %GeometryNodes; )|(%AppearanceNodes;)|%WildcardNodes;)? )
)? ) >
]]>
<![%InterchangeProfile;[
<!ELEMENT Shape ( (%MetadataNodes;)?,
	( (%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?, (%MetadataNodes;)?, ( %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?), (%MetadataNodes;)? ) >
<!ATTLIST Sphere
	radius %SFFloat; "1"
	solid           %SFBool;  "true"
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF    ID        #IMPLIED
	USE    IDREF     #IMPLIED>

<!ELEMENT SphereSensor ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!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?, (%MetadataNodes;)?, ( %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?), (%MetadataNodes;)? ) >
<!ATTLIST StringSensor 
	enabled			%SFBool;	"true"
	deletionAllowed 	%SFBool;	"true"
	containerField NMTOKEN "children"
	class			CDATA    #IMPLIED
	DEF			ID		#IMPLIED
	USE			IDREF		#IMPLIED>
]]>
<!ELEMENT Switch (IS?, (%MetadataNodes;)?, (%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?, (%MetadataNodes;)?, ( (%FontStyleNodes;)?|%WildcardNodes; ) ) >
<!ATTLIST Text
	string    %MFString; #IMPLIED
	length    %MFFloat;  #IMPLIED
	maxExtent %SFFloat;  "0.0"
	solid %SFBool; "true"
	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?, (%MetadataNodes;)?, (%Texture2DNodes;)* )>
<!ATTLIST TextureBackground
	groundAngle  %MFFloat;  #IMPLIED
	groundColor  %MFColor;  #IMPLIED
	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?), (%MetadataNodes;)?)>
<!ATTLIST TextureCoordinate
	point %MFVec2f; #IMPLIED
	containerField NMTOKEN "texCoord"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT TextureCoordinateGenerator ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TextureCoordinateGenerator
	mode      %TextureCoordinateGeneratorModes;  "SPHERE"
	parameter %MFFloat;  #IMPLIED
	containerField NMTOKEN "texCoord"
	class       CDATA    #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>

<!ELEMENT TextureTransform ( (IS?), (%MetadataNodes;)? ) >
<!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|ProtoInstance)* ) >
<!ATTLIST MultiTextureTransform
	containerField NMTOKEN "textureTransform"
	class       CDATA     #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>

]]>
<!ELEMENT TimeSensor ((IS?), (%MetadataNodes;)?)>
<!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 TimeTrigger ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TimeTrigger
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT TouchSensor ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TouchSensor
	description %SFString; #IMPLIED
	enabled      %SFBool;  "true"
	containerField NMTOKEN "children"
	class        CDATA     #IMPLIED
	DEF          ID        #IMPLIED
	USE          IDREF     #IMPLIED>
]]>
<!ELEMENT Transform (IS?, (%MetadataNodes;)?, (%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>
<!ELEMENT IndexedTriangleFanSet %ColorCoordinateNormalTextureCoordinateContentModel;>
<!ATTLIST IndexedTriangleFanSet
	index %MFInt32; #IMPLIED
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT IndexedTriangleSet %ColorCoordinateNormalTextureCoordinateContentModel;>
<!ATTLIST IndexedTriangleSet
	index %MFInt32; #IMPLIED
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT IndexedTriangleStripSet %ColorCoordinateNormalTextureCoordinateContentModel;>
<!ATTLIST IndexedTriangleStripSet
	index %MFInt32; #IMPLIED
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT TriangleFanSet %ColorCoordinateNormalTextureCoordinateContentModel;>
<!ATTLIST TriangleFanSet
	fanCount %MFInt32; #IMPLIED
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	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"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT TriangleStripSet %ColorCoordinateNormalTextureCoordinateContentModel;>
<!ATTLIST TriangleStripSet
	stripCount %MFInt32; #IMPLIED
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT Viewpoint ((IS?), (%MetadataNodes;)?)>
<!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?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)?)>
<!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
	xmlns:xsd CDATA "http://www.w3.org/2001/XMLSchema-instance"
	xsd:noNamespaceSchemaLocation CDATA "http://www.web3d.org/specifications/x3d-3.0.xsd"
	profile %profileNames; #REQUIRED
	version (3.0) #REQUIRED>
<!-- EspduTransform includes DIS CollisionPdu DetonatePdu FirePdu -->
<![%DISComponent;[
<!ELEMENT EspduTransform (IS?, (%MetadataNodes;)?, ( %ChildrenNodes;|%WildcardNodes; )* ) >
<!ATTLIST EspduTransform
	enabled     %SFBool;  "true"
	marking 	 %SFString;	#IMPLIED
	siteID  	 %SFInt32;	"0"
	applicationID	 %SFInt32;	"1"
	entityID	 %SFInt32;	"0"
	forceID		 %SFInt32;	"0"
	entityKind	 %SFInt32;	"0"
	entityDomain	 %SFInt32;	"0"
	entityCountry	 %SFInt32;	"0"
	entityCategory	 %SFInt32;	"0"
	entitySubCategory %SFInt32;	"0"
	entitySpecific	 %SFInt32;	"0"
	entityExtra	 %SFInt32;	"0"
	readInterval	 %SFTime;	"0.1"
	writeInterval	 %SFTime;	"1.0"
	networkMode	 (standAlone|networkReader|networkWriter)	"standAlone"
	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;	"localhost"
	port    	 	%SFInt32;	"0"
	multicastRelayHost 	%SFString;	#IMPLIED
	multicastRelayPort 	%SFInt32;	"0"
	rtpHeaderExpected  	%SFBool;	"false"
	deadReckoning  		%SFInt32;	"0"
	linearVelocity		%SFVec3f;	"0 0 0"
	linearAcceleration	%SFVec3f;	"0 0 0"
	fired1   		%SFBool;	"false"
	fired2   		%SFBool;	"false"
	collisionType	%SFInt32;	"0"
	detonationLocation	%SFVec3f;	"0 0 0"
	detonationRelativeLocation	%SFVec3f;	"0 0 0"
	detonationResult	%SFInt32;	"0"
	eventApplicationID	%SFInt32;	"1"
	eventEntityID	%SFInt32;	"0"
	eventNumber	%SFInt32;	"0"
	eventSiteID	%SFInt32;	"0"
	munitionStartPoint 	%SFVec3f;	"0 0 0"
	munitionEndPoint   	%SFVec3f;	"0 0 0"
	warhead			%SFInt32;	"0"
	fuse			%SFInt32;	"0"
	munitionQuantity	%SFInt32;	"0"
	firingRate		%SFInt32;	"0"
	firingRange		%SFFloat;	"0"
	munitionSiteID  	%SFInt32;	"0"
	munitionApplicationID	%SFInt32;	"1"
	munitionEntityID	%SFInt32;	"0"
	fireMissionIndex	%SFInt32;	"0"
	articulationParameterCount 		  %SFInt32;	"0"
	articulationParameterDesignatorArray 	  %MFInt32;	#IMPLIED
	articulationParameterChangeIndicatorArray %MFInt32;	#IMPLIED
	articulationParameterIdPartAttachedToArray  %MFInt32;	#IMPLIED
	articulationParameterTypeArray 		  %MFInt32;	#IMPLIED
	articulationParameterArray 		  %MFFloat;	#IMPLIED
	containerField NMTOKEN "children"
	class			CDATA		""
	DEF			ID		#IMPLIED 
	USE			IDREF		#IMPLIED >

<!ELEMENT ReceiverPdu ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST ReceiverPdu 
	enabled     %SFBool;  "true"
	whichGeometry		%SFInt32;	"1"
	bboxCenter	 	%SFVec3f;	"0 0 0"
	bboxSize	 	%SFVec3f;	"-1 -1 -1"

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

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

	radioID			%SFInt32;	"0"
	receivedPower		%SFFloat;	"0.0"
	receiverState		%SFInt32;	"0"
	transmitterSiteID	%SFInt32;	"0"
	transmitterApplicationID %SFInt32;	"0"
	transmitterEntityID	%SFInt32;	"0"
	transmitterRadioID	%SFInt32;	"0"

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

<!ELEMENT SignalPdu ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST SignalPdu
	enabled     %SFBool;  "true"
	whichGeometry		%SFInt32;	"1"
	bboxCenter		 %SFVec3f;	"0 0 0"
	bboxSize	 	%SFVec3f;	"-1 -1 -1"

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

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

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

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

<!ELEMENT TransmitterPdu ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TransmitterPdu 
	enabled     %SFBool;  "true"
	whichGeometry		%SFInt32;	"1"
	bboxCenter	 	%SFVec3f;	"0 0 0"
	bboxSize	 	%SFVec3f;	"-1 -1 -1"

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

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

	radioID			%SFInt32;	"0"
	antennaLocation		%SFVec3f;	"0 0 0"
	antennaPatternLength	%SFInt32;	"0"
	antennaPatternType	%SFInt32;	"0"
	cryptoKeyID		%SFInt32;	"0"
	cryptoSystem		%SFInt32;	"0"
	frequency		%SFInt32;	"0"
	inputSource		%SFInt32;	"0"

	lengthOfModulationParameters	%SFInt32;	"0"
	modulationTypeDetail		%SFInt32;	"0"
	modulationTypeMajor		%SFInt32;	"0"
	modulationTypeSpreadSpectrum	%SFInt32;	"0"
	modulationTypeSystem		%SFInt32;	"0"
	power				%SFFloat;	"0.0"
	radioEntityTypeCategory		%SFInt32;	"0"
	radioEntityTypeCountry		%SFInt32;	"0"
	radioEntityTypeDomain		%SFInt32;	"0"
	radioEntityTypeKind		%SFInt32;	"0"
	radioEntityTypeNomenclature	%SFInt32;	"0"
	radioEntityTypeNomenclatureVersion %SFInt32;	"0"
	relativeAntennaLocation		%SFVec3f;	"0 0 0"
	transmitFrequencyBandwidth	%SFFloat;	"0.0"
	transmitState			%SFInt32;	"0"

	containerField NMTOKEN "children"
	class				CDATA		""
	DEF   				ID		#IMPLIED 
	USE             		IDREF		#IMPLIED >
]]>
<![%GeoSpatialComponent;[
<!ELEMENT GeoCoordinate ( IS?, (%MetadataNodes;)?, GeoOrigin? ) >  <!-- X3DCoordinateNodeType -->
<!ATTLIST GeoCoordinate
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	point		%MFVec3d;	#IMPLIED
	containerField NMTOKEN "coord"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!-- need to restrict GeoOrigin to first element, or relax schema restriction -->
<!ELEMENT GeoElevationGrid (IS?, (%MetadataNodes;)?, (
 ((%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	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	geoGridOrigin	%SFVec3d;	"0 0 0"
	xDimension	%SFInt32;	"0"
	xSpacing	%SFDouble;	"1.0"
	yScale		%SFFloat;	"1.0"
	zDimension	%SFInt32;	"0"
	zSpacing	%SFDouble;	"1.0"
	height		%MFDouble; 	"0 0"
	normalPerVertex	%SFBool;	"true"
	ccw		%SFBool;	"true"
	colorPerVertex	%SFBool;	"true"
	creaseAngle	%SFFloat;	"0"
	solid		%SFBool;	"true"
	containerField NMTOKEN "geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT GeoLocation (IS?, (%MetadataNodes;)?,
	( %ChildrenNodes;|%WildcardNodes; )*, (GeoOrigin, ( %ChildrenNodes;|%WildcardNodes; )* )? ) >
<!ATTLIST GeoLocation
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	geoCoords	%SFVec3d;	"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 GeoLOD (IS?, (%MetadataNodes;)?,
	( %ChildrenNodes;|%WildcardNodes; )*, (GeoOrigin, ( %ChildrenNodes;|%WildcardNodes; )* )? ) >
<!ATTLIST GeoLOD
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	rootUrl	 	%MFString;	#IMPLIED
	child1Url	%MFString;	#IMPLIED
	child2Url	%MFString;	#IMPLIED
	child3Url	%MFString;	#IMPLIED
	child4Url 	%MFString;	#IMPLIED
	range		%SFFloat;	"10"
	center		%SFVec3d;	"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 GeoMetadata ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST GeoMetadata
	url		%MFString;	#IMPLIED
	data		IDREFS		#IMPLIED
	summary		%MFString;	#IMPLIED
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#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
-->

<!ELEMENT GeoOrigin ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST GeoOrigin
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	geoCoords	%SFVec3d;	"0 0 0"
	rotateYUp	%SFBool;	"false"
	containerField NMTOKEN "geoOrigin"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT GeoPositionInterpolator ( IS?, (%MetadataNodes;)?, GeoOrigin? ) >
<!ATTLIST GeoPositionInterpolator
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	key		%MFFloat;	#IMPLIED
	keyValue	%MFVec3d;	#IMPLIED
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID	#IMPLIED
	USE		IDREF	#IMPLIED>

<!ELEMENT GeoTouchSensor ( IS?, (%MetadataNodes;)?, GeoOrigin? ) >
<!ATTLIST GeoTouchSensor
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	enabled		%SFBool;	"true"
	description	%SFString;	#IMPLIED
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID	#IMPLIED
	USE		IDREF	#IMPLIED>

<!ELEMENT GeoViewpoint ( IS?, (%MetadataNodes;)?, GeoOrigin? ) >
<!ATTLIST GeoViewpoint
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	description	%SFString;	#IMPLIED
	position	%SFVec3d;	"0 0 100000"
	orientation	%SFRotation;	"0 0 1 0"
	fieldOfView	%SFFloat;	"0.785398"
	jump		%SFBool;	"true"
	navType		%MFString;	'&quot;EXAMINE&quot; &quot;ANY&quot;'
	headlight	%SFBool;	"true"
	speedFactor	%SFFloat;	"1.0"
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>
]]>
<!-- Note that setting JointNames as enumerations does not permit validation of other names. -->
<![%HAnimComponent;[
<!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)" >

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

<!ELEMENT HAnimHumanoid (IS?, (%MetadataNodes;)?, 
	(HAnimJoint*,	HAnimSegment*, HAnimSite*, (%CoordinateNodes;)?, (%NormalNodes;)?, ( %ChildrenNodes;|%WildcardNodes; )* ) ) >
<!-- skeleton/joints,	segments,      sites,      skinCoord,            skinNormal,       skin/viewpoints -->
<!-- note that joints, segments and sites should be USE nodes.  skin Shapes will USE preceding skinCoord, skinNormal definitions. -->
<!ATTLIST HAnimHumanoid
	name			%SFString;	#IMPLIED
	version			%SFString;	#IMPLIED
	info			%MFString;	#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>
]]>
<!--	not treated as separate attributes, instead these are
	encoded as "attribute=value" SFString entries in the
	MFString info field.

	humanoidVersion		%SFString;	#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
-->
<![%HAnimComponent;[
<!ELEMENT HAnimJoint (IS?, (%MetadataNodes;)?, ( %ChildrenNodes;|HAnimDisplacer|%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 HAnimDisplacer nodes must appear consecutively inside HAnimSegment -->

<!ELEMENT HAnimSegment (IS?, (%MetadataNodes;)?, (
	((%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?, (%MetadataNodes;)?, ( %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;[
<!ELEMENT Contour2D (IS?, (%MetadataNodes;)?, ( %NurbsControlCurveNodes;|%WildcardNodes; )* ) >
<!ATTLIST Contour2D
	containerField NMTOKEN "trimmingContour"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

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

<!-- child CoordinateNode has containerField controlPoint -->
<!ELEMENT NurbsCurve ( (IS?), (%MetadataNodes;)?, ( %CoordinateNodes;|%WildcardNodes; )? ) >
<!ATTLIST NurbsCurve
	knot		%MFDouble;	#IMPLIED
	order		%SFInt32;	"3"
	weight		%MFDouble;	#IMPLIED
	tessellation	%SFInt32;	"0"
	closed		%SFBool;	"false"
	containerField NMTOKEN 		"geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsCurve2D ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST NurbsCurve2D
	controlPoint	%MFVec2d;	#IMPLIED
	knot		%MFDouble;	#IMPLIED
	order		%SFInt32;	"3"
	weight		%MFDouble;	#IMPLIED
	tessellation	%SFInt32;	"0"
	closed		%SFBool;	"false"
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsOrientationInterpolator ( (IS?), (%MetadataNodes;)?, (%CoordinateNodes;)? ) >
<!ATTLIST NurbsOrientationInterpolator
	knot			%MFDouble;	#IMPLIED
	order			%SFInt32;	"3"
	weight			%MFDouble;	#IMPLIED
	containerField NMTOKEN "children"
	class			CDATA		""
	DEF			ID	#IMPLIED
	USE			IDREF	#IMPLIED>

<!ELEMENT NurbsPositionInterpolator ( (IS?), (%MetadataNodes;)?, (%CoordinateNodes;)? ) >
<!ATTLIST NurbsPositionInterpolator
	knot			%MFDouble;	#IMPLIED
	order			%SFInt32;	"3"
	weight			%MFDouble;	#IMPLIED
	containerField NMTOKEN "children"
	class			CDATA		""
	DEF			ID	#IMPLIED
	USE			IDREF	#IMPLIED>

<!ELEMENT NurbsSurfaceInterpolator ( (IS?), (%MetadataNodes;)?, (%CoordinateNodes;)? ) >
<!ATTLIST NurbsSurfaceInterpolator
	weight		%MFDouble;	#IMPLIED
	uDimension	%SFInt32;	"0"
	vDimension	%SFInt32;	"0"
	uKnot		%MFDouble;	#IMPLIED
	vKnot		%MFDouble;	#IMPLIED
	uOrder		%SFInt32;	"3"
	vOrder		%SFInt32;	"3"
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID	#IMPLIED
	USE		IDREF	#IMPLIED>

<!ELEMENT NurbsSet (IS?, (%MetadataNodes;)?, (NurbsPatchSurface|NurbsSweptSurface|NurbsSwungSurface|NurbsTrimmedSurface|%WildcardNodes; )* ) >
<!ATTLIST NurbsSet
	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 NurbsPatchSurface (IS?, (%MetadataNodes;)?, ( %CoordinateNodes;|%WildcardNodes; )?, ( %TextureCoordinateNodes;|NurbsTextureCoordinate)? ) >
<!ATTLIST NurbsPatchSurface
	uClosed		%SFBool;	"false"
	vClosed		%SFBool;	"false"
	uDimension	%SFInt32;	"0"
	vDimension	%SFInt32;	"0"
	uKnot		%MFDouble;	#IMPLIED
	vKnot		%MFDouble;	#IMPLIED
	uOrder		%SFInt32;	"3"
	vOrder		%SFInt32;	"3"
	uTessellation	%SFInt32;	"0"
	vTessellation	%SFInt32;	"0"
	weight		%MFDouble;	#IMPLIED
	solid		%SFBool;  	"true"
	containerField NMTOKEN "geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsTrimmedSurface (IS?, (%MetadataNodes;)?, ( %CoordinateNodes;|%WildcardNodes; )?, ( %TextureCoordinateNodes;|NurbsTextureCoordinate)?, Contour2D* ) >
<!ATTLIST NurbsTrimmedSurface
	uClosed		%SFBool;	"false"
	vClosed		%SFBool;	"false"
	uDimension	%SFInt32;	"0"
	vDimension	%SFInt32;	"0"
	uKnot		%MFDouble;	#IMPLIED
	vKnot		%MFDouble;	#IMPLIED
	uOrder		%SFInt32;	"3"
	vOrder		%SFInt32;	"3"
	uTessellation	%SFInt32;	"0"
	vTessellation	%SFInt32;	"0"
	weight		%MFDouble;	#IMPLIED
	solid		%SFBool;  	"true"
	containerField NMTOKEN "geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsSweptSurface (IS?, (%MetadataNodes;)?, (NurbsCurve|%WildcardNodes; )?, ( %NurbsControlCurveNodes;|%WildcardNodes; )? ) >
<!ATTLIST NurbsSweptSurface
	ccw		%SFBool;  	"true"
	solid		%SFBool;  	"true"
	containerField NMTOKEN "geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsSwungSurface (IS?, (%MetadataNodes;)?, ( ( %NurbsControlCurveNodes;|%WildcardNodes; ), ( %NurbsControlCurveNodes;|%WildcardNodes; )? )? ) >
<!ATTLIST NurbsSwungSurface
	ccw		%SFBool;  	"true"
	solid		%SFBool;  	"true"
	containerField NMTOKEN "geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsTextureCoordinate ( (IS?), (%MetadataNodes;)?, (%CoordinateNodes;)? ) >
<!ATTLIST NurbsTextureCoordinate
	controlPoint	%MFVec2f;	#IMPLIED
	weight		%MFFloat;	#IMPLIED
	uDimension	%SFInt32;	"0"
	vDimension	%SFInt32;	"0"
	uKnot		%MFDouble;	#IMPLIED
	vKnot		%MFDouble;	#IMPLIED
	uOrder		%SFInt32;	"3"
	vOrder		%SFInt32;	"3"
	containerField NMTOKEN "texCoord"
	class		CDATA		""
	DEF		ID	#IMPLIED
	USE		IDREF	#IMPLIED>
]]>
<!-- 	Finally, add inputOnly/outputOnly attributes and Web3dExtensionComponent from separate DTDs.
	Note that Web3dExtensionComponent content-model extensions needed to be added at beginning,
	prior to node-type definitions. -->
<![%X3dInputOutputFields;[

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

%FieldsDTD;

]]>
<![%Web3dExtensionComponent;[

<!ENTITY % Web3dExtensionsPublicDTD  SYSTEM "x3d-3.0-Web3dExtensionsPublic.dtd">
<!ENTITY % Web3dExtensionsPrivateDTD SYSTEM "x3d-3.0-Web3dExtensionsPrivate.dtd">

%Web3dExtensionsPublicDTD;
%Web3dExtensionsPrivateDTD;

]]>

A.3

Replace the content of A.3 with the following text:

x3d-3.0-InputOutputFields.dtd extends the X3D version 3.0 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.

<!--
#
# X3D InputOutputFields DTD:
#
#	http://www.web3d.org/specifications/x3d-3.0-InputOutputFields.dtd
#
#	current version:  3.0.7
#
#	revised:          19 December 2005
#
#	Author:           Don Brutzman
#
# Purpose: the primary 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
#	http://www.web3d.org/specifications/x3d-3.0-Web3dExtensions.dtd
#
# 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/specifications/x3d-dtd-changelog.txt
#
# Note on typing:
#	CDATA used for %SFBool; definitions to allow #FIXED "" initialization,
#	  since DTD rules otherwise require enumeration values to be 
#	  initialized to true|false.
#
-->

<!ATTLIST AudioClip
	elapsedTime   %SFTime;    #FIXED ""
	duration_changed %SFTime; #FIXED ""
	isPaused      CDATA       #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 IndexedTriangleFanSet
	set_index  %MFInt32; #FIXED "">

<!ATTLIST IndexedTriangleSet
	set_index  %MFInt32; #FIXED "">

<!ATTLIST IndexedTriangleStripSet
	set_index  %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		%SFString;	#FIXED ""
	keyRelease		%SFString;	#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
	elapsedTime       %SFTime;  #FIXED ""
	duration_changed  %SFTime;  #FIXED ""
	isPaused          CDATA     #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
	elapsedTime   %SFTime;  #FIXED ""
	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 ""
	isRtpHeaderHeard     			CDATA		#FIXED ""
	isActive   				CDATA		#FIXED ""
	timestamp	 			%SFTime;	#FIXED ""
	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   				CDATA		#FIXED ""
	collideTime   				%SFTime;	#FIXED ""
	isDetonated   				CDATA		#FIXED ""
	detonateTime   				%SFTime;	#FIXED ""
	firedTime   				%SFTime;	#FIXED ""
>
<!ATTLIST ReceiverPdu 
	isStandAlone		 		CDATA		#FIXED ""
	isNetworkReader	 			CDATA		#FIXED ""
	isNetworkWriter	 			CDATA		#FIXED ""
	isRtpHeaderHeard     			CDATA		#FIXED ""
	isActive   				CDATA		#FIXED ""
	timestamp	 			%SFTime;	#FIXED ""
>

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

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

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

<!ATTLIST GeoTouchSensor
	isActive		CDATA		#FIXED ""
	isOver			CDATA		#FIXED ""
	touchTime		%SFTime;	#FIXED ""	
	hitGeoCoord_changed	%SFVec3d;	#FIXED ""
	hitNormal_changed	%SFVec3f;	#FIXED ""
	hitPoint_changed	%SFVec3f;	#FIXED ""
	hitTexCoord_changed 	%SFVec2f;	#FIXED "">
	
<!ATTLIST GeoViewpoint
	set_bind        CDATA        #FIXED ""
	set_orientation %SFRotation; #FIXED ""
	set_position    %SFVec3d;    #FIXED ""
	bindTime        %SFTime;     #FIXED ""
	isBound         CDATA        #FIXED "">

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

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

<!ATTLIST NurbsSurfaceInterpolator
	set_fraction		%SFVec2f;	#FIXED ""
	normal_changed		%SFVec3f;	#FIXED ""
	position_changed	%SFVec3f;	#FIXED "">

A.3

Insert the following new subclauses after A.3:

"A.4 x3d-3.1.dtd

x3d-3.1.dtd is the X3D DTD that validates X3D version 3.1 content:

<!--
# Extensible 3D (X3D) Specification Document Type Definition (DTD) x3d-3.0.dtd
#
#	http://www.web3d.org/specifications/x3d-3.1.dtd
#
#	current version:  3.1.0
#
#	created:          30 April 2005
#	revised:          10 January 2006
#
#	Author:           Don Brutzman
#
# X3D Specification DTDs:
#	http://www.web3d.org/specifications/x3d-3.1.dtd
#	http://www.web3d.org/specifications/x3d-3.1-InputOutputFields.dtd
#	http://www.web3d.org/specifications/x3d-3.1-Web3dExtensionsPublic.dtd
#	http://www.web3d.org/specifications/x3d-3.1-Web3dExtensionsPrivate.dtd
#
# X3D Revision DTDs:
#	http://www.web3d.org/x3d/content/x3d-3.1.dtd
#	http://www.web3d.org/x3d/content/x3d-3.1-InputOutputFields.dtd
#	http://www.web3d.org/x3d/content/x3d-3.1-Web3dExtensionsPublic.dtd
#	http://www.web3d.org/x3d/content/x3d-3.1-Web3dExtensionsPrivate.dtd
#
# Final doctype:
#  <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1//EN" "http://www.web3d.org/specifications/x3d-3.1.dtd">
#
# Transitional doctype:
#  <!DOCTYPE X3D PUBLIC "http://www.web3d.org/specifications/x3d-3.1.dtd" "file:///www.web3d.org/specifications/x3d-3.1.dtd">
#
# Typical system location for this resource:
#	file://c:/www.web3d.org/specifications/x3d-3.1.dtd
#	  file:///www.web3d.org/specifications/x3d-3.1.dtd
#
# Change log:
#	http://www.web3d.org/specifications/x3d-dtd-changelog.txt
#
# Further information on the Extensible 3D (X3D) specification is available at
#	http://www.web3D.org/x3d.html
-->

<!--	Profile:  default is Full profile and all components.
	Authors can override these default IGNORE/INCLUDE values.
	If InterchangeProfile or InteractiveProfile is INCLUDEd, then IGNORE all others. -->
<!ENTITY % ImmersiveProfile		"INCLUDE">
<!ENTITY % InterchangeProfile		"IGNORE">
<!ENTITY % InteractiveProfile		"IGNORE">
<!ENTITY % CadComponent 		"INCLUDE">
<!ENTITY % CubeMapTexturingComponent 	"INCLUDE">
<!ENTITY % DISComponent 		"INCLUDE">
<!ENTITY % GeoSpatialComponent	"INCLUDE">
<!ENTITY % HAnimComponent 		"INCLUDE">
<!ENTITY % NurbsComponent 		"INCLUDE">
<!ENTITY % ShadersComponent 		"INCLUDE">
<!ENTITY % Texture3DComponent 	"INCLUDE">
<!ENTITY % Web3dExtensionComponent	"INCLUDE">
<!ENTITY % X3dInputOutputFields		"INCLUDE">
<!ENTITY % X3dExtensions		"IGNORE">

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

<!ENTITY % componentNames "(Core|CADGeometry|CubeMapTexturing|DIS|EnvironmentalEffects|EnvironmentalSensor|EventUtilities|Geometry2D|Geometry3D|Geospatial|Grouping|H-Anim|Interpolation|KeyDeviceSensor|Lighting|Navigation|Networking|NURBS|PointingDeviceSensor|Rendering|Scripting|Shaders|Shape|Sound|Text|Texturing|Texturing3D|Time)">

<!ENTITY % componentLevels "(1|2|3|4)">

<!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|SFVec2d|MFVec2d|SFVec3f|MFVec3f|SFVec3d|MFVec3d|SFMatrix3d|MFMatrix3d|SFMatrix3f|MFMatrix3f|SFMatrix4d|MFMatrix4d|SFMatrix4f|MFMatrix4f|SFVec4d|MFVec4d|SFVec4f|MFVec4f">

<!-- X3D type definitions as DTD types -->
<!ENTITY % SFBool	"(true|false)">
<!ENTITY % MFBool	"CDATA">
<!ENTITY % SFColor	"CDATA">
<!ENTITY % MFColor	"CDATA">
<!ENTITY % SFColorRGBA	"CDATA">
<!ENTITY % MFColorRGBA	"CDATA">
<!ENTITY % SFFloat	"CDATA">
<!ENTITY % MFFloat	"CDATA">
<!ENTITY % SFDouble	"CDATA">
<!ENTITY % MFDouble	"CDATA">
<!ENTITY % SFImage	"CDATA">
<!ENTITY % MFImage	"CDATA">
<!ENTITY % SFInt32	"CDATA">
<!ENTITY % MFInt32	"CDATA">
<!ENTITY % SFRotation	"CDATA">
<!ENTITY % MFRotation	"CDATA">
<!ENTITY % SFString	"CDATA">
<!ENTITY % MFString	"CDATA">
<!ENTITY % SFTime	"CDATA">
<!ENTITY % MFTime	"CDATA">
<!ENTITY % SFVec2f	"CDATA">
<!ENTITY % MFVec2f	"CDATA">
<!ENTITY % SFVec2d	"CDATA">
<!ENTITY % MFVec2d	"CDATA">
<!ENTITY % SFVec3f	"CDATA">
<!ENTITY % MFVec3f	"CDATA">
<!ENTITY % SFVec3d	"CDATA">
<!ENTITY % MFVec3d	"CDATA">
<!ENTITY % SFVec4f	"CDATA">
<!ENTITY % MFVec4f	"CDATA">
<!ENTITY % SFVec4d	"CDATA">
<!ENTITY % MFVec4d	"CDATA">
<!ENTITY % SFMatrix3f	"CDATA">
<!ENTITY % MFMatrix3f	"CDATA">
<!ENTITY % SFMatrix3d	"CDATA">
<!ENTITY % MFMatrix3d	"CDATA">
<!ENTITY % SFMatrix4f	"CDATA">
<!ENTITY % MFMatrix4f	"CDATA">
<!ENTITY % SFMatrix4d	"CDATA">
<!ENTITY % MFMatrix4d	"CDATA">

<!ENTITY % TextureCoordinateGeneratorModes	"(SPHERE|CAMERASPACENORMAL|CAMERASPACEPOSITION|CAMERASPACEREFLECTIONVECTOR|SPHERE-LOCAL|COORD|COORD-EYE|NOISE|NOISE-EYE|SPHERE-REFLECT|SPHERE-REFLECT-LOCAL)">

<!--	User needs to append | after listing each new node in any of these extensions.
	For an example, see examples/development/ProtoTagDtdDeclarationExamples.x3d   -->
<!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 % MetadataNodeExtensions "">
<!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 % NetworkSensorNodeExtensions "">
<!ENTITY % WorldInfoNodeExtensions "">
<!-- Users defining PROTOs do not override any of the following parameter entity declarations. -->
<![%ImmersiveProfile;[
<!ENTITY % WildcardNodes       	" (ProtoInstance) " >
]]>
<![%InterchangeProfile;[
<!ENTITY % WildcardNodes       	" " >
]]>
<![%DISComponent;[
<!ENTITY % DISGroupingNodes	" EspduTransform|SignalPdu|ReceiverPdu|TransmitterPdu|" >
]]>
<![%GeoSpatialComponent;[
<!ENTITY % GeoCoordinateNode		" GeoCoordinate|" >
<!ENTITY % GeoElevationGridNode		" GeoElevationGrid|" >
<!ENTITY % GeoGroupingNodes		" 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	  " NurbsOrientationInterpolator|NurbsPositionInterpolator|NurbsSurfaceInterpolator|NurbsSet|" >
<!ENTITY % NurbsGeometryNodes	  " Contour2D|NurbsCurve|NurbsCurve2D|NurbsPatchSurface|NurbsSweptSurface|NurbsSwungSurface|NurbsTrimmedSurface|" >
<!ENTITY % NurbsInterpolators	  " NurbsPositionInterpolator|NurbsOrientationInterpolator|NurbsSurfaceInterpolator|" >
<!ENTITY % NurbsControlCurveNodes " NurbsCurve2D|ContourPolyline2D " >
]]>
<![%CadComponent;[
<!ENTITY % CadGeometryNodes	  " QuadSet|IndexedQuadSet|" >
<!ENTITY % CadGroupingNodes	  " CADAssembly|CADLayer|" >
]]>
<![%CubeMapTexturingComponent;[
<!ENTITY % CubeMapTextureNodes	  " ComposedCubeMapTexture|GeneratedCubeMapTexture|ImageCubeMapTexture " >
]]>
<![%ShadersComponent;[
<!ENTITY % ShaderNodes	  " ComposedShader|PackagedShader|ProgramShader " >
<!ENTITY % ShaderAttributeNodes	  " FloatVertexAttribute|Matrix3VertexAttribute|Matrix4VertexAttribute" >
]]>
<![%Texture3DComponent;[
<!ENTITY % Texture3DTextureNodes		" Composed3DTexture|Image3DTexture|Pixel3DTexture " >
<!ENTITY % Texture3DTextureCoordinateNodes	  " TextureCoordinate3D|TextureCoordinate4D| " >
<!ENTITY % Texture3DTextureTransformNodes	  " TextureMatrixTransform|TextureTransform3D " >
]]>
<![%Web3dExtensionComponent;[
<!ENTITY % Web3dExtensionGeometryNodes	" XvlShell|" >
]]>
<!-- otherwise set tag lists to null strings if not previously defined -->
<!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 % CadGroupingNodes   "">
<!ENTITY % CadGeometryNodes   "">
<!ENTITY % CubeMapTextureNodes   "">
<!ENTITY % ShaderNodes   "">
<!ENTITY % ShaderAttributeNodes   "">
<!ENTITY % Texture3DTextureNodes		"" >
<!ENTITY % Texture3DTextureCoordinateNodes	  "" >
<!ENTITY % Texture3DTextureTransformNodes	  "" >
<!ENTITY % Web3dExtensionGroupingNodes "">
<!ENTITY % Web3dExtensionGeometryNodes "">
<!-- 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 "" >
]]>
<!-- NetworkSensorNodes used by LoadSensor -->
<!ENTITY % NetworkSensorNodes " %NetworkSensorNodeExtensions; Anchor|AudioClip|GeoMetadata|ImageCubeMapTexture|ImageTexture|Image3DTexture|Inline|MovieTexture|PackagedShader|ProtoInstance|Script|ShaderPart|ShaderProgram ">

<![%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; %Texture3DTextureCoordinateNodes; TextureCoordinate|TextureCoordinateGenerator|MultiTextureCoordinate|NurbsTextureCoordinate " >

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

<!ENTITY % AllTextureTransformNodes	" %TextureTransformNodes;|%Texture3DTextureTransformNodes; " >
]]>

<![%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|CoordinateDouble|FogCoordinate " >

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

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

<!ENTITY % LightNodes       	" DirectionalLight " >

<!ENTITY % MaterialNodes    	" Material " >

<!ENTITY % ShapeNodes       	" Shape " >

<!ENTITY % Texture2DNodes     	" ImageTexture " >

<!ENTITY % WorldInfoNodes   	" WorldInfo " >
]]>
<![%ImmersiveProfile;[

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

<!ENTITY % BehaviorLeafNodes	" %InterpolatorNodeExtensions; %SensorNodeExtensions; %ScriptNodeExtensions; %GeoBehaviorNodes; %DisplacerNode; %NurbsInterpolators; %EventUtilityNodes;|ColorInterpolator|CoordinateInterpolator|CoordinateInterpolator2D|CylinderSensor|KeySensor|LoadSensor|LocalFog|NormalInterpolator|OrientationInterpolator|PlaneSensor|PositionInterpolator|PositionInterpolator2D|ProximitySensor|ScalarInterpolator|Script|SphereSensor|StringSensor|TimeSensor|TouchSensor|VisibilitySensor " >
]]>
<![%ImmersiveProfile;[
<!ENTITY % BindableNodes    	" %BindableNodeExtensions; %GeoViewpointNode; Background|Fog|NavigationInfo|TextureBackground|Viewpoint " >

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

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

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

<!ENTITY % GeometryNodes    	" %GeometryNodeExtensions; %GeoElevationGridNode; %NurbsGeometryNodes; %CadGeometryNodes; %Web3dExtensionGeometryNodes; %Geometry2DNodes;|Box|Cone|Cylinder|ElevationGrid|Extrusion|IndexedFaceSet|IndexedLineSet|LineSet|PointSet|Sphere|Text|IndexedQuadSet|IndexedTriangleFanSet|IndexedTriangleSet|IndexedTriangleStripSet|QuadSet|TriangleFanSet|TriangleSet|TriangleStripSet " >

<!ENTITY % GroupingNodes    	" %GroupingNodeExtensions; %DISGroupingNodes; %GeoGroupingNodes; %HAnimGroupingNodes; %NurbsGroupingNodes; %CadGroupingNodes; %Web3dExtensionGroupingNodes; Anchor|Billboard|Collision|Group|Inline|LOD|StaticGroup|Switch|Transform " >
]]>
<![%ImmersiveProfile;[
<!ENTITY % LightNodes       	" %LightNodeExtensions; DirectionalLight|SpotLight|PointLight " >

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

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

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

<!ENTITY % AllTextureNodes     	" %Texture2DNodes;|%CubeMapTextureNodes;|%Texture3DTextureNodes; " >

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

<!ENTITY % WorldInfoNodes   	  " %WorldInfoNodeExtensions; %GeoMetadataNode; WorldInfo " >
]]>
<![%InterchangeProfile;[
<!ENTITY % ComposedGeometryNodes " %ColorNodes; " >

<!ENTITY % AppearanceChildNodes	" %MaterialNodes; " >

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

<!ENTITY % MetadataNodes 	" %MetadataNodeExtensions; MetadataDouble|MetadataFloat|MetadataInteger|MetadataSet|MetadataString ">

<!ENTITY % ProtoNodes       	"" >
]]>
<![%ImmersiveProfile;[
<!ENTITY % ComposedGeometryNodes " %ShaderAttributeNodes;|%CoordinateNodes;|%ColorNodes;|%NormalNodes;|%TextureCoordinateNodes;|FogCoordinate " >

<!ENTITY % AppearanceChildNodes	" LineProperties|FillProperties|%MaterialNodes;|%Texture2DNodes;|%CubeMapTextureNodes;|%ShaderNodes;|%Texture3DTextureNodes;|%TextureTransformNodes;|%Texture3DTextureTransformNodes; " >

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

<!ENTITY % OtherLeafNodes   	" AudioClip|LineProperties|FillProperties " >

<!ENTITY % MetadataNodes 	" %MetadataNodeExtensions; MetadataDouble|MetadataFloat|MetadataInteger|MetadataSet|MetadataString|ProtoInstance ">

<!ENTITY % ProtoNodes       	" %OtherLeafNodes;|%AppearanceNodes;|%AppearanceChildNodes;|%BehaviorLeafNodes;|%BindableNodes;|%CubeMapTextureNodes;|%FontStyleNodes;|%ComposedGeometryNodes;|%GeometryNodes;|%GroupingNodes;|ShaderPart|ShaderProgram|%MetadataNodes;|%SceneLeafNodes;|%Texture3DTextureNodes;|%Texture3DTextureTransformNodes;|ProtoDeclare|ProtoInstance " >
]]>

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

<![%InterchangeProfile;[
<!ENTITY % SceneNodes       	" %ChildrenNodes;|%WildcardNodes; " >
]]>
<![%ImmersiveProfile;[
<!ENTITY % SceneNodes       	" ExternProtoDeclare|ProtoDeclare|%ChildrenNodes;|%WildcardNodes; " >
]]>
<!-- SensorNodes not used (yet, anyway) in tagset content-model 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 ">

<!-- ***** X3D DTD ***** -->
<![%ImmersiveProfile;[
<!ELEMENT Anchor (IS?, (%MetadataNodes;)?, ( %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 (%MetadataNodes;)?, ( %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 >
]]>
<![%InterchangeProfile;[
<!ELEMENT Appearance ( (%MetadataNodes;)?, 
(  ((%MaterialNodes;), (%Texture2DNodes;)?  )
|((%Texture2DNodes;),  (%MaterialNodes;)? )
)? ) > 
]]>
<!ELEMENT Appearance (IS?, (%MetadataNodes;)?, (%AppearanceChildNodes;|%WildcardNodes;)* ) >
<!ATTLIST Appearance
	containerField NMTOKEN "appearance"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT AudioClip ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST AudioClip
	description %SFString; #IMPLIED
	loop        %SFBool;   "false"
	pitch       %SFFloat;  "1.0"
	startTime   %SFTime;   "0"
	stopTime    %SFTime;   "0"
	pauseTime   %SFTime;   "0"
	resumeTime  %SFTime;   "0"
	url         %MFString; #IMPLIED
	containerField NMTOKEN "source"
	class       CDATA      #IMPLIED
	DEF         ID         #IMPLIED
	USE         IDREF      #IMPLIED>
]]>
<!ELEMENT Background ((IS?), (%MetadataNodes;)?)>
<!ATTLIST Background
	groundAngle %MFFloat; #IMPLIED
	groundColor %MFColor; #IMPLIED
	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?, (%MetadataNodes;)?, ( %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?), (%MetadataNodes;)? ) >
<!ATTLIST BooleanFilter
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

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

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

<!ELEMENT BooleanTrigger ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST BooleanTrigger
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>
]]>
<![%ImmersiveProfile;[
<!-- Geometry2D nodes -->

<!ELEMENT Arc2D ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!ATTLIST ArcClose2D
	radius      %SFFloat; "1"
	startAngle  %SFFloat; "0"
	endAngle    %SFFloat; "1.570796"
	closureType (PIE|CHORD) "PIE"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class       CDATA    #IMPLIED
	DEF  ID     #IMPLIED 
	USE  IDREF  #IMPLIED>

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

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

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

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

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

<!ELEMENT TriangleSet2D ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TriangleSet2D
	vertices     %MFVec2f; #IMPLIED
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class        CDATA     #IMPLIED
	DEF  ID      #IMPLIED 
	USE  IDREF   #IMPLIED>
]]>
<![%ImmersiveProfile;[
<!ELEMENT Box ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST Box
	size  %SFVec3f; "2 2 2"
	solid %SFBool;  "true"
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF  ID        #IMPLIED 
	USE  IDREF     #IMPLIED>

<!ELEMENT Collision ( (IS?), (%MetadataNodes;)?, ( %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?), (%MetadataNodes;)?)>
<!ATTLIST Color
	color %MFColor; #IMPLIED
	class CDATA #IMPLIED
	containerField NMTOKEN "color"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT ColorRGBA ((IS?), (%MetadataNodes;)?)>
<!ATTLIST ColorRGBA
	color %MFColorRGBA; #IMPLIED
	containerField NMTOKEN "color"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT component EMPTY>
<!ATTLIST component
	name  %componentNames; #REQUIRED
	level %componentLevels; #REQUIRED>
<![%ImmersiveProfile;[
<!ELEMENT ColorInterpolator ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST ColorInterpolator
	key         %MFFloat; #IMPLIED
	keyValue    %MFColor; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>

<!ELEMENT Cone ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST Cone
	bottomRadius %SFFloat; "1"
	height       %SFFloat; "2"
	side         %SFBool;  "true"
	bottom       %SFBool;  "true"
	solid           %SFBool;  "true"
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF          ID        #IMPLIED
	USE          IDREF     #IMPLIED>
]]>
<!ELEMENT Coordinate ((IS?), (%MetadataNodes;)?)>
<!ATTLIST Coordinate
	point %MFVec3f; #IMPLIED
	containerField NMTOKEN "coord"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT CoordinateDouble ((IS?), (%MetadataNodes;)?)>
<!ATTLIST CoordinateDouble
	point %MFVec3d; #IMPLIED
	containerField NMTOKEN "coord"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT CoordinateInterpolator ((IS?), (%MetadataNodes;)?)>
<!ATTLIST CoordinateInterpolator
	key %MFFloat; #IMPLIED
	keyValue %MFVec3f; #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT CoordinateInterpolator2D ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST CoordinateInterpolator2D
	key      %MFFloat; #IMPLIED
	keyValue %MFVec2f; #IMPLIED
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

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

<!ELEMENT CylinderSensor ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST CylinderSensor
	description %SFString; #IMPLIED
	autoOffset %SFBool;     "true"
	diskAngle  %SFFloat;    "0.26179167"
	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?), (%MetadataNodes;)? ) >
<!ATTLIST DirectionalLight
	ambientIntensity %SFFloat; "0"
	color            %SFColor; "1 1 1"
	direction        %SFVec3f; "0 0 -1"
	intensity        %SFFloat; "1"
	on               %SFBool;  "true"
	global         %SFBool;  "false"
	containerField NMTOKEN "children"
	class	   CDATA     #IMPLIED
	DEF              ID        #IMPLIED
	USE              IDREF     #IMPLIED>
]]>
<![%InterchangeProfile;[
<!ELEMENT DirectionalLight (%MetadataNodes;)? >
<!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?, (%MetadataNodes;)?, (
   ((%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;)?) )? )
)?, (FogCoordinate)? ) >

<!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?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!ATTLIST FillProperties
	filled   %SFBool;   "true"
	hatched  %SFBool;   "true"
	hatchStyle  %SFInt32;      "1"
	hatchColor  %SFColor;      "1 1 1"
	containerField NMTOKEN "fillProperties"
	class	  CDATA    #IMPLIED
	DEF             ID                   #IMPLIED
	USE             IDREF                #IMPLIED>

<!ELEMENT Fog ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!ATTLIST FontStyle
	family      %MFString; '&quot;SERIF&quot;'
	horizontal  %SFBool;   "true"
	justify     %MFString; '&quot;BEGIN&quot;'
	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:
	family  ' "SERIF" "SANS" "TYPEWRITER" '
	justify ' "FIRST" "BEGIN" "MIDDLE" "END" ' -->
]]>
<!ELEMENT Group (IS?, (%MetadataNodes;)?, (%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 ImageTexture ((IS?), (%MetadataNodes;)?)>
<!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?, (%MetadataNodes;)?, (
 ((%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;)?) )? ) )? )
)?, (FogCoordinate)? )">
<![%ImmersiveProfile;[
<!ELEMENT IndexedFaceSet (IS?, (%MetadataNodes;)?, (%ComposedGeometryNodes;|%WildcardNodes;)*) >

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

<!ELEMENT LineSet (IS?, (%MetadataNodes;)?, (
	( (%ColorNodes;), ((%CoordinateNodes;)|%WildcardNodes;)? ) |
	( (%CoordinateNodes;), ((%ColorNodes;)|%WildcardNodes;)? ) |
	( %WildcardNodes;, ((%ColorNodes;)|(%CoordinateNodes;)|%WildcardNodes;)?)
)? ) >
]]>
<![%InterchangeProfile;[
<!ELEMENT IndexedFaceSet ( (%MetadataNodes;)?, ((%ColorNodes;), Coordinate?)|(Coordinate, (%ColorNodes;)?) )? >

<!ELEMENT IndexedLineSet ( (%MetadataNodes;)?, ( Color, Coordinate? )|( Coordinate, Color?) )? >

<!ELEMENT LineSet ( (%MetadataNodes;)?, ( Color, Coordinate? )|( Coordinate, Color?) )? >
]]>
<!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>
<!ATTLIST IndexedLineSet
	colorIndex %MFInt32; #IMPLIED
	colorPerVertex %SFBool; "true"
	coordIndex %MFInt32; #IMPLIED
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ATTLIST LineSet
	vertexCount %MFInt32; #IMPLIED
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT Inline ((IS?), (%MetadataNodes;)?)>
<!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
	importedDEF NMTOKEN #REQUIRED
	AS ID #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT IntegerSequencer ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST IntegerSequencer
	key      %MFFloat; #IMPLIED
	keyValue %MFInt32; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT IntegerTrigger ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)?)>
<!ATTLIST KeySensor
	enabled %SFBool; "true"
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT LineProperties ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST LineProperties
	applied %SFBool; "true"
	linetype %SFInt32; "1"
	linewidthScaleFactor %SFFloat; "0"
	containerField NMTOKEN "lineProperties"
	class	  CDATA    #IMPLIED
	DEF             ID                   #IMPLIED
	USE             IDREF                #IMPLIED>
]]>
<!ELEMENT LoadSensor (IS?, (%MetadataNodes;)?, (%NetworkSensorNodes;|%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?, (%MetadataNodes;)?, ( %ChildrenNodes;|%WildcardNodes; )* ) >
<!ATTLIST LOD
	forceTransitions %SFBool; "false"
	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?), (%MetadataNodes;)? ) >
<!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 ( (%MetadataNodes;)? ) >
<!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 *** -->
<!-- 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">
<!ELEMENT head (component*, meta*)>
<!-- 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; >
<!-- formal X3D Metadata nodes -->
<!ELEMENT MetadataDouble (IS?, (%MetadataNodes;)?)>
<!ATTLIST MetadataDouble
	name %SFString; #IMPLIED
	value %MFDouble; #IMPLIED
	reference %SFString; #IMPLIED
	containerField NMTOKEN "metadata"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT MetadataFloat (IS?, (%MetadataNodes;)?)>
<!ATTLIST MetadataFloat
	name %SFString; #IMPLIED
	value %MFFloat; #IMPLIED
	reference %SFString; #IMPLIED
	containerField NMTOKEN "metadata"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT MetadataInteger (IS?, (%MetadataNodes;)?)>
<!ATTLIST MetadataInteger
	name %SFString; #IMPLIED
	value %MFInt32; #IMPLIED
	reference %SFString; #IMPLIED
	containerField NMTOKEN "metadata"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT MetadataString (IS?, (%MetadataNodes;)?)>
<!ATTLIST MetadataString
	name %SFString; #IMPLIED
	value %MFString; #IMPLIED
	reference %SFString; #IMPLIED
	containerField NMTOKEN "metadata"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!-- containerField discriminates whether child Metadata node(s) are 'metadata' or 'value' fields.
	NMTOKEN vice enumeration, since containerField might have another value as field in a ProtoInstance. -->
<!ELEMENT MetadataSet (IS?, (%MetadataNodes;)*)>
<!ATTLIST MetadataSet
	reference %SFString; #IMPLIED
	name %SFString; #IMPLIED
	containerField NMTOKEN "metadata"
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!-- FAQ:  MovieTexture
	containerField='source'  when used as a Sound source,
	containerField='texture' when used as a Appearance texture source-->
<!ELEMENT MovieTexture ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST MovieTexture
	loop      %SFBool;   "false"
	speed     %SFFloat;  "1.0"
	startTime %SFTime;   "0"
	stopTime  %SFTime;   "0"
	url       %MFString; #IMPLIED
	repeatS   %SFBool;   "true"
	repeatT   %SFBool;   "true"
	pauseTime %SFTime;   "0"
	resumeTime %SFTime;  "0"
	containerField NMTOKEN "texture"
	class       CDATA       #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>
	
<!ELEMENT MultiTexture ( (IS?), (%MetadataNodes;)?, (%MultiTextureChildTextures;|%WildcardNodes; )* ) >
<!ATTLIST MultiTexture
	mode           %MFString;	#IMPLIED
	source         %MFString;	#IMPLIED
	function       %MFString;	#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?), (%MetadataNodes;)?, (TextureCoordinate|TextureCoordinateGenerator|ProtoInstance)* ) >
<!ATTLIST MultiTextureCoordinate
	containerField NMTOKEN "texCoord"
	class       CDATA       #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>
]]>
<!ELEMENT NavigationInfo ((IS?), (%MetadataNodes;)?)>
<!ATTLIST NavigationInfo
	avatarSize %MFFloat; "0.25 1.6 0.75"
	headlight %SFBool; "true"
	speed %SFFloat; "1"
	type %MFString; "&quot;EXAMINE&quot; &quot;ANY&quot;"
	transitionType %MFString; "&quot;ANIMATE&quot;"
	transitionTime %MFFloat; "1.0"
	visibilityLimit %SFFloat; "0"
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT Normal ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST Normal
	vector    %MFVec3f; #IMPLIED
	containerField NMTOKEN "normal"
	class	  CDATA     #IMPLIED
	DEF       ID        #IMPLIED
	USE       IDREF     #IMPLIED>

<!ELEMENT NormalInterpolator ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST NormalInterpolator
	key      %MFFloat; #IMPLIED
	keyValue %MFVec3f; #IMPLIED
	containerField NMTOKEN "children"
	class       CDATA       #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>
]]>
<!ELEMENT OrientationInterpolator ((IS?), (%MetadataNodes;)?)>
<!ATTLIST OrientationInterpolator
	key %MFFloat; #IMPLIED
	keyValue %MFRotation; #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT PixelTexture ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!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"
	global         %SFBool;  "true"
	containerField NMTOKEN "children"
	class	   CDATA    	#IMPLIED
	DEF	  	 ID		#IMPLIED
	USE		 IDREF		#IMPLIED>

<!ELEMENT PointSet (IS?, (%MetadataNodes;)?, (
	( (%ColorNodes;), ((%CoordinateNodes;)|%WildcardNodes;)? ) |
	( (%CoordinateNodes;), ((%ColorNodes;)|%WildcardNodes;)? ) |
	( %WildcardNodes;, ((%ColorNodes;)|(%CoordinateNodes;)|%WildcardNodes;)?)
)? ) >
]]>
<![%InterchangeProfile;[
<!ELEMENT PointSet ( (%MetadataNodes;)?, ( ( Color, Coordinate? )|( Coordinate, Color? ) )? ) >
]]>
<!ATTLIST PointSet
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT PositionInterpolator ((IS?), (%MetadataNodes;)?)>
<!ATTLIST PositionInterpolator
	key %MFFloat; #IMPLIED
	keyValue %MFVec3f; #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT PositionInterpolator2D ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST PositionInterpolator2D
	key      %MFFloat; #IMPLIED
	keyValue %MFVec2f; #IMPLIED
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>
]]>
<![%ImmersiveProfile;[
<!ELEMENT ProtoInterface ( field* ) >

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

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

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

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

<!ELEMENT ProximitySensor ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)?)>
<!ATTLIST ScalarInterpolator
	key %MFFloat; #IMPLIED
	keyValue %MFFloat; #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT Scene ((%MetadataNodes;)?, (%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 )* -->

<!ELEMENT Script ( #PCDATA|%MetadataNodes;|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?, (%MetadataNodes;)?, (
     ( (%AppearanceNodes;), (( %GeometryNodes; )|%WildcardNodes;)? ) |
     ( ( %GeometryNodes; ), ((%AppearanceNodes;)|%WildcardNodes;)? ) |
     ( %WildcardNodes;, (( %GeometryNodes; )|(%AppearanceNodes;)|%WildcardNodes;)? )
)? ) >
]]>
<![%InterchangeProfile;[
<!ELEMENT Shape ( (%MetadataNodes;)?,
	( (%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?, (%MetadataNodes;)?, ( %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?), (%MetadataNodes;)? ) >
<!ATTLIST Sphere
	radius %SFFloat; "1"
	solid           %SFBool;  "true"
	containerField NMTOKEN "geometry"
	class       CDATA       #IMPLIED
	DEF    ID        #IMPLIED
	USE    IDREF     #IMPLIED>

<!ELEMENT SphereSensor ( (IS?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)? ) >
<!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"
	global         %SFBool;  "true"
	containerField NMTOKEN "children"
	class	   CDATA    #IMPLIED
	DEF              ID        #IMPLIED
	USE              IDREF     #IMPLIED>

<!ELEMENT StaticGroup (IS?, (%MetadataNodes;)?, ( %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?), (%MetadataNodes;)? ) >
<!ATTLIST StringSensor 
	enabled			%SFBool;	"true"
	deletionAllowed 	%SFBool;	"true"
	containerField NMTOKEN "children"
	class			CDATA    #IMPLIED
	DEF			ID		#IMPLIED
	USE			IDREF		#IMPLIED>
]]>
<!ELEMENT Switch (IS?, (%MetadataNodes;)?, (%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?, (%MetadataNodes;)?, ( (%FontStyleNodes;)?|%WildcardNodes; ) ) >
<!ATTLIST Text
	string    %MFString; #IMPLIED
	length    %MFFloat;  #IMPLIED
	maxExtent %SFFloat;  "0.0"
	solid %SFBool; "true"
	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?, (%MetadataNodes;)?, (%Texture2DNodes;)* )>
<!ATTLIST TextureBackground
	groundAngle  %MFFloat;  #IMPLIED
	groundColor  %MFColor;  #IMPLIED
	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?), (%MetadataNodes;)?)>
<!ATTLIST TextureCoordinate
	point %MFVec2f; #IMPLIED
	containerField NMTOKEN "texCoord"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<![%ImmersiveProfile;[
<!ELEMENT TextureCoordinateGenerator ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TextureCoordinateGenerator
	mode      %TextureCoordinateGeneratorModes;  "SPHERE"
	parameter %MFFloat;  #IMPLIED
	containerField NMTOKEN "texCoord"
	class       CDATA    #IMPLIED
	DEF       ID         #IMPLIED
	USE       IDREF      #IMPLIED>

<!ELEMENT TextureTransform ( (IS?), (%MetadataNodes;)? ) >
<!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|ProtoInstance)* ) >
<!ATTLIST MultiTextureTransform
	containerField NMTOKEN "textureTransform"
	class       CDATA     #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>

]]>
<!ELEMENT TimeSensor ((IS?), (%MetadataNodes;)?)>
<!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 TimeTrigger ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TimeTrigger
	containerField NMTOKEN "children"
	class    CDATA     #IMPLIED
	DEF      ID        #IMPLIED
	USE      IDREF     #IMPLIED>

<!ELEMENT TouchSensor ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TouchSensor
	description %SFString; #IMPLIED
	enabled      %SFBool;  "true"
	containerField NMTOKEN "children"
	class        CDATA     #IMPLIED
	DEF          ID        #IMPLIED
	USE          IDREF     #IMPLIED>
]]>
<!ELEMENT Transform (IS?, (%MetadataNodes;)?, (%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>
<!ELEMENT IndexedTriangleFanSet (IS?, (%MetadataNodes;)?, (%ComposedGeometryNodes;|%WildcardNodes;)*)>
<!ATTLIST IndexedTriangleFanSet
	index %MFInt32; #IMPLIED
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT IndexedTriangleSet (IS?, (%MetadataNodes;)?, (%ComposedGeometryNodes;|%WildcardNodes;)*)>
<!ATTLIST IndexedTriangleSet
	index %MFInt32; #IMPLIED
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT IndexedTriangleStripSet (IS?, (%MetadataNodes;)?, (%ComposedGeometryNodes;|%WildcardNodes;)*)>
<!ATTLIST IndexedTriangleStripSet
	index %MFInt32; #IMPLIED
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT TriangleFanSet (IS?, (%MetadataNodes;)?, (%ComposedGeometryNodes;|%WildcardNodes;)*)>
<!ATTLIST TriangleFanSet
	fanCount %MFInt32; #IMPLIED
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT TriangleSet (IS?, (%MetadataNodes;)?, (%ComposedGeometryNodes;|%WildcardNodes;)*)>
<!ATTLIST TriangleSet
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT TriangleStripSet (IS?, (%MetadataNodes;)?, (%ComposedGeometryNodes;|%WildcardNodes;)*)>
<!ATTLIST TriangleStripSet
	stripCount %MFInt32; #IMPLIED
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT Viewpoint ((IS?), (%MetadataNodes;)?)>
<!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?), (%MetadataNodes;)? ) >
<!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?), (%MetadataNodes;)?)>
<!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
	xmlns:xsd CDATA "http://www.w3.org/2001/XMLSchema-instance"
	xsd:noNamespaceSchemaLocation CDATA "http://www.web3d.org/specifications/x3d-3.1.xsd"
	profile %profileNames; #REQUIRED
	version (3.0|3.1) #REQUIRED>
<!-- EspduTransform includes DIS CollisionPdu DetonatePdu FirePdu -->
<![%DISComponent;[
<!ELEMENT EspduTransform (IS?, (%MetadataNodes;)?, ( %ChildrenNodes;|%WildcardNodes; )* ) >
<!ATTLIST EspduTransform
	enabled     %SFBool;  "true"
	marking 	 %SFString;	#IMPLIED
	siteID  	 %SFInt32;	"0"
	applicationID	 %SFInt32;	"1"
	entityID	 %SFInt32;	"0"
	forceID		 %SFInt32;	"0"
	entityKind	 %SFInt32;	"0"
	entityDomain	 %SFInt32;	"0"
	entityCountry	 %SFInt32;	"0"
	entityCategory	 %SFInt32;	"0"
	entitySubCategory %SFInt32;	"0"
	entitySpecific	 %SFInt32;	"0"
	entityExtra	 %SFInt32;	"0"
	readInterval	 %SFTime;	"0.1"
	writeInterval	 %SFTime;	"1.0"
	networkMode	 (standAlone|networkReader|networkWriter)	"standAlone"
	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;	"localhost"
	port    	 	%SFInt32;	"0"
	multicastRelayHost 	%SFString;	#IMPLIED
	multicastRelayPort 	%SFInt32;	"0"
	rtpHeaderExpected  	%SFBool;	"false"
	deadReckoning  		%SFInt32;	"0"
	linearVelocity		%SFVec3f;	"0 0 0"
	linearAcceleration	%SFVec3f;	"0 0 0"
	fired1   		%SFBool;	"false"
	fired2   		%SFBool;	"false"
	collisionType	%SFInt32;	"0"
	detonationLocation	%SFVec3f;	"0 0 0"
	detonationRelativeLocation	%SFVec3f;	"0 0 0"
	detonationResult	%SFInt32;	"0"
	eventApplicationID	%SFInt32;	"1"
	eventEntityID	%SFInt32;	"0"
	eventNumber	%SFInt32;	"0"
	eventSiteID	%SFInt32;	"0"
	munitionStartPoint 	%SFVec3f;	"0 0 0"
	munitionEndPoint   	%SFVec3f;	"0 0 0"
	warhead			%SFInt32;	"0"
	fuse			%SFInt32;	"0"
	munitionQuantity	%SFInt32;	"0"
	firingRate		%SFInt32;	"0"
	firingRange		%SFFloat;	"0"
	munitionSiteID  	%SFInt32;	"0"
	munitionApplicationID	%SFInt32;	"1"
	munitionEntityID	%SFInt32;	"0"
	fireMissionIndex	%SFInt32;	"0"
	articulationParameterCount 		  %SFInt32;	"0"
	articulationParameterDesignatorArray 	  %MFInt32;	#IMPLIED
	articulationParameterChangeIndicatorArray %MFInt32;	#IMPLIED
	articulationParameterIdPartAttachedToArray  %MFInt32;	#IMPLIED
	articulationParameterTypeArray 		  %MFInt32;	#IMPLIED
	articulationParameterArray 		  %MFFloat;	#IMPLIED
	containerField NMTOKEN "children"
	class			CDATA		""
	DEF			ID		#IMPLIED 
	USE			IDREF		#IMPLIED >

<!ELEMENT ReceiverPdu ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST ReceiverPdu 
	enabled     %SFBool;  "true"
	whichGeometry		%SFInt32;	"1"
	bboxCenter	 	%SFVec3f;	"0 0 0"
	bboxSize	 	%SFVec3f;	"-1 -1 -1"

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

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

	radioID			%SFInt32;	"0"
	receivedPower		%SFFloat;	"0.0"
	receiverState		%SFInt32;	"0"
	transmitterSiteID	%SFInt32;	"0"
	transmitterApplicationID %SFInt32;	"0"
	transmitterEntityID	%SFInt32;	"0"
	transmitterRadioID	%SFInt32;	"0"

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

<!ELEMENT SignalPdu ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST SignalPdu
	enabled     %SFBool;  "true"
	whichGeometry		%SFInt32;	"1"
	bboxCenter		 %SFVec3f;	"0 0 0"
	bboxSize	 	%SFVec3f;	"-1 -1 -1"

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

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

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

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

<!ELEMENT TransmitterPdu ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TransmitterPdu 
	enabled     %SFBool;  "true"
	whichGeometry		%SFInt32;	"1"
	bboxCenter	 	%SFVec3f;	"0 0 0"
	bboxSize	 	%SFVec3f;	"-1 -1 -1"

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

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

	radioID			%SFInt32;	"0"
	antennaLocation		%SFVec3f;	"0 0 0"
	antennaPatternLength	%SFInt32;	"0"
	antennaPatternType	%SFInt32;	"0"
	cryptoKeyID		%SFInt32;	"0"
	cryptoSystem		%SFInt32;	"0"
	frequency		%SFInt32;	"0"
	inputSource		%SFInt32;	"0"

	lengthOfModulationParameters	%SFInt32;	"0"
	modulationTypeDetail		%SFInt32;	"0"
	modulationTypeMajor		%SFInt32;	"0"
	modulationTypeSpreadSpectrum	%SFInt32;	"0"
	modulationTypeSystem		%SFInt32;	"0"
	power				%SFFloat;	"0.0"
	radioEntityTypeCategory		%SFInt32;	"0"
	radioEntityTypeCountry		%SFInt32;	"0"
	radioEntityTypeDomain		%SFInt32;	"0"
	radioEntityTypeKind		%SFInt32;	"0"
	radioEntityTypeNomenclature	%SFInt32;	"0"
	radioEntityTypeNomenclatureVersion %SFInt32;	"0"
	relativeAntennaLocation		%SFVec3f;	"0 0 0"
	transmitFrequencyBandwidth	%SFFloat;	"0.0"
	transmitState			%SFInt32;	"0"

	containerField NMTOKEN "children"
	class				CDATA		""
	DEF   				ID		#IMPLIED 
	USE             		IDREF		#IMPLIED >
]]>
<![%GeoSpatialComponent;[
<!ELEMENT GeoCoordinate ( IS?, (%MetadataNodes;)?, GeoOrigin? ) >  <!-- X3DCoordinateNodeType -->
<!ATTLIST GeoCoordinate
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	point		%MFVec3d;	#IMPLIED
	containerField NMTOKEN "coord"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!-- need to restrict GeoOrigin to first element, or relax schema restriction -->
<!ELEMENT GeoElevationGrid (IS?, (%MetadataNodes;)?, (
 ((%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	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	geoGridOrigin	%SFVec3d;	"0 0 0"
	xDimension	%SFInt32;	"0"
	xSpacing	%SFDouble;	"1.0"
	yScale		%SFFloat;	"1.0"
	zDimension	%SFInt32;	"0"
	zSpacing	%SFDouble;	"1.0"
	height		%MFDouble; 	"0 0"
	normalPerVertex	%SFBool;	"true"
	ccw		%SFBool;	"true"
	colorPerVertex	%SFBool;	"true"
	creaseAngle	%SFFloat;	"0"
	solid		%SFBool;	"true"
	containerField NMTOKEN "geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT GeoLocation (IS?, (%MetadataNodes;)?,
	( %ChildrenNodes;|%WildcardNodes; )*, (GeoOrigin, ( %ChildrenNodes;|%WildcardNodes; )* )? ) >
<!ATTLIST GeoLocation
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	geoCoords	%SFVec3d;	"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 GeoLOD (IS?, (%MetadataNodes;)?,
	( %ChildrenNodes;|%WildcardNodes; )*, (GeoOrigin, ( %ChildrenNodes;|%WildcardNodes; )* )? ) >
<!ATTLIST GeoLOD
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	rootUrl	 	%MFString;	#IMPLIED
	child1Url	%MFString;	#IMPLIED
	child2Url	%MFString;	#IMPLIED
	child3Url	%MFString;	#IMPLIED
	child4Url 	%MFString;	#IMPLIED
	range		%SFFloat;	"10"
	center		%SFVec3d;	"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 GeoMetadata ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST GeoMetadata
	url		%MFString;	#IMPLIED
	data		IDREFS		#IMPLIED
	summary		%MFString;	#IMPLIED
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#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
-->

<!ELEMENT GeoOrigin ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST GeoOrigin
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	geoCoords	%SFVec3d;	"0 0 0"
	rotateYUp	%SFBool;	"false"
	containerField NMTOKEN "geoOrigin"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT GeoPositionInterpolator ( IS?, (%MetadataNodes;)?, GeoOrigin? ) >
<!ATTLIST GeoPositionInterpolator
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	key		%MFFloat;	#IMPLIED
	keyValue	%MFVec3d;	#IMPLIED
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID	#IMPLIED
	USE		IDREF	#IMPLIED>

<!ELEMENT GeoTouchSensor ( IS?, (%MetadataNodes;)?, GeoOrigin? ) >
<!ATTLIST GeoTouchSensor
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	enabled		%SFBool;	"true"
	description	%SFString;	#IMPLIED
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID	#IMPLIED
	USE		IDREF	#IMPLIED>

<!ELEMENT GeoViewpoint ( IS?, (%MetadataNodes;)?, GeoOrigin? ) >
<!ATTLIST GeoViewpoint
	geoSystem	%MFString; '&quot;GD&quot; &quot;WE&quot;'
	description	%SFString;	#IMPLIED
	position	%SFVec3d;	"0 0 100000"
	orientation	%SFRotation;	"0 0 1 0"
	fieldOfView	%SFFloat;	"0.785398"
	jump		%SFBool;	"true"
	navType		%MFString;	'&quot;EXAMINE&quot; &quot;ANY&quot;'
	headlight	%SFBool;	"true"
	speedFactor	%SFFloat;	"1.0"
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>
]]>
<!-- Note that setting JointNames as enumerations does not permit validation of other names. -->
<![%HAnimComponent;[
<!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)" >

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

<!ELEMENT HAnimHumanoid (IS?, (%MetadataNodes;)?, 
	(HAnimJoint*,	HAnimSegment*, HAnimSite*, (%CoordinateNodes;)?, (%NormalNodes;)?, ( %ChildrenNodes;|%WildcardNodes; )* ) ) >
<!-- skeleton/joints,	segments,      sites,      skinCoord,            skinNormal,       skin/viewpoints -->
<!-- note that joints, segments and sites should be USE nodes.  skin Shapes will USE preceding skinCoord, skinNormal definitions. -->
<!ATTLIST HAnimHumanoid
	name			%SFString;	#IMPLIED
	version			%SFString;	#IMPLIED
	info			%MFString;	#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>
]]>
<!--	not treated as separate attributes, instead these are
	encoded as "attribute=value" SFString entries in the
	MFString info field.

	humanoidVersion		%SFString;	#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
-->
<![%HAnimComponent;[
<!ELEMENT HAnimJoint (IS?, (%MetadataNodes;)?, ( %ChildrenNodes;|HAnimDisplacer|%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 HAnimDisplacer nodes must appear consecutively inside HAnimSegment -->

<!ELEMENT HAnimSegment (IS?, (%MetadataNodes;)?, (
	((%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?, (%MetadataNodes;)?, ( %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;[
<!ELEMENT Contour2D (IS?, (%MetadataNodes;)?, ( %NurbsControlCurveNodes;|%WildcardNodes; )* ) >
<!ATTLIST Contour2D
	containerField NMTOKEN "trimmingContour"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

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

<!-- child CoordinateNode has containerField controlPoint -->
<!ELEMENT NurbsCurve ( (IS?), (%MetadataNodes;)?, ( %CoordinateNodes;|%WildcardNodes; )? ) >
<!ATTLIST NurbsCurve
	knot		%MFDouble;	#IMPLIED
	order		%SFInt32;	"3"
	weight		%MFDouble;	#IMPLIED
	tessellation	%SFInt32;	"0"
	closed		%SFBool;	"false"
	containerField NMTOKEN 		"geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsCurve2D ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST NurbsCurve2D
	controlPoint	%MFVec2d;	#IMPLIED
	knot		%MFDouble;	#IMPLIED
	order		%SFInt32;	"3"
	weight		%MFDouble;	#IMPLIED
	tessellation	%SFInt32;	"0"
	closed		%SFBool;	"false"
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsOrientationInterpolator ( (IS?), (%MetadataNodes;)?, (%CoordinateNodes;)? ) >
<!ATTLIST NurbsOrientationInterpolator
	knot			%MFDouble;	#IMPLIED
	order			%SFInt32;	"3"
	weight			%MFDouble;	#IMPLIED
	containerField NMTOKEN "children"
	class			CDATA		""
	DEF			ID	#IMPLIED
	USE			IDREF	#IMPLIED>

<!ELEMENT NurbsPositionInterpolator ( (IS?), (%MetadataNodes;)?, (%CoordinateNodes;)? ) >
<!ATTLIST NurbsPositionInterpolator
	knot			%MFDouble;	#IMPLIED
	order			%SFInt32;	"3"
	weight			%MFDouble;	#IMPLIED
	containerField NMTOKEN "children"
	class			CDATA		""
	DEF			ID	#IMPLIED
	USE			IDREF	#IMPLIED>

<!ELEMENT NurbsSurfaceInterpolator ( (IS?), (%MetadataNodes;)?, (%CoordinateNodes;)? ) >
<!ATTLIST NurbsSurfaceInterpolator
	weight		%MFDouble;	#IMPLIED
	uDimension	%SFInt32;	"0"
	vDimension	%SFInt32;	"0"
	uKnot		%MFDouble;	#IMPLIED
	vKnot		%MFDouble;	#IMPLIED
	uOrder		%SFInt32;	"3"
	vOrder		%SFInt32;	"3"
	containerField NMTOKEN "children"
	class		CDATA		""
	DEF		ID	#IMPLIED
	USE		IDREF	#IMPLIED>

<!ELEMENT NurbsSet (IS?, (%MetadataNodes;)?, (NurbsPatchSurface|NurbsSweptSurface|NurbsSwungSurface|NurbsTrimmedSurface|%WildcardNodes; )* ) >
<!ATTLIST NurbsSet
	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 NurbsPatchSurface (IS?, (%MetadataNodes;)?, ( %CoordinateNodes;|%WildcardNodes; )?, ( %TextureCoordinateNodes;|NurbsTextureCoordinate)? ) >
<!ATTLIST NurbsPatchSurface
	uClosed		%SFBool;	"false"
	vClosed		%SFBool;	"false"
	uDimension	%SFInt32;	"0"
	vDimension	%SFInt32;	"0"
	uKnot		%MFDouble;	#IMPLIED
	vKnot		%MFDouble;	#IMPLIED
	uOrder		%SFInt32;	"3"
	vOrder		%SFInt32;	"3"
	uTessellation	%SFInt32;	"0"
	vTessellation	%SFInt32;	"0"
	weight		%MFDouble;	#IMPLIED
	solid		%SFBool;  	"true"
	containerField NMTOKEN "geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsTrimmedSurface (IS?, (%MetadataNodes;)?, ( %CoordinateNodes;|%WildcardNodes; )?, ( %TextureCoordinateNodes;|NurbsTextureCoordinate)?, Contour2D* ) >
<!ATTLIST NurbsTrimmedSurface
	uClosed		%SFBool;	"false"
	vClosed		%SFBool;	"false"
	uDimension	%SFInt32;	"0"
	vDimension	%SFInt32;	"0"
	uKnot		%MFDouble;	#IMPLIED
	vKnot		%MFDouble;	#IMPLIED
	uOrder		%SFInt32;	"3"
	vOrder		%SFInt32;	"3"
	uTessellation	%SFInt32;	"0"
	vTessellation	%SFInt32;	"0"
	weight		%MFDouble;	#IMPLIED
	solid		%SFBool;  	"true"
	containerField NMTOKEN "geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsSweptSurface (IS?, (%MetadataNodes;)?, (NurbsCurve|%WildcardNodes; )?, ( %NurbsControlCurveNodes;|%WildcardNodes; )? ) >
<!ATTLIST NurbsSweptSurface
	ccw		%SFBool;  	"true"
	solid		%SFBool;  	"true"
	containerField NMTOKEN "geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsSwungSurface (IS?, (%MetadataNodes;)?, ( ( %NurbsControlCurveNodes;|%WildcardNodes; ), ( %NurbsControlCurveNodes;|%WildcardNodes; )? )? ) >
<!ATTLIST NurbsSwungSurface
	ccw		%SFBool;  	"true"
	solid		%SFBool;  	"true"
	containerField NMTOKEN "geometry"
	class		CDATA		""
	DEF		ID		#IMPLIED
	USE		IDREF		#IMPLIED>

<!ELEMENT NurbsTextureCoordinate ( (IS?), (%MetadataNodes;)?, (%CoordinateNodes;)? ) >
<!ATTLIST NurbsTextureCoordinate
	controlPoint	%MFVec2f;	#IMPLIED
	weight		%MFFloat;	#IMPLIED
	uDimension	%SFInt32;	"0"
	vDimension	%SFInt32;	"0"
	uKnot		%MFDouble;	#IMPLIED
	vKnot		%MFDouble;	#IMPLIED
	uOrder		%SFInt32;	"3"
	vOrder		%SFInt32;	"3"
	containerField NMTOKEN "texCoord"
	class		CDATA		""
	DEF		ID	#IMPLIED
	USE		IDREF	#IMPLIED>
]]>
<![%CadComponent;[
<!ELEMENT CADAssembly (IS?, (%MetadataNodes;)?, (%ChildrenNodes;|CADPart|%WildcardNodes;)*)>
<!ATTLIST CADAssembly
	bboxCenter %SFVec3f; "0 0 0"
	bboxSize %SFVec3f; "-1 -1 -1"
	name	 %SFString;  #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT CADFace (IS?, (%MetadataNodes;)?, (Shape|LOD|%WildcardNodes;)*)>
<!ATTLIST CADFace
	bboxCenter %SFVec3f; "0 0 0"
	bboxSize %SFVec3f; "-1 -1 -1"
	name	 %SFString;  #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT CADLayer (IS?, (%MetadataNodes;)?, (%ChildrenNodes;|%WildcardNodes;)*)>
<!ATTLIST CADLayer
	bboxCenter %SFVec3f; "0 0 0"
	bboxSize %SFVec3f; "-1 -1 -1"
	name	 %SFString;  #IMPLIED
	visible	 %MFBool;  #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT CADPart (IS?, (%MetadataNodes;)?, (CADFace|%WildcardNodes;)*)>
<!ATTLIST CADPart
	bboxCenter %SFVec3f; "0 0 0"
	bboxSize %SFVec3f; "-1 -1 -1"
	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"
	name	 %SFString;  #IMPLIED
	containerField NMTOKEN "children"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT QuadSet (IS?, (%MetadataNodes;)?, (%ComposedGeometryNodes;|%WildcardNodes;)*)>
<!ATTLIST QuadSet
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT IndexedQuadSet ( (IS?, (%MetadataNodes;)?, (%ComposedGeometryNodes;|%WildcardNodes;)*) ) >
<!ATTLIST IndexedQuadSet
	index %MFInt32; #IMPLIED
	ccw %SFBool; "true"
	colorPerVertex %SFBool; "true"
	normalPerVertex %SFBool; "true"
	solid %SFBool; "true"
	containerField NMTOKEN "geometry"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
]]>
<![%CubeMapTexturingComponent;[
<!-- containerField values:  front back left right top bottom.  could use rule for 0..6 children here -->
<!ELEMENT ComposedCubeMapTexture (IS?, (%MetadataNodes;)?, (%Texture2DNodes;)* )>
<!ATTLIST ComposedCubeMapTexture
	containerField NMTOKEN "texture"
	class        CDATA      #IMPLIED
	DEF          ID         #IMPLIED 
	USE          IDREF      #IMPLIED >
<!ELEMENT GeneratedCubeMapTexture (IS?, (%MetadataNodes;)? )>
<!ATTLIST GeneratedCubeMapTexture
	update (NONE|NEXT_FRAME_ONLY|ALWAYS)            "NONE"
	size	%SFInt32;	"128"
	containerField NMTOKEN "texture"
	class        CDATA      #IMPLIED
	DEF          ID         #IMPLIED 
	USE          IDREF      #IMPLIED >
<!ELEMENT ImageCubeMapTexture  (IS?, (%MetadataNodes;)? )>
<!ATTLIST ImageCubeMapTexture 
	url		%MFString;	#IMPLIED
	containerField NMTOKEN "texture"
	class        CDATA      #IMPLIED
	DEF          ID         #IMPLIED 
	USE          IDREF      #IMPLIED >
]]>
<!-- parent content model and default containerField names for most ShadersComponent nodes is not clear.. -->
<![%ShadersComponent;[
<!ELEMENT ComposedShader ( (IS?), (%MetadataNodes;)?, (ShaderPart|%WildcardNodes;)*, (field)* ) >
<!ATTLIST ComposedShader
	language	 %SFString;  #IMPLIED
	containerField CDATA "shaders"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT FloatVertexAttribute ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST FloatVertexAttribute
	value		%MFFloat; #IMPLIED
	name		%SFString; #IMPLIED
	numComponents (1|2|3|4)            "4"
	containerField CDATA "attrib"
	class	CDATA	#IMPLIED
	DEF	ID	#IMPLIED
	USE	IDREF	#IMPLIED>
<!ELEMENT Matrix3VertexAttribute ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST Matrix3VertexAttribute
	value		%MFMatrix3f; #IMPLIED
	name		%SFString; #IMPLIED
	containerField CDATA "attrib"
	class	CDATA	#IMPLIED
	DEF	ID	#IMPLIED
	USE	IDREF	#IMPLIED>
<!ELEMENT Matrix4VertexAttribute ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST Matrix4VertexAttribute
	value		%MFMatrix4f; #IMPLIED
	name		%SFString; #IMPLIED
	containerField CDATA "attrib"
	class	CDATA	#IMPLIED
	DEF	ID	#IMPLIED
	USE	IDREF	#IMPLIED>
<!ELEMENT PackagedShader ( (IS?), (%MetadataNodes;)?, (field)* ) >
<!ATTLIST PackagedShader
	language	 %SFString;  #IMPLIED
	containerField CDATA "shaders"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT ProgramShader ( (IS?), (%MetadataNodes;)?, (ShaderProgram|%WildcardNodes;)*, (field)* ) >
<!ATTLIST ProgramShader
	language	 %SFString;  #IMPLIED
	containerField CDATA "shaders"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT ShaderPart ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST ShaderPart
	url		%MFString;	#IMPLIED
	type	 ( VERTEX|FRAGMENT )  #IMPLIED
	containerField NMTOKEN "parts"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT ShaderProgram ( (IS?), (%MetadataNodes;)?, (field)* ) >
<!ATTLIST ShaderProgram
	url		%MFString;	#IMPLIED
	type	 ( VERTEX|FRAGMENT )  #IMPLIED
	containerField NMTOKEN "programs"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
]]>
<![%Texture3DComponent;[
<!ELEMENT Composed3DTexture ((IS?), (%MetadataNodes;)?, (%Texture2DNodes;)*)>
<!ATTLIST Composed3DTexture
	repeatS %SFBool; "false"
	repeatT %SFBool; "false"
	repeatR %SFBool; "false"
	containerField NMTOKEN "texture"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT Image3DTexture ((IS?), (%MetadataNodes;)?)>
<!ATTLIST Image3DTexture
	url %MFString; #IMPLIED
	repeatS %SFBool; "false"
	repeatT %SFBool; "false"
	repeatR %SFBool; "false"
	containerField NMTOKEN "texture"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT Pixel3DTexture ((IS?), (%MetadataNodes;)?)>
<!ATTLIST Pixel3DTexture
	image %MFInt32; "0 0 0 0"
	repeatS %SFBool; "false"
	repeatT %SFBool; "false"
	repeatR %SFBool; "false"
	containerField NMTOKEN "texture"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT TextureCoordinate3D ((IS?), (%MetadataNodes;)?)>
<!ATTLIST TextureCoordinate3D
	point %MFVec3f; #IMPLIED
	containerField NMTOKEN "texCoord"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT TextureCoordinate4D ((IS?), (%MetadataNodes;)?)>
<!ATTLIST TextureCoordinate4D
	point %MFVec4f; #IMPLIED
	containerField NMTOKEN "texCoord"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
<!ELEMENT TextureMatrixTransform ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TextureMatrixTransform
	matrix      %SFMatrix4f; "1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1"
	containerField NMTOKEN "textureTransform"
	class       CDATA     #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>
<!ELEMENT TextureTransform3D ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST TextureTransform3D
	center      %SFVec3f; "0 0 0"
	rotation    %SFRotation; "0 0 1 0"
	scale       %SFVec3f; "1 1 1"
	translation %SFVec3f; "0 0 0"
	containerField NMTOKEN "textureTransform"
	class       CDATA     #IMPLIED
	DEF         ID        #IMPLIED
	USE         IDREF     #IMPLIED>
]]>
<![%ImmersiveProfile;[
<!ELEMENT LocalFog ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST LocalFog
	enabled		%SFBool; "true"
	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 FogCoordinate ((IS?), (%MetadataNodes;)?)>
<!ATTLIST FogCoordinate
	depth %MFVec3f; #IMPLIED
	containerField NMTOKEN "fogCoord"
	class CDATA #IMPLIED
	DEF ID #IMPLIED
	USE IDREF #IMPLIED>
]]>
<!-- 	Finally, add inputOnly/outputOnly attributes and Web3dExtensionComponent from separate DTDs.
	Note that Web3dExtensionComponent content-model extensions needed to be added at beginning,
	prior to node-type definitions. -->
<![%X3dInputOutputFields;[

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

%FieldsDTD;

]]>
<![%Web3dExtensionComponent;[

<!ENTITY % Web3dExtensionsPublicDTD  SYSTEM "x3d-3.1-Web3dExtensionsPublic.dtd">
<!ENTITY % Web3dExtensionsPrivateDTD SYSTEM "x3d-3.1-Web3dExtensionsPrivate.dtd">

%Web3dExtensionsPublicDTD;
%Web3dExtensionsPrivateDTD;

]]>

A.5 x3d-3.1-InputOutputFields.dtd

x3d-3.1-InputOutputFields.dtd extends the X3D version 3.1 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.

<!--
#
# X3D InputOutputFields DTD:
#
#	http://www.web3d.org/specifications/x3d-3.1-InputOutputFields.dtd
#
#	current version:  3.1.0
#
#	revised:          29 December 2005
#
#	Author:           Don Brutzman
#
# Purpose: the primary 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
#	http://www.web3d.org/specifications/x3d-3.0-Web3dExtensions.dtd
#
# 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/specifications/x3d-dtd-changelog.txt
#
# Note on typing:
#	CDATA used for %SFBool; definitions to allow #FIXED "" initialization,
#	  since DTD rules otherwise require enumeration values to be 
#	  initialized to true|false.
#
-->

<!ATTLIST AudioClip
	elapsedTime   %SFTime;    #FIXED ""
	duration_changed %SFTime; #FIXED ""
	isPaused      CDATA       #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 IndexedTriangleFanSet
	set_index  %MFInt32; #FIXED "">

<!ATTLIST IndexedTriangleSet
	set_index  %MFInt32; #FIXED "">

<!ATTLIST IndexedTriangleStripSet
	set_index  %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		%SFString;	#FIXED ""
	keyRelease		%SFString;	#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 LOD 
	level_changed		%SFInt32;	#FIXED "">

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

<!ATTLIST NavigationInfo
	set_bind        CDATA      #FIXED ""
	bindTime        %SFTime;   #FIXED ""
	transitionComplete         CDATA      #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 Text
	lineBounds     %MFVec2f;   #FIXED ""
	textBounds     %SFVec2f;   #FIXED "">

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

<!ATTLIST TimeSensor
	elapsedTime   %SFTime;  #FIXED ""
	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 ""
	isRtpHeaderHeard     			CDATA		#FIXED ""
	isActive   				CDATA		#FIXED ""
	timestamp	 			%SFTime;	#FIXED ""
	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   				CDATA		#FIXED ""
	collideTime   				%SFTime;	#FIXED ""
	isDetonated   				CDATA		#FIXED ""
	detonateTime   				%SFTime;	#FIXED ""
	firedTime   				%SFTime;	#FIXED ""
>
<!ATTLIST ReceiverPdu 
	isStandAlone		 		CDATA		#FIXED ""
	isNetworkReader	 			CDATA		#FIXED ""
	isNetworkWriter	 			CDATA		#FIXED ""
	isRtpHeaderHeard     			CDATA		#FIXED ""
	isActive   				CDATA		#FIXED ""
	timestamp	 			%SFTime;	#FIXED ""
>

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

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

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

<!ATTLIST GeoTouchSensor
	isActive		CDATA		#FIXED ""
	isOver			CDATA		#FIXED ""
	touchTime		%SFTime;	#FIXED ""	
	hitGeoCoord_changed	%SFVec3d;	#FIXED ""
	hitNormal_changed	%SFVec3f;	#FIXED ""
	hitPoint_changed	%SFVec3f;	#FIXED ""
	hitTexCoord_changed 	%SFVec2f;	#FIXED "">
	
<!ATTLIST GeoViewpoint
	set_bind        CDATA        #FIXED ""
	set_orientation %SFRotation; #FIXED ""
	set_position    %SFVec3d;    #FIXED ""
	bindTime        %SFTime;     #FIXED ""
	isBound         CDATA        #FIXED "">

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

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

<!ATTLIST NurbsSurfaceInterpolator
	set_fraction		%SFVec2f;	#FIXED ""
	normal_changed		%SFVec3f;	#FIXED ""
	position_changed	%SFVec3f;	#FIXED "">

<!ATTLIST IndexedQuadSet
	set_index  %MFInt32; #FIXED "">

<!ATTLIST ComposedShader
	isSelected  CDATA #FIXED ""
	isValid  CDATA #FIXED ""
	activate CDATA #FIXED "">

<!ATTLIST PackagedShader
	isSelected  CDATA #FIXED ""
	isValid  CDATA #FIXED ""
	activate CDATA #FIXED "">

<!ATTLIST ProgramShader
	isSelected  CDATA #FIXED ""
	isValid  CDATA #FIXED ""
	activate CDATA #FIXED "">