Besonders fortschrittlich klingt die Möglichkeit in ein RelaxNG Schema weitere Schematron-Regeln Schematron einzubinden - Relaxtron. Damit kann man bspw. sicherstellen, dass bestimmte Constraints bzgl. der Elementstruktur eingehalten werden. Mit einer Schemasprache allein ginge das nicht. Betrachten wir das folgende Stück RelaxNG in der Kompaktform:
namespace sch = "http://purl.oclc.org/dsdl/schematron" start = ul ul = [ sch:pattern [ sch:rule [ context = "list" sch:assert [ test = "not(ancestor::ul and ancestor::procedure)" 'Eine ul darf in der Procedure nicht verschachtelt werden!' ] ] ] ] element ul { any_attribute*, listitem+ } listitem = element listitem { any_attribute*, ( para | ul )+ } para = element para { any_attribute*, text* } any_attribute = attribute * { text }Plain Text
Hier wird sichergestellt, dass eine ungeordnete Liste list nicht tiefer verschachtelt wird - aber nur innerhalb einer procedure .
Der oXygen Editor kann die RelaxNG Kopaktform in die XML Form überführen und schön visualisieren. Das sieht dann so aus:
