Open slgrobotics opened 2 months ago
@dagar - P.S. - after a closer look at generated XSD files, it looks like "include noise.sdf" statements, for example, are ignored, and the resulting imu.xsd file, for example, does not contain noise elements. Basically, generated XSDs are incomplete.
https://github.com/gazebosim/sdformat/issues/633 - open issue, last mention 2021
It is a long rabbit hole...
Just a note: the command that builds specific XSD file (imu.xsd in this case):
python3 tools/xmlschema.py --sdf-dir sdf/1.9 --input-file sdf/1.9/imu.sdf --output-dir build/sdf/1.9
segment in imu.sdf:
<element name="x" required="0">
<description>Angular velocity about the X axis</description>
<include filename="noise.sdf" required="0"/>
</element>
the resulting segment in imu.xsd ("include noise.sdf" ignored):
<xsd:choice minOccurs='0' maxOccurs='1'>
<xsd:element name='x'>
<xsd:annotation>
<xsd:documentation xml:lang='en'>
<![CDATA[Angular velocity about the X axis]]>
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice maxOccurs='unbounded'>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:choice>
At the moment model and world SDF files are not validated when they are checked in, and there is no single convenient tool to format these files. Linux has xmllint command line utility that allows formatting (pretty-printing) such files.
Here are suggested shell scripts that could help with simple checks and formatting (the same way astyle is used for C++ files):
format-sdf.sh <file>
xmllint --format $1 | tail -n +2 > /tmp/$1.tmp
mv /tmp/$1.tmp $1
!/bin/bash
xmllint --format $1 | tail -n +2 | diff $1 - | head -
xmllint --format $1 | tail -n +2 | diff $1 - &>/dev/null
~/gz10/PX4-gazebo-models/worlds$ xmllint --schema sdformat/build/sdf/1.9/root.xsd baylands.sdf ... baylands.sdf:28: element scene: Schemas validity error : Element 'scene': Character content other than whitespace is not allowed because the content type is 'element-only'. baylands.sdf:156: element gravity: Schemas validity error : Element 'gravity': This element is not expected. baylands.sdf fails to validate