Merge pull request #1318 from RosettaCommons/vmullig/rosettascripts_include
Add inclusion to RosettaScipts
Users want to be able to do something like the following:
<ROSETTASCRIPTS>
<xi:include href="my_common_residueselectors.xml" />
<xi:include href="my_common_taskoperations.xml" />
<xi:include href="my_common_filters_and_movers.xml" />
<PROTOCOLS>
<Add mover="fastrelax" />
</PROTOCOLS>
</ROSETTASCRIPTS>
Where the included files might be something like:
<RESIDUE_SELECTORS>
<... selector definition 1 ... />
<... selector definition 2 ... />
<... selector definition 3 ... />
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
<... taskoperation definition 1 ... />
</TASKOPERATIONS>
<FILTERS>
<... filter definition 1 ... />
<... filter definition 2 ... />
</FILTERS>
<MOVERS>
<... mover definition 1 ... />
<... mover definition 2 ... />
</MOVERS>
All of this would automatically and naïvely (i.e. saving error-checking and interpretation for later) be concatenated, with the included files inserted in place of the INCLUDE statements, to give:
<ROSETTASCRIPTS>
<RESIDUE_SELECTORS>
<... selector definition 1 ... />
<... selector definition 2 ... />
<... selector definition 3 ... />
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
<... taskoperation definition 1 ... />
</TASKOPERATIONS>
<FILTERS>
<... filter definition 1 ... />
<... filter definition 2 ... />
</FILTERS>
<MOVERS>
<... mover definition 1 ... />
<... mover definition 2 ... />
</MOVERS>
<PROTOCOLS>
<Add mover="fastrelax" />
</PROTOCOLS>
</ROSETTASCRIPTS>
This pull request aims to implement this. Note that there is existing <INCLUDES> block functionality, but this only allows users to append XML to a script, which isn't very useful -- it doesn't let them insert XML at the point of inclusion, which would be far more useful.
Tasks:
- Add <xi:include href="" /> parsing prior to the rest of script interpretation.
- Debug.
- Unit test.
- Improve circular inclusion detection logic.
- Unit test for detecting circular inclusion.
- Integration test.
- DOCUMENTATION.
- Beauty.