The basic functionality of X3D is currently defined in the document FCD ISO/IEC 19775:200x. This rather cryptic designation translates to the document numbered 19775:200x in Final Committee Draft of the International Standards Organization/International Electrotechnical Commission. The document recently completed its final committee review. At the editors meeting it was decided to recommend the document progress to the next stages known as "Draft International Standard (DIS)" and "Final Draft International Standard (FDIS)". All of this is expected to culminate in an ISO approval vote by the end of the year 2003.
I have described all of this to show that extensibility is built into X3D from the very core of the specification. To content developers the extensibility manifests at several levels starting with the Profile and Component statements. The Profile statement is required in every X3D document. This statement declares the maximum complexity of the world that is used by this file and all files it causes to be loaded. The Component statement allows specification of the individual pieces of functionality.
A component is a collection of similar nodes. For example, the Lighting component includes DirectionalLight, PointLight, and SpotLight. Components may contain multiple levels of definitions. Increasing levels define increasing capabilities within the component. There is no predefined upper bound to the number of levels. The Lighting component defines 3 levels.
A profile is a collection of components at a particular level. It is shorthand means to specify the particular capabilities needed by a world. You must specify the profile, and optionally a set of components and levels to declare the maximum complexity of the world.
The current specification defines the following profiles: Core, Interchange, MPEG-Interactive, Interactive, Immersive, and Full. The 'MPEG-Interactive' profile was defined for use by the MPEG-4 specification. More information on that specification is available here. TThe remaining profiles represent standard sets of capabilities. Core profile defines all of the data types, and basic structure of X3D. Interchange provides capabilities for object construction, texturing, and animation. The Interactive profile adds user interaction sensors (e.g., TouchSensor, ProximitySensor). Immersive most closely matches VRML97. The Full profile contains everything defined in the specification.
The purpose for creating a variety of profiles is to address the needs of various market segments. The Interchange profile is designed for exchange of basic models and animation. It defines a basic set of components that allow for easy importing and exporting of X3D. Lightweight and low powered devices are the target of the Interactive profile. This profile provides most of the standard user interaction and other features to build responsive worlds. The Immersive profile targets full-featured systems (laptop to CAVE). It is a richer environment than VRML97. The Core profile is provided as a base level profile for those authors who wish to "roll their own".
The profile you use is determined by the effects and features you wish to have in your world. When you author complete content the choice is easy. With the current set of profiles, a browser supports all profiles up to the most complex profile it supports.
Choosing a profile when authoring for a content library is trickier. You certainly can choose 'Full', but it is unlikely that many browsers will support the 'Full' profile. If you declare that the library content is 'Immersive', then anyone authoring for an 'Interactive' profile world could not use your content. Of course if you are truly using 'Immersive' level features (e.g., Fog), then that is not a problem. For static, textured models, you are restricting its usefulness. The simplest solution is to specify the lowest profile that supports the level of complexity you are using. You can also specify the 'Core' profile and explicitly include the components and levels that you use.
When using the Component statement, it is necessary for the author to ensure that all of that component's prerequisites are included; either implicitly in the Profile statement, or explicitly in the Component statement. For example, the IndexedFaceSet node is in the Geometry3D component at level 1. Level 1 of the Geometry3D component requires Core, Grouping, Rendering, and Shape; all at level 1. A textured model (using PixelTexture and no animation) can be used in either of the cases below (in Classic VRML notation):
The first example ('Profile Interchange') also gives you urls (Networking), Lighting, Animation (Interpolation and Time), and Navigation. It is far better to specify the profile and let the components be specified by the profile.