<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<p>First, I admit, the problem is in *my* XML code. I am very
confused but happy that my changes seem to work for compiling my
Java code. I attempt an IS statement inside a fieldValue. I
doubt if that is acceptable, but I still try! Add below patch to
the fieldValue statement in X3DUOM v4.0. Then you don't have to
come up with a single acceptableNodeType for the children field to
encompass Nodes and Statements...can one have both SFNode and
MFNode fields? So fieldValue may have children, IS, or value,
exclusively? I'm not really sure how to do that in X3DUOM
(probably needs work), but I can probably do it in JSON Schema.
Anyway, somehow in X3DJSAIL stylesheet, if nodes and IS statements
inherit from X3DConcreteElement (probably not in standard?, but IS
does!), then it's possible you could combine IS and other
statements with children. I tried providing an alternate
acceptableNodeType for the children node in X3DUOM 4 in the
fieldValue statement, but it felt like I was digging a deeper
hole. A mouse told me that we were trying to come up with a
unified schema for abstract classes or interfaces above nodes and
statements, so here we are!<br>
</p>
<p>diff --git a/src/specifications/X3dUnifiedObjectModel-4.0.xml
b/src/specifications/X3dUnifiedObjectModel-4.0.xml<br>
index 4cb5df50f..dc43f4dbd 100644<br>
--- a/src/specifications/X3dUnifiedObjectModel-4.0.xml<br>
+++ b/src/specifications/X3dUnifiedObjectModel-4.0.xml<br>
@@ -41490,6 +41490,12 @@<br>
type="MFNode"<br>
accessType="inputOutput"<br>
acceptableNodeTypes="X3DNode"/><br>
+ <field name="IS"<br>
+ type="SFNode"<br>
+ accessType="inputOutput"<br>
+ default="NULL"<br>
+ acceptableNodeTypes="IS"<br>
+ inheritedFrom="X3DNode"/><br>
<field name="class"<br>
type="SFString"<br>
accessType="inputOutput"</p>
<p><br>
</p>
<p>Don's compile is below John's log. <font size="+3">Attaching
original .x3d which doesn't validate, that I know of.</font><br>
</p>
<p>I have not checked in all my JS code. If someone wants to
explore some boundaries of X3D, let me know. Log of John's code
test script (success? round trips working):<br>
</p>
<p>John's log:<br>
</p>
<p>$ bash several.sh ../data/rubik2x2x2.x3d<br>
BEGIN ../data/rubik2x2x2.x3d > json, END ../data/rubik2x2x2.x3d<br>
================================================================================<br>
/home/coderextreme/X3DJSONLD/src/main/node/xmldiff.js
../data/rubik2x2x2.x3d ../data/rubik2x2x2.x3d.new<br>
@5 /X3D/Scene/0/ProtoDeclare/0/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
@8
/X3D/Scene/0/ProtoDeclare/0/ProtoBody/0/Transform/0/Shape/0/Box/0
/X3D/Scene/0/ProtoDeclare/0/ProtoBody/0/Transform/0/Shape/0/Box/0<br>
< ""<br>
> {"$":{"containerField":"geometry"}}<br>
@5 /X3D/Scene/0/ProtoDeclare/1/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
@5 /X3D/Scene/0/ProtoDeclare/2/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
@5 /X3D/Scene/0/ProtoDeclare/3/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
<br>
Different<br>
~/X3DJSONLD/src/main/java/net/coderextreme/data
~/X3DJSONLD/src/main/shell<br>
../java/net/coderextreme/data/rubik2x2x2.java<br>
~/X3DJSONLD/src/main/shell<br>
~/X3DJSONLD/src/main/java ~/X3DJSONLD/src/main/shell<br>
net/coderextreme/data/rubik2x2x2<br>
Note: toFileStylesheetConversion(X3dToJson.xslt) is overwriting
prior file ../data/rubik2x2x2.new.json<br>
~/X3DJSONLD/src/main/shell<br>
================================================================================<br>
/home/coderextreme/X3DJSONLD/src/main/node/xmldiff.js
../data/rubik2x2x2.x3d
../data/rubik2x2x2.newPrettyPrint.intermediate.x3d<br>
@7/X3D/Scene/0/NavigationInfo/0/$/avatarSize<br>
>"0.25 1.6 0.75"<br>
@7/X3D/Scene/0/NavigationInfo/0/$/transitionType<br>
>"\"LINEAR\""<br>
@5 /X3D/Scene/0/ProtoDeclare/0/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
@5 /X3D/Scene/0/ProtoDeclare/1/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
@5 /X3D/Scene/0/ProtoDeclare/2/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
@5 /X3D/Scene/0/ProtoDeclare/3/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
<br>
Different<br>
~/X3DJSONLD/src/main/node ~/X3DJSONLD/src/main/shell<br>
../node/net/coderextreme/data/rubik2x2x2.js<br>
Warning: ../data/rubik2x2x2.new.x3d does not meet suggested X3D
naming conventions, continuing...<br>
Note: toFileX3D() is overwriting prior file
../data/rubik2x2x2.new.x3d<br>
~/X3DJSONLD/src/main/shell<br>
node /home/coderextreme/X3DJSONLD/src/main/node/xmldiff.js
../data/rubik2x2x2.x3d ../data/rubik2x2x2.new.x3d<br>
================================================================================<br>
/home/coderextreme/X3DJSONLD/src/main/node/xmldiff.js
../data/rubik2x2x2.x3d ../data/rubik2x2x2.new.x3d<br>
@7/X3D/Scene/0/NavigationInfo/0/$/avatarSize<br>
>"0.25 1.6 0.75"<br>
@7/X3D/Scene/0/NavigationInfo/0/$/transitionType<br>
>"\"LINEAR\""<br>
@5 /X3D/Scene/0/ProtoDeclare/0/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
@5 /X3D/Scene/0/ProtoDeclare/1/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
@5 /X3D/Scene/0/ProtoDeclare/2/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
@5 /X3D/Scene/0/ProtoDeclare/3/ProtoBody/0/Transform/0/$<br>
< {"translation":"0 0 0"}<br>
<br>
Different</p>
<p>===========================================================</p>
<p>Note: Don's code doesn't compile! Attached. Log:<br>
</p>
<p><br>
</p>
<p>$ javac -cp
/c/x3d-code/www.web3d.org/x3d/stylesheets/java/jars/X3DJSAIL.4.0.full.jar:.
net/x3djsonld/data/rubik2x2x2.java<br>
net/x3djsonld/data/rubik2x2x2.java:104: error: incompatible types:
IS cannot be converted to X3DNode<br>
.addConnect(new
connect().setNodeField("diffuseColor").setProtoField("diffuseColor")))))<br>
^<br>
net/x3djsonld/data/rubik2x2x2.java:109: error: incompatible types:
IS cannot be converted to X3DNode<br>
.addConnect(new
connect().setNodeField("diffuseColor").setProtoField("diffuseColor"))))))))<br>
^<br>
net/x3djsonld/data/rubik2x2x2.java:123: error: incompatible types:
IS cannot be converted to X3DNode<br>
.addConnect(new
connect().setNodeField("diffuseColor").setProtoField("x1diffuseColor")))))<br>
^<br>
net/x3djsonld/data/rubik2x2x2.java:128: error: incompatible types:
IS cannot be converted to X3DNode<br>
.addConnect(new
connect().setNodeField("diffuseColor").setProtoField("x2diffuseColor"))))))))<br>
^<br>
Note: Some messages have been simplified; recompile with
-Xdiags:verbose to get full output</p>
<p>4 errors</p>
<p>$ javac -cp
/c/x3d-code/www.web3d.org/x3d/stylesheets/java/jars/X3DJSAIL.4.0.full.jar:.
-Xdiags:verbose net/x3djsonld/data/rubik2x2x2.java<br>
net/x3djsonld/data/rubik2x2x2.java:103: error: method addChild in
class fieldValue cannot be applied to given types;<br>
.addChild(new IS()<br>
^<br>
required: X3DNode<br>
found: IS<br>
reason: argument mismatch; IS cannot be converted to X3DNode<br>
net/x3djsonld/data/rubik2x2x2.java:108: error: method addChild in
class fieldValue cannot be applied to given types;<br>
.addChild(new IS()<br>
^<br>
required: X3DNode<br>
found: IS<br>
reason: argument mismatch; IS cannot be converted to X3DNode<br>
net/x3djsonld/data/rubik2x2x2.java:122: error: method addChild in
class fieldValue cannot be applied to given types;<br>
.addChild(new IS()<br>
^<br>
required: X3DNode<br>
found: IS<br>
reason: argument mismatch; IS cannot be converted to X3DNode<br>
net/x3djsonld/data/rubik2x2x2.java:127: error: method addChild in
class fieldValue cannot be applied to given types;<br>
.addChild(new IS()<br>
^<br>
required: X3DNode<br>
found: IS<br>
reason: argument mismatch; IS cannot be converted to X3DNode<br>
4 errors<br>
</p>
<p><br>
</p>
</body>
</html>