[x3d-public] Improve X3D JSON schema?
John Carlson
yottzumm at gmail.com
Thu Feb 19 10:18:00 PST 2026
Great, Don,
Here's a set of subschema's I've arrived at for @geoSchema, note that this
is very different from Roy's version, and has been updated for latest JSON
schema standards. If this can be auto-generated from X3DUOM, great! Maybe
an array of patterns? Note that I need to look at online test cases. I'll
be looking at converting the archive with X3dToJson.xslt or Holger's
x3d-tidy, unless you;'ve got a set of JSON files handy? Thanks!
For example, this command seems to present some errors I have no clue
about. I am pursuing validating my schema (in strict mode) for more
details.
$ jsonlint --validate schemas/x3d-4.1-JSONSchema.json --environment
draft-2020-12 examples/abox.json 1>/dev/null
strict mode: "prefixItems" is 1-tuple, but minItems or maxItems/items are
not specified or different at path "#"
strict mode: "prefixItems" is 2-tuple, but minItems or maxItems/items are
not specified or different at path "#"
I'm hoping someone in the geospatial group can review this.
"@geoSystem": {
"$comment": "Coordinate reference system identifier tokens. Exactly
one of three systems: GD/GDC (geographic degrees), UTM (universal
transverse mercator), or GC/GCC (geocentric).",
"oneOf": [
{
"$ref": "#/$defs/@geoSystem-GD"
},
{
"$ref": "#/$defs/@geoSystem-UTM"
},
{
"$ref": "#/$defs/@geoSystem-GC"
}
]
},
"@geoSystem-GD": {
"title": "geoSystem GD/GDC Geographic Degrees",
"$comment": "Geographic lat/lon degrees. Optional second token
selects ellipsoid datum; defaults to WE (WGS84 ellipsoid).",
"type": "array",
"minItems": 1,
"maxItems": 2,
"prefixItems": [
{
"type": "string",
"enum": [
"GD",
"GDC"
],
"default": "GD"
}
],
"items": {
"$ref": "#/$defs/@geoSystem-ellipsoid"
}
},
"@geoSystem-UTM": {
"type": "array",
"minItems": 2,
"maxItems": 5,
"prefixItems": [
{
"type": "string",
"const": "UTM"
},
{
"$ref": "#/$defs/@geoSystem-UTM-zone"
}
],
"items": {
"type": "string",
"enum": [
"N",
"S",
"WGS84",
"AM",
"AN",
"BN",
"BR",
"CC",
"CD",
"EA",
"EB",
"EC",
"ED",
"EE",
"EF",
"FA",
"HE",
"HO",
"ID",
"IN",
"KA",
"RF",
"SA",
"WD",
"WE"
]
},
"if": {
"contains": {
"const": "N"
}
},
"then": {
"not": {
"contains": {
"const": "S"
}
}
}
},
"@geoSystem-GC": {
"title": "geoSystem GC/GCC Geocentric",
"$comment": "Earth-centered geocentric coordinate system. No
additional parameters.",
"type": "array",
"minItems": 1,
"maxItems": 1,
"prefixItems": [
{
"type": "string",
"enum": [
"GC",
"GCC"
]
}
],
"items": false
},
"@geoSystem-ellipsoid": {
"title": "geoSystem ellipsoid datum",
"$comment": "Reference ellipsoid. WGS84 is the datum name; the 22
two-letter codes are ellipsoid identifiers. Defaults to WE.",
"type": "string",
"default": "WE",
"enum": [
"WGS84",
"AM",
"AN",
"BN",
"BR",
"CC",
"CD",
"EA",
"EB",
"EC",
"ED",
"EE",
"EF",
"FA",
"HE",
"HO",
"ID",
"IN",
"KA",
"RF",
"SA",
"WD",
"WE"
]
},
"@geoSystem-UTM-zone": {
"title": "UTM zone number",
"$comment": "Zone 1 60 prefixed with Z. Leading zero is optional: Z1
and Z01 are both valid.",
"type": "string",
"pattern": "^Z(0?[1-9]|[1-5][0-9]|60)$"
},
On Thu, Feb 19, 2026 at 11:31 AM Don Brutzman <don.brutzman at gmail.com>
wrote:
> John, to be clear, please note that you are referring to your JSON
> Schema. Any trial improvements you make will be welcome. Thanks for
> steady efforts.
>
> As reported many times before, we do not have an official X3D JSON
> schema. Later this spring we will be looking carefully at several
> potential JSON schema designs for X3D. While reaching consensus regarding
> best patterns, am expecting the group will evaluate implementations based
> on autogeneration of an exactly correct version using X3DUOM. Summary
> online at
>
> - X3D to JSON Stylesheet Converter
> The X3D to JSON stylesheet converts .x3d XML to .json, supporting the
> forthcoming JSON Encoding for X3D Graphics.
> This page fully describes current X3D JSON design patterns and syntax,
> providing examples and references.
> - https://www.web3d.org/x3d/stylesheets/X3dToJson.html
>
> Planned Progress
>
> Current status: X3D JSON developmental work is mature and provides full
> coverage of X3D model capabilities in JSON, as demonstrated by thousands
> of example models
> <https://www.web3d.org/x3d/content/examples/X3dResources.html#Examples>.
> Design patterns have been available and assessed by X3D community for
> several years. One possible addition to be considered will be use of an
> .x3dj file extension as an alternative to the classic .json file
> extension.
>
> The only significant gap in current assets is availability of a JSON
> Schema for X3D, autogenerated from the X3D Unified Object Model (X3DUOM)
> <https://www.web3d.org/specifications/X3DUOM.html>. Web3D Consortium
> standardization efforts have been quite careful about taking this step.
> Although JSON Schema design <https://json-schema.org/> has not been
> formally ratified or standardized, it appears to be sufficiently well
> defined and implemented to justify creating an X3D JSON Schema as an
> informative annex in the upcoming draft specification for the X3D JSON
> Encoding. We expect such work to occur in Spring 2026.
>
> We have much capability in X3D JSON already. Adding a shared and
> standardized X3D JSON Schema will be an excellent next step.
>
> Onward we go. Have fun with X3D JSON! 😃
>
> all the best, Don
> --
> X3D Graphics, Maritime Robotics, Distributed Simulation
> Relative Motion Consulting https://RelativeMotion.info
>
>
> On Thu, Feb 19, 2026 at 2:33 AM John Carlson via x3d-public <
> x3d-public at web3d.org> wrote:
>
>> I'm looking for someone to work on JSON schemas, particularly, improving
>> X3D JSON schema.
>>
>> While the X3D JSON schema works in non-strict mode (for JSON schema
>> draft2020-12), it doesn't work in strict mode. While I have been
>> successful at removing some of these stumbling blocks, I need help with
>> some, particular understanding how properties like prefixItems, items,
>> minItems and maxItems work with arrays, and with oneOf.
>>
>> Knowledge of JavaScript is helpful, and I'd like to work on
>> the @geoSystem field to work in strict mode, yet still offer the same
>> validation capabilities (or better). Knowledge of coordinate systems like
>> UTM, GD, WGS84 might be helpful. But it's more important to
>> know about enumerations and arrays of strings.
>>
>> Here's my development environment:
>>
>> https://github.com/coderextreme/x3dvalidate
>>
>> Once you have the project checked out, you can test with:
>>
>> C:\> node.exe index.js examples\abox.json
>>
>> (or node, or nodejs)
>>
>> The schemas are in the schemas folder. Here's the one that needs
>> work: schemas\x3d-4.1-JSONSchema.json Let's just get this one schema
>> working for now.
>>
>> Once the schema has been prepared, I will work on getting the
>> auto-generation working for strictly complying schemas (I've already been
>> working on that).
>>
>> There may either be updates to X3D JSON schema, or we may request
>> enhancements to the JSON schema standard for our use case. Possibly,
>> enhancements to Ajv may be needed.
>>
>> The work will involve validating the X3D JSON schema over and over again
>> as the schema is improved, validating the X3D JSON schema itself.
>>
>> While I'm not a business, there might be other ways to renumerate you.
>> Kind of like working for someone to work your house, I guess?
>>
>> I guess I'll try to get AI to make suggestions next.
>>
>> Thanks,
>>
>> John
>> _______________________________________________
>> 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/20260219/b3c988db/attachment-0001.html>
More information about the x3d-public
mailing list