3.4.2  Relaxtron

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:

Im oXygen Editor gibt es eine Vollmodell-Ansicht und eine Logische Modellansicht für RelaxNG Schemas, die auch eingebettete Schematron-Knoten anzeigen. Mit Klick auf ein Symbol gelangt man zum betreffenden Quelltextstück.
figure: 5  Anzeige eines RelaxNG Schemas im oXygen Editor