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

Annex A

(normative)

Document Type Definition (DTD)

--- X3D separator bar ---

cube A.1 Table of contents and introduction

A.1.1 Table of contents

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

Table A.1 — Table of contents

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

A.1.2 Introduction

An XML Document Type Definition (DTD) defines syntax of an XML tagset [XML].

The X3D DTD has sufficient expressive power to:

The X3D DTD does not have sufficient expressive power to:

A.2 x3d-3.0.dtd

x3d-3.0.dtd is the X3D DTD:

<!--
# Extensible 3D (X3D) Document Type Definition (DTD) x3d-3.0.dtd
#
# X3D Specification DTD:
#
# http://www.web3D.org/specifications/x3d-3.0.dtd
#
# current version: 3.0.17
#
# revised: 16 September 2004
#
# 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 InterchangeProfile 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 "(Full|Immersive|Interactive|Interchange|Core|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)">
<!ENTITY % MultiTextureModes "CDATA"> <!-- MFString -->
<!ENTITY % MultiTextureSourceValues "CDATA"> <!-- MFString -->
<!ENTITY % MultiTextureFunctionValues "CDATA"> <!-- MFString -->

<!-- User needs to append | after listing each new node in any of these extensions.
For an example, see examples/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 % UrlNodeExtensions "">
<!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 " Contour2D | NurbsGroup | NurbsTextureSurface | " >
<!ENTITY % NurbsGeometryNodes " ContourPolyline2D | NurbsCurve | NurbsCurve2D | NurbsPatchSurface | NurbsTrimmedSurface | NurbsSweptSurface | NurbsSwungSurface | " >
<!ENTITY % NurbsInterpolators " NurbsPositionInterpolator | NurbsOrientationInterpolator | NurbsSurfaceInterpolator | " >
<!ENTITY % NurbsControlCurveNodes " NurbsCurve | ContourPolyline2D " >
]]>

<![%Web3dExtensionComponent;[

<!ENTITY % Web3dExtensionGeometryNodes " XvlShell | " >

]]>

<!-- otherwise set tag lists to null strings if not previously defined by DIS, GeoSpatial, HAnim, Nurbs, Web3dExtension -->
<!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 "" >
]]>

<!-- UrlNodes used by LoadSensor -->
<!ENTITY % UrlNodes " %UrlNodeExtensions; Anchor | AudioClip | ImageTexture | Inline | MovieTexture | Script ">

