Integrating SQF in a Framework
You can use Schematron Quick Fixes to assist your content authors by imposing rules for an entire framework (document type) and offering fixes when a rule violation is detected.
For example, if you are using DITA, you may want your contributors to avoid inserting
a
figure (fig
element) inside a paragraph (p
element) that
contains other content since it may result in undesirable placement or spacing in
the output.
The Schematron rule and its Quick Fix for this particular use-case could look like
this:
<schema xmlns="http://purl.oclc.org/dsdl/schematron" xmlns:sqf="http://www.schematron-quickfix.com/validator/process" queryBinding="xslt2"> <pattern id="check.figure.location"> <rule context="p/fig"> <report test="true()" role="warn" sqf:fix="moveAfter"> A figure inside a paragraph doesn't transform well into PDF. </report> <sqf:fix id="moveAfter"> <sqf:description> <sqf:title>Move after the paragraph.</sqf:title> </sqf:description> <let name="figToMove" value="."/> <sqf:add match="parent::p" select="$figToMove" position="after"/> <sqf:delete match="."/> </sqf:fix> </rule> </pattern> </schema>
The result of this example would be that the user will see a warning if they insert
a
fig
element inside a p
element and they are presented with
the option of selecting the Quick Fix that would move the figure outside the paragraph.
How to Integrate SQF in a Framework
To integrate a Schematron Quick Fix in a framework, follow these steps:
- Define a Schematron Quick Fix for a rule in an existing or new Schematron file.
- Save it somewhere in your framework directory. For example, the default framework
directory for DITA is located in:
[OXYGEN_INSTALL_DIR]/frameworks/dita/
. - Add a reference to the Schematron file that includes the SQF in your framework by following the procedure in Associating a Schema in Validation Scenarios Defined in the Document Type.
- Open a document in your framework and test the new rule and quick fix.
- You can continue to refine the rule and develop additional rules as needed.