X3D Model Documentation: PajekVisualizationPrototypes.x3d

  1  <?xml version="1.0" encoding="UTF-8"?>
  2  <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.2//EN" "https://www.web3d.org/specifications/x3d-3.2.dtd">
  3  <X3D profile='Immersive' version='3.2'  xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.2.xsd'>
  4       <head>
  5            <meta name='title' content='PajekVisualizationPrototypes.x3d'/>
  6            <meta name='description' content='Reverse engineer and hopefully elaborate on Pajek visualization structures'/>
  7            <meta name='creator' content='Don Brutzman and Elaine Reid'/>
  8            <meta name='created' content='29 March 2011'/>
  9            <meta name='modified' content='4 October 2023'/>
 10            <meta name='reference' content='http://pajek.imfm.si'/>
 11            <meta name='subject' content='network visualization'/>
 12            <meta name=' warning ' content=' under development '/>
 13            <meta name='identifier' content='https://savage.nps.edu/Savage/Tools/Visualization/PajekVisualizationPrototypes.x3d'/>
 14            <meta name='generator' content='X3D-Edit 4.0, https://savage.nps.edu/X3D-Edit'/>
 15            <meta name='license' content='../../license.html'/>
 16       </head>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top Index for DEF nodes: ArcPrototypeRootNode, ArcScript, ConeMaterial, ConeTransform, CylinderMaterial, CylinderTransform, infogroup, NetText, NetworkTextHolder, VertexPrototypeRootNode

Index for Viewpoint node: Viewpoint_1