<!-- Declarations appearing only in ImmersiveProfile -->
<![%ImmersiveProfile;[

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

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

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

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

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

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

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

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

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

<!-- Declarations appearing differently in X3dExtensions, ImmersiveProfile and InterchangeProfile -->
<!-- X3D Extensions (superset overriding some ImmersiveProfile declarations) not yet defined. -->
<![%X3dExtensions;[

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

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

<![%InterchangeProfile;[

<!ENTITY % AppearanceNodes " Appearance " >

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

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

<!ENTITY % ColorNodes " Color | ColorRGBA " >

<!ENTITY % CoordinateNodes " Coordinate | CoordinateDouble " >

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

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

<!ENTITY % LightNodes " DirectionalLight " >

<!ENTITY % MaterialNodes " Material " >

<!ENTITY % ShapeNodes " Shape " >

<!ENTITY % TextureNodes " ImageTexture " >

<!ENTITY % WorldInfoNodes " WorldInfo " >
]]>

<![%ImmersiveProfile;[

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

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

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

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

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

<![%ImmersiveProfile;[

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

<!ENTITY % GeometryNodes " %GeometryNodeExtensions; %GeometryNodesX3dExtensions; %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 " >

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

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

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

<!ENTITY % TextureNodes " %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; | %TextureNodes; | %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 " >
]]>

<![%InterchangeProfile;[

<!ENTITY % SceneNodes " %ChildrenNodes; | %WildcardNodes; " >
]]>

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

<![%ImmersiveProfile;[

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

<!ENTITY % SceneNodes " ExternProtoDeclare | ProtoDeclare | %ChildrenNodes; | %WildcardNodes; " >
]]>

<!ENTITY % AllVRML97Nodes " Anchor|Appearance|AudioClip|Background|BooleanFilter|BooleanSequencer|BooleanToggle|BooleanTrigger|Billboard|Box|Collision|Color|ColorInterpolator|Cone|Coordinate|CoordinateDouble|CoordinateInterpolator|Cylinder|CylinderSensor|DirectionalLight|ElevationGrid|Extrusion|FillProperties|Fog|FontStyle|Group|head|ImageTexture|IndexedFaceSet|IndexedLineSet|Inline|IntegerSequencer|IntegerTrigger|KeySensor|LineProperties|LineSet|LOD|Material|MovieTexture|MultiTextureCoordinate|NavigationInfo|Normal|NormalInterpolator|OrientationInterpolator|PixelTexture|PlaneSensor|PointLight|PointSet|PositionInterpolator|ProximitySensor|ScalarInterpolator|Scene|Script|Shape|Sound|Sphere|SphereSensor|SpotLight|StringSensor|StaticGroup|Switch|Text|TextureBackground|TextureCoordinate|TextureCoordinateGenerator|TextureTransform|TimeSensor|TimeTrigger|TouchSensor|Transform|TriangleFanSet|TriangleSet|TriangleStripSet|Viewpoint|VisibilitySensor|PositionInterpolator2D|CoordinateInterpolator2D|WorldInfo ">
<!ENTITY % AllGeoSpatialTags " GeoCoordinate|GeoElevationGrid|GeoLocation|GeoLOD|GeoMetadata|GeoOrigin|GeoPositionInterpolator|GeoTouchSensor|GeoViewpoint ">
<!ENTITY % AllHAnimTags " HAnimDisplacer|HAnimHumanoid|HAnimJoint|HAnimSegment|HAnimSite ">
<!-- 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;), (((%TextureNodes;),((%TextureTransformNodes;)|%WildcardNodes;)?) |
((%TextureTransformNodes;),((%TextureNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%TextureNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) )? )
| ((%TextureNodes;), ( ((%MaterialNodes;),((%TextureTransformNodes;)|%WildcardNodes;)?) |
((%TextureTransformNodes;),((%MaterialNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%MaterialNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) )? )
| ((%TextureTransformNodes;), (((%MaterialNodes;),((%TextureNodes;)|%WildcardNodes;)?) |
((%TextureNodes;),((%MaterialNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%MaterialNodes;)|(%TextureNodes;)|%WildcardNodes;)?) )? )
| (%WildcardNodes;, ( ((%MaterialNodes;),((%TextureNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) |
((%TextureNodes;),((%MaterialNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) |
((%TextureTransformNodes;),((%MaterialNodes;)|(%TextureNodes;)|%WildcardNodes;)?) |
(%WildcardNodes;,((%MaterialNodes;)|(%TextureNodes;)|(%TextureTransformNodes;)|%WildcardNodes;)?) )? )
)? ) >
]]>
<![%InterchangeProfile;[

<!ELEMENT Appearance ( (%MetadataNodes;)?, 
( ((%MaterialNodes;), (%TextureNodes;)? )
| ((%TextureNodes;), (%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 %MFFloat; #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"
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"
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
points %MFVec2f; #IMPLIED
containerField NMTOKEN "geometry"
class CDATA #IMPLIED
DEF ID #IMPLIED 
USE IDREF #IMPLIED>

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

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

<!ELEMENT Box ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST Box
size %SFVec3f; "2 2 2"
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"
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"
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 mentioned in VRML 97 specification
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 %MFFloat; #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;)?, (%UrlNodes; | %WildcardNodes;)*)>
<!ATTLIST LoadSensor
enabled %SFBool; "true"
timeOut %SFTime; "0"
containerField NMTOKEN "children"
class CDATA #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED
>
<![%ImmersiveProfile;[

<!ELEMENT LOD (IS?, (%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
>
<!-- FAQ: MovieTexture
containerField='source' when used as a Sound source,
containerField='texture' when used as a Appearance texture source-->
<![%ImmersiveProfile;[

<!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;)+, (%TextureTransformNodes;)* )
| ((%TextureTransformNodes;)+, (%MultiTextureChildTextures;)* )
)? ) >

<!ATTLIST MultiTexture
mode %MultiTextureModes; #IMPLIED
source %MultiTextureFunctionValues; #IMPLIED
function %MultiTextureSourceValues; #IMPLIED
color %SFColor; "1 1 1"
alpha %SFFloat; "1.0"
containerField NMTOKEN "texture"
class CDATA #IMPLIED
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT MultiTextureCoordinate ((IS?), (%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;"
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 (%SceneNodes;)*>
<!-- Script is similar to PROTO regarding user definition of multiple fields -->
<![%ImmersiveProfile;[

<!-- script code should be included as CDATA sections. watch out on content-model order, originally ( #PCDATA | field )* -->
<!-- can this mixed model be further tighted to allow only one IS, following zero or more field tags, prior to PCDATA? 
<!ELEMENT Script ( #PCDATA | field | IS )* >
<!ELEMENT Script ( (%MetadataNodes;)?, field*, IS?, #PCDATA ) > 

<!ELEMENT Script ( #PCDATA | (%MetadataNodes;)? | field* | IS? ) >

<!ELEMENT Script ( #PCDATA | MetadataDouble | MetadataFloat | MetadataInteger | MetadataSet | MetadataString | field | IS )* >
-->

<!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"
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"
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;)?, (%TextureNodes;)* )>
<!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
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 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 %SFString; #FIXED "3.0"
>

<!-- EspduTransform includes DIS CollisionPdu DetonatePdu FirePdu -->

<![%DISComponent;[

<!ELEMENT EspduTransform (IS?, (%MetadataNodes;)?, ( %ChildrenNodes; | %WildcardNodes; )* ) >
<!ATTLIST EspduTransform
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"
munitionStartPoint %SFVec3f; "0 0 0"
munitionEndPoint %SFVec3f; "0 0 0"
warhead %SFInt32; "0"
fuse %SFInt32; "0"
munitionQuantity %SFInt32; "0"
firingRate %SFInt32; "0"
firingRange %SFInt32; "0"
munitionSiteID %SFInt32; "0"
munitionApplicationID %SFInt32; "1"
munitionEntityID %SFInt32; "0"
fireMissionIndex %SFInt32; "0"
articulationParameterCount %SFInt32; "0"
articulationParameterDesignatorArray %MFInt32; #IMPLIED
articulationParameterChangeIndicatorArray %MFInt32; #IMPLIED
articulationParameterIdPartAttachedArray %MFInt32; #IMPLIED
articulationParameterTypeArray %MFInt32; #IMPLIED
articulationParameterArray %MFFloat; #IMPLIED
containerField NMTOKEN "children"
class CDATA ""
DEF ID #IMPLIED 
USE IDREF #IMPLIED >

<!ELEMENT ReceiverPdu ( (IS?), (%MetadataNodes;)? ) >
<!ATTLIST ReceiverPdu 

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

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; '"GD" "WE"'
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; '"GD" "WE"'
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; '"GD" "WE"'
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; '"GD" "WE"'
rootUrl %MFString; #IMPLIED
child1Url %MFString; #IMPLIED
child2Url %MFString; #IMPLIED
child3Url %MFString; #IMPLIED
child4Url %MFString; #IMPLIED
range %SFDouble; "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; '"GD" "WE"'
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; '"GD" "WE"'
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; '"GD" "WE"'
enabled %SFBool; "true"
containerField NMTOKEN "children"
class CDATA ""
DEF ID #IMPLIED
USE IDREF #IMPLIED>

<!ELEMENT GeoViewpoint ( IS?, (%MetadataNodes;)?, GeoOrigin? ) >
<!ATTLIST GeoViewpoint
geoSystem %MFString; '"GD" "WE"'
description %SFString; #IMPLIED
position %SFVec3d; "0 0 100000"
orientation %SFRotation; "0 0 1 0"
fieldOfView %SFFloat; "0.785398"
jump %SFBool; "true"
navType %MFString; '"EXAMINE" "ANY"'
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; #IMPLIED
containerField NMTOKEN #IMPLIED
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 %MFVec2f; #IMPLIED
knot %MFFloat; #IMPLIED
order %SFInt32; "3"
weight %MFFloat; #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 %MFFloat; #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
weight %MFDouble; #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 x3d-3.0-InputOutputFields.dtd

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

<!--
#
# X3D InputOutputFields DTD:
#
# http://www.web3d.org/specifications/x3d-3.0-InputOutputFields.dtd
#
# current version: 3.0.7
#
# revised: 16 July 2004
#
# 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 %SFInt32; #FIXED ""
keyRelease %SFInt32; #FIXED ""
actionKeyPress %SFInt32; #FIXED ""
actionKeyRelease %SFInt32; #FIXED ""
altKey CDATA #FIXED ""
controlKey CDATA #FIXED ""
shiftKey CDATA #FIXED "">

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

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

geoCoords_changed %SFVec3d; #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 %MFFloat; #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.4 x3d-3.0-Web3dExtensionsPublic.dtd

The public X3D DTD extension will be used to contain approved extensions that have not yet been included in Part 1 of ISO/IEC 19775. The form of the public X3D DTD extension is depicted below:

<!--
#
# X3D Web3D Extensions Public DTD:
#
# http://www.web3d.org/specifications/x3d-3.0-Web3dExtensionsPublic.dtd
#
# current version: 3.0.2
#
# revised: 16 September 2004
#
# Purpose: support Web3D Consortium extensions to the X3D tagset.
# The primary Extensible 3D (X3D) Document Type Definition (DTD)
# is augmented by node definitions in x3d-3.0-Web3dExtensionsPublic.dtd
# and x3d-3.0-Web3dExtensionsPrivate.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-Web3dExtensionsPublic.dtd
# http://www.web3d.org/specifications/x3d-3.0-Web3dExtensionsPrivate.dtd
#
# Web3D extensions update URL:
# http://www.web3d.org/x3d/content/x3d-3.0-Web3dExtensionsPublic.dtd
#
# changelog:
# http://www.web3d.org/specifications/x3d-dtd-changelog.txt
#
-->

<!-- ================================================================= -->

<!-- Enter ELEMENT and ATTLIST definitions here -->

<!-- ================================================================= -->

A.5 x3d-3.0-Web3dExtensionsPrivate.dtd

The private X3D DTD extension will be used to contain X3D extensions that have not been approved but may exist for testing future development. The form of the private X3D DTD extension is depicted below:

<!--
#
# X3D Web3D Extensions Private DTD:
#
# http://www.web3d.org/specifications/x3d-3.0-Web3dExtensionsPrivate.dtd
#
# current version: 3.0.2
#
# revised: 16 September 2004
#
# Purpose: support Web3D Consortium extensions to the X3D tagset.
# The primary Extensible 3D (X3D) Document Type Definition (DTD)
# is augmented by node definitions in x3d-3.0-Web3dExtensionsPublic.dtd
# and x3d-3.0-Web3dExtensionsPrivate.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-Web3dExtensionsPublic.dtd
# http://www.web3d.org/specifications/x3d-3.0-Web3dExtensionsPrivate.dtd
#
# Web3D extensions update URL:
# http://www.web3d.org/x3d/content/x3d-3.0-Web3dExtensionsPublic.dtd
#
# changelog:
# http://www.web3d.org/specifications/x3d-dtd-changelog.txt
#
-->

<!-- ================================================================= -->

<!-- Enter ELEMENT and ATTLIST definitions here -->

<!-- ================================================================= -->

--- X3D separator bar ---