| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
When generic=true, oneNodeGroup uses xs:any processContents="lax" instead of a closed xs:choice, allowing unknown custom node elements to pass validation. Top-level xs:element declarations are also emitted so that lax processing can still resolve and validate the known built-in node types by name. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Generates the generic XSD schema from the default factory (built-in nodes only) and prints it to stdout, suitable for use as a generic static validator that stays in sync with the built-in node inventory. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PortsList is an unordered_map so iterating it directly produced XSD attributes in hash-table order, which varies across runs and platforms. Sort ports into a std::map before emitting xs:attribute elements. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
XSD alone cannot express constraints like "every custom node element used in a BehaviorTree body must have a matching TreeNodesModel entry" Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Generates an ISO Schematron schema (btcpp4.sch) complementing the generic XSD Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
I'd like to give also some context on results: ./tools/validate_xml.py fuzzing/corpus/bt_corpus/corpus1.xml fuzzing/corpus/bt_corpus/corpus1.xml validates OK ./tools/validate_xml.py fuzzing/corpus/bt_corpus/corpus2.xml fuzzing/corpus/bt_corpus/corpus2.xml:5: element Timeout: Schemas validity error : Element 'Timeout', attribute 'timeout_ms': The attribute 'timeout_ms' is not allowed. fuzzing/corpus/bt_corpus/corpus2.xml:5: element Timeout: Schemas validity error : Element 'Timeout': The attribute 'msec' is required but missing. fuzzing/corpus/bt_corpus/corpus2.xml fails to validate ./tools/validate_xml.py fuzzing/corpus/bt_corpus/corpus3.xml
fuzzing/corpus/bt_corpus/corpus3.xml:4: element SetBlackboard: Schemas validity error : Element 'SetBlackboard', attribute 'key': The attribute 'key' is not allowed.
fuzzing/corpus/bt_corpus/corpus3.xml:4: element SetBlackboard: Schemas validity error : Element 'SetBlackboard': The attribute 'output_key' is required but missing.
fuzzing/corpus/bt_corpus/corpus3.xml fails to validate
fuzzing/corpus/bt_corpus/corpus3.xml: /root/BehaviorTree/Sequence/SubTree: SubTree ID='SubTree' is not defined in this file.
(If the definition lives in an included file, add an <include>.)
./tools/validate_xml.py fuzzing/corpus/bt_corpus/corpus4.xml
fuzzing/corpus/bt_corpus/corpus4.xml:5: element ForceSuccess: Schemas validity error : Element 'ForceSuccess': Missing child element(s). Expected is one of ( {*}*, * ).
fuzzing/corpus/bt_corpus/corpus4.xml:6: element ForceFailure: Schemas validity error : Element 'ForceFailure': Missing child element(s). Expected is one of ( {*}*, * ).
fuzzing/corpus/bt_corpus/corpus4.xml fails to validate
|
Sorry, something went wrong.
|
Thanks for this contribution — the layering is the right approach (XSD for structure, Schematron for cross-file-reference rules that XSD can't express), and the tests are a good start. I reviewed the diff in detail; a few things should be addressed before merging, listed roughly by severity. Should be fixed before merge1. The checked-in tools/generated/bt4.xsd is already stale relative to the code in this PR. 2. CMakeLists.txt: editing src/btcpp4_schematron.sch does not trigger reconfiguration. set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/src/btcpp4_schematron.sch")3. The writeTreeXSD signature change is an ABI break. [[nodiscard]] std::string writeTreeXSD(const BehaviorTreeFactory& factory);
[[nodiscard]] std::string writeTreeXSD(const BehaviorTreeFactory& factory, bool generic);4. Schematron Rule B false-positives on built-in nodes written in explicit notation. Nice to have5. Placeholder substitution in writeTreeSchematron() is single-shot and fails silently. 6. tools/generated/bt4.sch carries template-only artifacts. 7. validate_xml.py with --no-xsd --no-sch prints "validates OK" and exits 0 while validating nothing. A guard that errors when both are disabled would prevent a misleading green result in scripts/CI. Non-issues I checked
Overall this is a valuable feature and I'd like to land it. Points 1–4 are the blockers; 5–7 are improvements. |
Sorry, something went wrong.
to validate_xml.py
|
Hi @facontidavide, thanks for your review, some important points definitely slipped while preparing this PR. I have fixed the issues you mentioned except the pt. 4. (Schematron Rule B false-positives on built-in nodes written in explicit notation.)
So, if the explicit syntax is used, the <TreeNodeModel> is not needed and the rule B can go away altogether, is that right? |
Sorry, something went wrong.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Dear @facontidavide, I have removed unnecessary rule, added another child count constraint instead and regenerated the corresponding files, all issues you noted appear fixed to me. The intermittent Windows CI failure is unfortunate but unrelated to this PR. |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
I was looking into different BT.CPP xml file examples (at least they look so at the first glance) and found out that some of them are actually not completely valid. Moreover, trying to open them in Groot2 brings it to an endless loop. Sadly there is no obvious way to validate these files, so I'd like to introduce one.
In general, the following functionality is added:
It also seems that not all xml files in the repository (these that should be valid) pass the validation. I would address it in a different PR if needed.
NB: LLM (Claude) was used to improve and contribute to the code where my knowledge is limited (Schematron in particular). All LLM contributions have been reviewed by me.