Index for ProtoDeclare definitions: Arc, NetworkText, Vertex
-->
 17       <Scene>
 18            <WorldInfo title='PajekVisualizationPrototypes.x3d'/>
 19            <ProtoDeclare name='Arc' appinfo='Arc is a network connection between Vertex nodes, displayed using Cylinder/Cone (arrow/arrowhead) geometry with modifiable color and transparency'>
 20                 <ProtoInterface>
 21                      <field name='name' type='SFString' value='TODOprovideInitialValue' accessType='inputOutput'
                     appinfo='name to identify this Arc'/>
 22                      <field name='description' type='SFString' value='TODO customize this Arc description' accessType='inputOutput'
                     appinfo='popup text describing this Arc'/>
 23                      <field name='cylinderHeight' type='SFFloat' value='1' accessType='initializeOnly'
                     appinfo='length of Arc between Vertex locations'/>
 24                      <field name='url' type='MFString' accessType='inputOutput'
                     appinfo='link to some other resource'/>
 25                      <field name='cylinderTranslation' type='SFVec3f' value='0 0 0' accessType='inputOutput'
                     appinfo='location of Arc'/>
 26                      <field name='coneTranslation' type='SFVec3f' value='0 0 0' accessType='inputOutput'
                     appinfo='see TODO items in ArcScript'/>
 27                      <field name='rotation' type='SFRotation' value='0 1 0 0' accessType='inputOutput'
                     appinfo='orientation of Arc'/>
 28                      <field name='displayMode' type='SFString' value='BallAndStick' accessType='inputOutput'
                     appinfo='rendering choices: BallAndStick, Ball, Stick'/>
 29                      <field name='diffuseColor' type='SFColor' value='0 0 0' accessType='inputOutput'
                     appinfo='diffuseColor of Arc'/>
 30                      <field name='transparency' type='SFFloat' value='0.0' accessType='inputOutput'
                     appinfo='transparency of Arc'/>
 31                      <field name='ballRadius' type='SFFloat' value='1' accessType='inputOutput'
                     appinfo='offset distance for Cone arrowhead; TODO this needs to match values in the Vertex protopye, which is iniitialized separately'/>
 32                      <field name='traceEnabled' type='SFBool' value='false' accessType='inputOutput'
                     appinfo='debug trace to Browser output console'/>
 33                 </ProtoInterface>
 34                 <ProtoBody>
 35                      <!-- First node determines node type of this prototype -->
 36                      <Anchor DEF='ArcPrototypeRootNode'>
 37                           <IS>
 38                                <connect nodeField='description' protoField='description'/>
 39                                <connect nodeField='url' protoField='url'/>
 40                           </IS>
 41                           <Group>
 42                                <Transform DEF='CylinderTransform' rotation='-0.4367 0 0.8996 1.60563' translation='-1.166 0.60861 -2.23229'>
 43                                     <IS>
 44                                          <connect nodeField='translation' protoField='cylinderTranslation'/>
 45                                          <connect nodeField='rotation' protoField='rotation'/>
 46                                     </IS>
 47                                     <Shape>
 48                                          <Appearance>
 49                                               <Material DEF='CylinderMaterial' diffuseColor='0 0 0' shininess='0.8' specularColor='0.8 0.8 0.8'/>
 50                                          </Appearance>
 51                                          <!-- TODO these trial values are from Arc 1.6, radius is a candidate parameter -->
 52                                          <Cylinder radius='0.02'>
 53                                               <IS>
 54                                                    <connect nodeField='height' protoField='cylinderHeight'/>
 55                                               </IS>
 56                                          </Cylinder>
 57                                     </Shape>
 58                                </Transform>
 59                                <Transform DEF='ConeTransform' rotation='-0.4367 0 0.8996 1.6056' translation='-1.49373 0.59592 -2.39136'>
 60                                     <IS>
 61                                          <connect nodeField='translation' protoField='coneTranslation'/>
 62                                          <connect nodeField='rotation' protoField='rotation'/>
 63                                     </IS>
 64                                     <Shape>
 65                                          <Cone bottomRadius='0.06' height='0.1'/>
 66                                          <Appearance>
 67                                               <Material DEF='ConeMaterial' diffuseColor='0 0 0' shininess='.8' specularColor='.8 .8 .8'>
 68                                                    <IS>
 69                                                         <connect nodeField='transparency' protoField='transparency'/>
 70                                                    </IS>
 71                                               </Material>
 72                                          </Appearance>
 73                                     </Shape>
 74                                </Transform>
 75                           </Group>
 76                      </Anchor>
 77                      <Script DEF='ArcScript'>
 78                           <field name='name' type='SFString' accessType='inputOutput'
                          appinfo='name to identify this Arc'/>
 79                           <field name='description' type='SFString' accessType='inputOutput'
                          appinfo='popup text describing this Arc'/>
 80                           <field name='cylinderHeight' type='SFFloat' accessType='initializeOnly'
                          appinfo='length of Arc between Vertex locations'/>
 81                           <field name='website' type='MFString' accessType='inputOutput'
                          appinfo='link to some other resource'/>
 82                           <field name='cylinderTranslation' type='SFVec3f' accessType='inputOutput'
                          appinfo='location of Arc'/>
 83                           <field name='coneTranslation' type='SFVec3f' accessType='inputOutput'
                          appinfo='see TODO items in ArcScript'/>
 84                           <field name='rotation' type='SFRotation' accessType='inputOutput'
                          appinfo='orientation of Arc'/>
 85                           <field name='displayMode' type='SFString' accessType='inputOutput'
                          appinfo='rendering choices: BallAndStick, Ball, Stick'/>
 86                           <field name='diffuseColor' type='SFColor' accessType='inputOutput'
                          appinfo='diffuseColor of Arc'/>
 87                           <field name='transparency' type='SFFloat' accessType='inputOutput'
                          appinfo='transparency of Arc'/>
 88                           <field name='ballRadius' type='SFFloat' accessType='inputOutput'
                          appinfo='offset distance for Cone arrowhead; TODO this needs to match values in the Vertex protopye, which is iniitialized separately'/>
 89                           <field name='traceEnabled' type='SFBool' accessType='inputOutput'
                          appinfo='debug trace to Browser output console'/>
 90                           <IS>
 91                                <connect nodeField='name' protoField='name'/>
 92                                <connect nodeField='description' protoField='description'/>
 93                                <connect nodeField='cylinderHeight' protoField='cylinderHeight'/>
 94                                <connect nodeField='website' protoField='url'/>
 95                                <connect nodeField='cylinderTranslation' protoField='cylinderTranslation'/>
 96                                <connect nodeField='coneTranslation' protoField='coneTranslation'/>
 97                                <connect nodeField='rotation' protoField='rotation'/>
 98                                <connect nodeField='displayMode' protoField='displayMode'/>
 99                                <connect nodeField='diffuseColor' protoField='diffuseColor'/>
