Schema composition is about arranging schemas, patterns, rules, and assertions to support different validation tasks and for the ease of maintenance by allowing reuse of assertions, rules, and patterns.

Schematron provides four ways to compose a schema.

An abstract rule is a named set of assertions and represented by a sch:rule element without a context expression. It is scoped to the containing pattern. All rules of the same pattern can use a set of assertions by referencing the name of the abstract rule in the rule attribute of a sch:extends element.

A phase is a named set of patterns defined by a top-level sch:phase element. Phases allow one schema document to cover multiple validation scenarios or needs.

Schematron offers two mechanisms to use external definitions. The sch:include element can be used anywhere and has a href attribute that points to an external resource. The content of the resource is inserted in place of the sch:include element.

The second mechanism is build on top of the sch:extends element. Instead of a rule attribute naming an abstract rule, it may use a href attribute pointing to an external resource. If the external resource is the same element as the sch:extends element’s parent, then the child nodes of the referenced element are inserted in place of the sch:extends element. The use of sch:extends however is still restricted to the sch:rule element.