[x3d-public] online xslt transformer

John Carlson yottzumm at gmail.com
Sun Jan 26 18:22:34 PST 2020


I would use the Saxon 9 he XSL 2.0 Java transformer for stylesheets.
Otherwise look for a DOM2JSONSerializer.js (xml2all.js) in X3DJSONLD.   I
would appreciate more eyes on that code.

On Sun, Jan 26, 2020 at 7:27 PM Don Brutzman <brutzman at nps.edu> wrote:

> [cc: Curt, Terry]
>
> Thanks for the interesting assets and information Andreas!
>
> Have automated our build conversions, using saxon 9 as conversion engine.
>
> Noticed you had a lower-case "<inline>" in your gist example.  Generally
> my transformations are as strict as possible so that could be the cause of
> the error you got.
>
> Our validation of JSON source will get stricter once they finalize JSON
> Schema and provide source, John Carlson can hardly wait to get to that
> point.
>
>         https://json-schema.org
>
> Example prototype conversion:
>
> * X3D Example Archives: X3D for Web Authors, Chapter 14 Prototypes, View
> Frustum Prototype
>
> https://x3dgraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/ViewFrustumPrototypeIndex.html
>
> https://x3dgraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/ViewFrustumPrototype.json
>
> https://jsonlint.com/?json=https://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/ViewFrustumPrototype.json
>
> excerpt follows
>
> "ProtoBody": {
>      "-children":[
>        { "Switch":
>          {
>            "@DEF":"VisibilitySwitch",
>            "@whichChoice":-1,
>            "-children":[
>              { "Transform":
>                {
>                  "@DEF":"PositionTransform",
>                  "@rotation":[0,1,0,3.14159],
>                  "-children":[
>                    { "Transform":
>                      {
>                        "@DEF":"OrientationTransform",
>                        "-children":[
>                          { "Shape":
>                            {
>                              "-geometry":
>                                { "IndexedLineSet":
>                                  {
>                                    "@DEF":"FrustumLines",
>
>  "@coordIndex":[0,1,2,3,0,-1,4,5,6,7,4,-1,0,4,-1,1,5,-1,2,6,-1,3,7,-1],
>                                    "-coord":
>                                      { "Coordinate":
>                                        {
>                                          "@DEF":"FrustumCoordinate",
>
>  "@point":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
>                                        }
>                                      }
>                                  }
>                                },
>                              "-appearance":
>                                { "Appearance":
>                                  {
>                                    "-material":
>                                      { "Material":
>                                        {
>                                          "IS": {
>                                              "connect": [
>                                                {
>
>  "@nodeField":"emissiveColor",
>                                                  "@protoField":"lineColor"
>                                                }
>                                              ]
>                                          }
>                                        }
>                                      }
>                                  }
>                                }
>                            }
>                          },
>                          { "Shape":
>                            {
>                              "-geometry":
>                                { "Extrusion":
>                                  {
>                                    "@DEF":"FrustumExtrusion"
>                                  }
>                                },
>                              "-appearance":
>                                { "Appearance":
>                                  {
>                                    "@DEF":"FrustumAppearance",
>                                    "-material":
>                                      { "Material":
>                                        {
>                                          "IS": {
>                                              "connect": [
>                                                {
>
>  "@nodeField":"diffuseColor",
>
>  "@protoField":"frustumColor"
>                                                },
>                                                {
>
>  "@nodeField":"transparency",
>
>  "@protoField":"transparency"
>                                                }
>                                              ]
>                                          }
>                                        }
>                                      }
>                                  }
>                                }
>                            }
>                          },
>                          { "Shape":
>                            {
>                              "-geometry":
>                                { "Sphere":
>                                  {
>                                    "@radius":0.08
>                                  }
>                                },
>                              "-appearance":
>                                { "Appearance":
>                                  {
>                                    "@USE":"FrustumAppearance"
>                                  }
>                                }
>                            }
>                          }
>                        ]
>                      }
>                    }
>                  ]
>                }
>              }
>            ]
>          }
>        },
>        { "Script":
>          {
>            "@DEF":"GeometryComputationScript",
>            "@directOutput":true,
>            "@url":["ViewFrustumPrototypeScript.js","
> http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/ViewFrustumPrototypeScript.js
> "],
>            "field": [
>              {
>                "@name":"visible",
>                "@accessType":"inputOutput",
>                "@appinfo":"Whether or not frustum geometry is rendered",
>                "@type":"SFBool"
>              },
>              {
>                "@name":"visibilitySwitchSelection",
>                "@accessType":"outputOnly",
>                "@appinfo":"Adjust Switch selection to make geometry
> visible or not",
>                "@type":"SFInt32"
>              },
>              {
>                "@name":"ViewpointNode",
>                "@accessType":"initializeOnly",
>                "@type":"SFNode",
>                "-children":[
>                  {
>                    "#comment":"initialization node (if any) goes here"
>                  }
>                ]
>              },
>              {
>                "@name":"NavigationInfoNode",
>                "@accessType":"initializeOnly",
>                "@type":"SFNode",
>                "-children":[
>                  {
>                    "#comment":"initialization node (if any) goes here"
>                  }
>                ]
>              },
>              {
>                "@name":"FrustumCoordinate",
>                "@accessType":"initializeOnly",
>                "@type":"SFNode",
>                "-children":[
>                  { "Coordinate":
>                    {
>                      "@USE":"FrustumCoordinate"
>                    }
>                  }
>                ]
>              },
>              {
>                "@name":"FrustumExtrusion",
>                "@accessType":"initializeOnly",
>                "@type":"SFNode",
>                "-children":[
>                  { "Extrusion":
>                    {
>                      "@USE":"FrustumExtrusion"
>                    }
>                  }
>                ]
>              },
>              {
>                "@name":"recompute",
>                "@accessType":"inputOnly",
>                "@type":"SFBool"
>              },
>              {
>                "@name":"aspectRatio",
>                "@accessType":"inputOutput",
>                "@appinfo":"assumed ratio height/width",
>                "@type":"SFFloat"
>              },
>              {
>                "@name":"position_changed",
>                "@accessType":"outputOnly",
>                "@type":"SFVec3f"
>              },
>              {
>                "@name":"orientation_changed",
>                "@accessType":"outputOnly",
>                "@type":"SFRotation"
>              },
>              {
>                "@name":"spine_changed",
>                "@accessType":"outputOnly",
>                "@type":"MFVec3f"
>              },
>              {
>                "@name":"scale_changed",
>                "@accessType":"outputOnly",
>                "@type":"MFVec2f"
>              },
>              {
>                "@name":"point_changed",
>                "@accessType":"outputOnly",
>                "@type":"MFVec3f"
>              },
>              {
>                "@name":"trace",
>                "@accessType":"initializeOnly",
>                "@type":"SFBool"
>              }
>            ],
>            "IS": {
>                "connect": [
>                  {
>                    "@nodeField":"visible",
>                    "@protoField":"visible"
>                  },
>                  {
>                    "@nodeField":"ViewpointNode",
>                    "@protoField":"ViewpointNode"
>                  },
>                  {
>                    "@nodeField":"NavigationInfoNode",
>                    "@protoField":"NavigationInfoNode"
>                  },
>                  {
>                    "@nodeField":"aspectRatio",
>                    "@protoField":"aspectRatio"
>                  },
>                  {
>                    "@nodeField":"trace",
>                    "@protoField":"trace"
>                  }
>                ]
>            }
>          }
>        },
>        { "ROUTE":
>          {
>            "@fromField":"visibilitySwitchSelection",
>            "@fromNode":"GeometryComputationScript",
>            "@toField":"whichChoice",
>            "@toNode":"VisibilitySwitch"
>          }
>        },
>        { "ROUTE":
>          {
>            "@fromField":"position_changed",
>            "@fromNode":"GeometryComputationScript",
>            "@toField":"translation",
>            "@toNode":"PositionTransform"
>          }
>        },
>        { "ROUTE":
>          {
>            "@fromField":"orientation_changed",
>            "@fromNode":"GeometryComputationScript",
>            "@toField":"rotation",
>            "@toNode":"OrientationTransform"
>          }
>        },
>        { "ROUTE":
>          {
>            "@fromField":"spine_changed",
>            "@fromNode":"GeometryComputationScript",
>            "@toField":"set_spine",
>            "@toNode":"FrustumExtrusion"
>          }
>        },
>        { "ROUTE":
>          {
>            "@fromField":"scale_changed",
>            "@fromNode":"GeometryComputationScript",
>            "@toField":"set_scale",
>            "@toNode":"FrustumExtrusion"
>          }
>        },
>        { "ROUTE":
>          {
>            "@fromField":"point_changed",
>            "@fromNode":"GeometryComputationScript",
>            "@toField":"point",
>            "@toNode":"FrustumCoordinate"
>          }
>        }
>      ]
> }
> On 1/26/2020 1:30 PM, Andreas Plesch wrote:
> > It was the xsl processor which had the problem, not the stylesheet.
> >
> > http://xsltransform.net/
> >
> > uses saxon 9 he and generates error-free and hopefully correct json.
> >
> > -Andreas
> >
> > On Sun, Jan 26, 2020 at 4:09 PM Andreas Plesch <andreasplesch at gmail.com>
> wrote:
> >>
> >> I was looking for a relatively easy way to convert from xml to the
> >> json encoding, using Don's xslt stylesheet
> >> (
> https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/X3dToJson.xslt#l26
> ).
> >> After a while I found
> >>
> >> https://xslttest.appspot.com/
> >>
> >> which seems to work pretty well but had some problem with Protos
> >>
> >> Here is a test conversion of an old vrml scene:
> >>
> >> https://gist.github.com/andreasplesch/4fb27cb9f3db9ee423066ae74d4aaae1
> >>
> >> converted to xml with view3dscene.
> >>
> >> The json has "-IllegalChildNodeFieldNameNotFound" in ProtoBodies.
> >> Could that be a result of insufficient capabilities of the xsl
> >> processor ? It says it supports XSLT 2.0.
> >>
> >> Andreas
> >>
> >>
> >> --
> >> Andreas Plesch
> >> Waltham, MA 02453
>
>
> all the best, Don
> --
> Don Brutzman  Naval Postgraduate School, Code USW/Br
> brutzman at nps.edu
> Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149
> X3D graphics, virtual worlds, navy robotics
> http://faculty.nps.edu/brutzman
>
> _______________________________________________
> x3d-public mailing list
> x3d-public at web3d.org
> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20200126/e71c09f6/attachment-0001.html>


More information about the x3d-public mailing list