100                                <connect nodeField='transparency' protoField='transparency'/>
101                                <connect nodeField='ballRadius' protoField='ballRadius'/>
102                                <connect nodeField='traceEnabled' protoField='traceEnabled'/>
103                           </IS>
  <![CDATA[
          
ecmascript:
function initialize ()
{
    // TODO? potential visualization improvment (at possible cost of breaking simple 1:1 mapping)
    // compute Cone translation (and perhaps cone size) based on Cylinder size
    // then send result to the Cone parent transform

    // conceivably this extended Cylinder length is a feature, not a bug...
    // if the Cylinder goes to the center of the ball, then you can turn off both
    // balls and Cone arrowheads to yield a simple stick-only model
    // so we need to consider this as an animation/visualization feature as well

    tracePrint ('ArcScript ' + name + ': ' initialization() successful');
}
function set_name (eventValue)
{
    // input eventValue received for inputOutput field name
    name = eventValue;
    tracePrint ('name = ' + name);
}
function set_description (eventValue)
{
    // input eventValue received for inputOutput field description
    description = eventValue;
    tracePrint ('description = ' + description);
}
function set_cylinderTranslation (eventValue)
{
    // input eventValue received for inputOutput field cylinderTranslation
    cylinderTranslation = eventValue;
    tracePrint ('cylinderTranslation = ' + cylinderTranslation);

    // TODO author code (if any) goes here
}
function set_coneTranslation (eventValue)
{
    // input eventValue received for inputOutput field coneTranslation
    coneTranslation = eventValue;
    tracePrint ('coneTranslation = ' + coneTranslation);

    // TODO author code (if any) goes here
}
function set_rotation (eventValue)
{
    // input eventValue received for inputOutput field rotation
    rotation = eventValue;
    tracePrint ('rotation = ' + rotation);

    // TODO author code (if any) goes here
}
function set_displayMode (eventValue)
{
    // input eventValue received for inputOutput field displayMode
    displayMode = eventValue;
    tracePrint ('displayMode = ' + displayMode);

    // TODO author code (if any) goes here
}
function set_color (eventValue)
{
    // input eventValue received for inputOutput field color
    color = eventValue;
    tracePrint ('color = ' + color);

    // TODO author code (if any) goes here
}
function set_transparency (eventValue)
{
    // input eventValue received for inputOutput field transparency
    transparency = eventValue;
    tracePrint ('transparency = ' + transparency);

    // TODO author code (if any) goes here
}
function set_ballRadius (eventValue)
{
    // input eventValue received for inputOutput field ballRadius
    ballRadius = eventValue;
    tracePrint ('ballRadius = ' + ballRadius);

    // TODO author code (if any) goes here
}
// ================== Trace output functions ==================

function tracePrint (outputString)
{
   // if traceEnabled is true, print outputString on X3D browser console
   if (traceEnabled)
      Browser.println ('[Arc ' + name + ': ' + outputString + ']');
}
function alwaysPrint (outputString)
{
      // always print outputString on X3D browser console
      Browser.println ('[Arc ' + name + ': ' + outputString + ']');
}
function set_traceEnabled (eventValue)
{
    // input eventValue received for inputOutput field
    traceEnabled = eventValue;
}
// ===========================================================

function set_website (eventValue)
{
    // input eventValue received for inputOutput field website
    website = eventValue;
    tracePrint ('website = ' + website);

    // TODO author code (if any) goes here
}
//============================================================

        
]]>
105                      </Script>
106                      <!-- Add any ROUTEs here that connect Script to/from prior nodes within ProtoBody -->
107                 </ProtoBody>
108            </ProtoDeclare>
109            <ProtoDeclare name='Vertex' appinfo='Vertex is a node, typically connected by zero or more Arc segments, and displayed using Sphere geometry with modifiable color and transparency'>
110                 <ProtoInterface>
111                      <field name='name' type='SFString' value='TODOprovideVertexName' accessType='inputOutput'
                     appinfo='name to identify this Vertex'/>
112                      <field name='description' type='SFString' value='TODO customize this Vertex description' accessType='inputOutput'
                     appinfo='popup text describing this Vertex'/>
113                      <field name='url' type='MFString' accessType='inputOutput'
                     appinfo='link to some other resource'/>
114                      <field name='radius' type='SFFloat' value='1' accessType='initializeOnly'
                     appinfo='size of Vertex ball'/>
115                      <field name='displayMode' type='SFString' value='BallAndStick' accessType='inputOutput'
                     appinfo='rendering choices: BallAndStick, Ball, Stick'/>
116                      <field name='diffuseColor' type='SFColor' value='0.8 0.8 0.8' accessType='inputOutput'
                     appinfo='diffuseColor of Vertex'/>
117                      <field name='transparency' type='SFFloat' value='0.0' accessType='inputOutput'
                     appinfo='transparency of Vertex'/>
118                      <field name='translation' type='SFVec3f' value='0.0 0.0 0.0' accessType='inputOutput'
                     appinfo='location of Vertex'/>
119                      <field name='vertexText' type='MFString' accessType='inputOutput'
                     appinfo='labels to identify Vertex'/>
120                      <field name='textTranslation' type='SFVec3f' value='0.0 0.0 0.0' accessType='inputOutput'
                     appinfo='location of Text'/>
121                      <field name='textColor' type='SFColor' value='0 0 0' accessType='inputOutput'
                     appinfo='diffuseColor of Text'/>
122                 </ProtoInterface>
123                 <ProtoBody>
124                      <!-- First node determines node type of this prototype -->
125                      <Group DEF='VertexPrototypeRootNode'>
126                           <WorldInfo>
127                                <IS>
128                                     <connect nodeField='title' protoField='displayMode'/>
129                                </IS>
130                           </WorldInfo>
131                           <Anchor>
132                                <IS>
133                                     <connect nodeField='name' protoField='name'/>
134                                     <connect nodeField='description' protoField='description'/>
135                                     <connect nodeField='url' protoField='url'/>
136                                </IS>
137                                <Group>
138                                     <Transform>
139                                          <IS>
140                                               <connect nodeField='translation' protoField='translation'/>
141                                          </IS>
142                                          <Shape>
143                                               <Appearance>
144                                                    <Material>
145                                                         <IS>
146                                                              <connect nodeField='diffuseColor' protoField='diffuseColor'/>
147                                                              <connect nodeField='transparency' protoField='transparency'/>
148                                                         </IS>
149                                                    </Material>
150                                               </Appearance>
151                                               <Sphere>
152                                                    <IS>
153                                                         <connect nodeField='radius' protoField='radius'/>
154                                                    </IS>
155                                               </Sphere>
156                                          </Shape>
157                                     </Transform>
158                                     <!-- TODO for future work: Billboard for text visibility -->
159                                     <Transform>
160                                          <IS>
161                                               <connect nodeField='translation' protoField='textTranslation'/>
162                                          </IS>
163                                          <Shape>
164                                               <Appearance>
165                                                    <Material>
166                                                         <IS>
167                                                              <connect nodeField='diffuseColor' protoField='textColor'/>
168                                                         </IS>
169                                                    </Material>
170                                               </Appearance>
171                                               <Text>
172                                                    <IS>
173                                                         <connect nodeField='string' protoField='vertexText'/>
174                                                    </IS>
175                                                    <!-- TODO do we really want to honor Pajek's default Text family? -->
176                                                    <FontStyle family='"SANS"' size='0.20000'/>
177                                               </Text>
178                                          </Shape>
179                                     </Transform>
180                                </Group>
181                           </Anchor>
182                      </Group>
183                      <!-- Subsequent nodes do not render, but still must be a valid X3D subgraph -->
184                 </ProtoBody>
185            </ProtoDeclare>
186            <ProtoDeclare name='NetworkText' appinfo='Text describing what the Vertices and Arcs are about'>
187                 <ProtoInterface>
188                      <field name='text' type='MFString' accessType='inputOutput'
                     appinfo='information to identify the Integral Network'/>
189                 </ProtoInterface>
190                 <ProtoBody>
191                      <Transform>
192                           <Group>
193                                <Transform>
194                                     <Shape>
195                                          <Appearance>
196                                               <Material diffuseColor='0.9 0.9 0.9'/>
197                                          </Appearance>
198                                          <Text DEF='NetworkTextHolder'>
199                                               <IS>
200                                                    <connect nodeField='string' protoField='text'/>
201                                               </IS>
202                                               <FontStyle/>
203                                          </Text>
204                                     </Shape>
205                                </Transform>
206                           </Group>
207                      </Transform>
208                 </ProtoBody>
209            </ProtoDeclare>
210            <Background groundAngle='1.309 1.570796' groundColor='0 0.5 0.7 0 0.4 0.7 0.6 0.5 0.7' skyAngle='1.309 1.571' skyColor='0 0.5 0.8 0 0.6 0.7 0.6 0.6 0.7'/>
211            <PointLight ambientIntensity='1' location='0 0 5' radius='30'/>
212            <NavigationInfo transitionType='"ANIMATE"' type='"EXAMINE" "FLY" "ANY"'/>
213            <Viewpoint description='Inspect 15JAN2010Newman' orientation='1 0 0 -0.0997' position='0 2 20'/>
214            <!-- type="3D" <date day ="3" month="5" year="2011"/> -->
215            <Transform DEF='infogroup' translation='-8 2 -4'>
216                 <Transform DEF='NetText' translation='0 6 0'>
217                      <ProtoInstance name='NetworkText'>
218                           <fieldValue name='text' value='"15JAN2010"'/>
219                      </ProtoInstance>
220                 </Transform>
221            </Transform>
222            <Group>
223                 <Transform>
224                      <ProtoInstance name='Vertex'>
225                           <fieldValue name='name' value='Vertex 1'/>
226                           <fieldValue name='description' value='2010-01-15-ARMY.MIL'/>
227                           <fieldValue name='vertexText' value='"2010-01-15-ARMY.MIL"'/>
228                           <fieldValue name='textTranslation' value='0.06344 -0.26178 -0.55101'/>
229                           <fieldValue name='textColor' value='0 0 0'/>
230                           <fieldValue name='url' value='"http://www.army.mil"'/>
231                           <fieldValue name='translation' value='0.06344 -0.26178 -0.55101'/>
232                           <fieldValue name='radius' value='.1500'/>
233                           <fieldValue name='displayMode' value='BallAndStick'/>
234                           <fieldValue name='diffuseColor' value='0 0 0'/>
235                           <fieldValue name='transparency' value='0'/>
236                      </ProtoInstance>
237                      <ProtoInstance name='Arc'>
238                           <fieldValue name='name' value='1.24'/>
239                           <fieldValue name='description' value='From blah to blah'/>
240                           <fieldValue name='url' value='"http://www.google.com"'/>
241                           <fieldValue name='cylinderHeight' value='0.64770'/>
242                           <fieldValue name='cylinderTranslation' value='-0.35062 -0.44066 -0.60713'/>
243                           <fieldValue name='coneTranslation' value='-.48422 -.53116 -.63552'/>
244                           <fieldValue name='rotation' value='-11.22472 0 52.81325 2.15598'/>
245                           <fieldValue name='displayMode' value='BallAndStick'/>
246                           <fieldValue name='diffuseColor' value='0 0 0'/>
247                           <fieldValue name='transparency' value='0'/>
248                           <fieldValue name='ballRadius' value='1'/>
249                      </ProtoInstance>
250                      <ProtoInstance name='Vertex'>
251                           <fieldValue name='name' value='Vertex 2'/>
252                           <fieldValue name='description' value='2010-01-15BLOGS.STATE.GOV-INDEX.PHP'/>
253                           <fieldValue name='vertexText' value='"2010-01-15BLOGS.STATE.GOV-INDEX.PHP"'/>
254                           <fieldValue name='textTranslation' value='1.43526 1.19707 0.67279'/>
255                           <fieldValue name='textColor' value='0 0 0'/>
256                           <fieldValue name='url' value='"http://www.state.gov"'/>
257                           <fieldValue name='translation' value='1.28526 1.19707 0.67279'/>
258                           <fieldValue name='radius' value='0.1500'/>
259                           <fieldValue name='displayMode' value='BallAndStick'/>
260                           <fieldValue name='diffuseColor' value='0.5020 0 0'/>
261                           <fieldValue name='transparency' value='0'/>
262                      </ProtoInstance>
263                      <ProtoInstance name='Arc'>
264                           <fieldValue name='name' value='1.26'/>
265                           <fieldValue name='description' value='From blah1 to blah1'/>
266                           <fieldValue name='url' value='"http://www.google.com"'/>
267                           <fieldValue name='cylinderHeight' value='1.28361'/>
268                           <fieldValue name='cylinderTranslation' value='-0.12911 0.32068 -0.81718'/>
269                           <fieldValue name='coneTranslation' value='-0.16106 0.75793 -1.01700'/>
270                           <fieldValue name='rotation' value='-53.23500 0 8.51149 0.43344'/>
271                           <fieldValue name='displayMode' value='BallAndStick'/>
272                           <fieldValue name='diffuseColor' value='0 0 0'/>
273                           <fieldValue name='transparency' value='0'/>
274                           <fieldValue name='ballRadius' value='1'/>
275                      </ProtoInstance>
276                      <ProtoInstance name='Vertex'>
277                           <fieldValue name='name' value='Vertex 3'/>
278                           <fieldValue name='description' value='2010-01-15-FEEDS.FEEDBURNER.COM-DIPNOTE'/>
279                           <fieldValue name='vertexText' value='"2010-01-15-FEEDS.FEEDBURNER.COM-DIPNOTE"'/>
280                           <fieldValue name='textColor' value='0 0 0'/>
281                           <fieldValue name='textTranslation' value='0.08377 1.98542 -1.19849'/>
282                           <fieldValue name='url' value='"http://www.feedburner.com"'/>
283                           <fieldValue name='translation' value='-0.06623 1.98542 -1.19849'/>
284                           <fieldValue name='radius' value='.1500'/>
285                           <fieldValue name='displayMode' value='BallAndStick'/>
286                           <fieldValue name='diffuseColor' value='1.0000 0 0'/>
287                           <fieldValue name='transparency' value='0'/>
288                      </ProtoInstance>
289                      <ProtoInstance name='Arc'>
290                           <fieldValue name='name' value='1.39'/>
291                           <fieldValue name='description' value='From blah2 to blah2'/>
292                           <fieldValue name='url' value='"http://www.google.com"'/>
293                           <fieldValue name='cylinderHeight' value='1.12537'/>
294                           <fieldValue name='cylinderTranslation' value='-0.35500 -0.38541 -1.02982'/>
295                           <fieldValue name='coneTranslation' value='-0.54712 -0.47389 -1.37249'/>
296                           <fieldValue name='rotation' value='-95.76386 0 53.68924 1.79233'/>
297                           <fieldValue name='displayMode' value='BallAndStick'/>
298                           <fieldValue name='diffuseColor' value='0 0 0'/>
299                           <fieldValue name='transparency' value='0'/>
300                           <fieldValue name='ballRadius' value='1'/>
301                      </ProtoInstance>
302                 </Transform>
303            </Group>
304       </Scene>
305  </X3D>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top Index for DEF nodes: ArcPrototypeRootNode, ArcScript, ConeMaterial, ConeTransform, CylinderMaterial, CylinderTransform, infogroup, NetText, NetworkTextHolder, VertexPrototypeRootNode

Index for Viewpoint node: Viewpoint_1

Index for ProtoDeclare definitions: Arc, NetworkText, Vertex
-->
X3D Tooltips element index: Anchor, Appearance, Background, Cone, connect, Cylinder, field, fieldValue, FontStyle, Group, head, IS, Material, meta, NavigationInfo, PointLight, ProtoBody, ProtoDeclare, ProtoInstance, ProtoInterface, Scene, Script, Shape, Sphere, Text, Transform, Viewpoint, WorldInfo, X3D, plus documentation for accessType definitions, type definitions, XML data types, and field types

-->
<!-- Online at
https://savage.nps.edu/Savage/Tools/Visualization/PajekVisualizationPrototypesIndex.html -->
<!-- Version control at
https://gitlab.nps.edu/Savage/Savage/Tools/Visualization/PajekVisualizationPrototypes.x3d -->

<!-- Color-coding legend: X3D terminology <X3dNode  DEF='idName' field='value'/> matches XML terminology <XmlElement  DEF='idName' attribute='value'/>
(Light-blue background: event-based behavior node or statement) (Grey background inside box: inserted documentation) (Magenta background: X3D Extensibility)
    <ProtoInstance name='ProtoName'> <field name='fieldName'/> </ProtoInstance> -->

to top <!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->