Anleitung zur Spezifikation von Geschäftsregeln

Die Funktionalität ist verfügbar seit XÖV-Handbuch 2.2, XGenerator 3.0.1, XÖV-Profil 1.6.0, KoSIT-Zubehör 1.16.0 (XÖV-Starterpaket 2.0).

Das XÖV-Profil bietet die Möglichkeit, Geschäftsregeln im XÖV-Fachmodell eines Standards zu spezifizieren und diese mittels XGenerator automatisiert in Schematron-Regeln zu überführen. Diese können als Grundlage für die Validierung von Nachrichteninstanzen des Standards genutzt werden.

Hinweis: Die Kenntnis des ISO-Schematron-Standards ("`Information technology — Document Schema Definition Languages (DSDL) — Part 3: Rule-based validation — Schematron`") und des W3C-XPath-Standards ("`XML Path Language (XPath)`") werden im weiteren Verlauf vorausgesetzt.

Das vorliegende Dokument besteht aus zwei Teilen: Im Teil Erste Schritte werden die grundlegenden Möglichkeiten und Zusammenhänge anhand eines einfachen Beispiels erläutert. Im Teil Anleitung zur Modellierung von Geschäftsregeln ist die vollständige XÖV-Methodik zur Modellierung von Geschäftsregeln dokumentiert.

Erste Schritte

Im XÖV-Fachmodell eines Standards werden Geschäftsregeln als UML-Zusicherungen modelliert. UML-Zusicherungen können beispielsweise einer UML-Klasse, die eine Nachricht oder einen Datentyp repräsentiert, zugeordnet werden. Das folgende Beispiel zeigt eine Zusicherung mit dem Namen “SCH-001”, die der beispielhaften Nachricht 0002 aus dem XÖV-Starterpaket zugeordnet ist:

image_Nachricht0002

Eine Zusicherung besitzt eine Spezifikation, welche die Geschäftsregel in technischer Repräsentation (XPath) formuliert:

image_SCH-001-Spezifikation

Die menschenlesbare Beschreibung der Geschäftsregel wird als Dokumentation der Zusicherung eingetragen:

image_SCH-001-Dokumentation

Der XGenerator überführt die im XÖV-Fachmodell modellierten Geschäftsregeln in eine Schematron-Datei. Darin wird die Geschäftsregel “SCH-001” wie folgt abgebildet:

<!--Abstrakte Regeln-->
<!-- /Data/starterpaket/Nachrichten/Wettbewerbsmeldungen/wettbewerbsmeldungen.anmeldungsbestaetigung.0002 -->
<sch:rule id="rule-SCH-001" abstract="true">
  <sch:assert id="SCH-001"
    test="not(starterpaket:wettbewerbskategorie = 'Schönheit') or&#xA;starts-with(starterpaket:startnummer, 'S')">
    Bei Schönheitswettbewerben muss die Startnummer mit 'S' beginnen.</sch:assert>
</sch:rule>

<!--Konkrete Regeln-->
<sch:rule context="starterpaket:wettbewerbsmeldungen.anmeldungsbestaetigung.0002">
  <sch:extends rule="rule-SCH-001"/>
</sch:rule>

Für die Geschäftsregel wird eine abstrakte Schematron-Regel angelegt, welche die Spezifikation und die Dokumentation der Geschäftsregel im sch:assert-Element enthält.

Darüber hinaus wird eine konkrete Regel mit dem Anwendungskontext der Geschäftsregel erstellt.

Wird eine Geschäftsregel einem Datentyp zugeordnet, der an mehreren Stellen des Standards eingesetzt wird, ermittelt der XGenerator alle relevanten Anwendungskontexte. Beispielsweise wird der Datentyp “Nachrichtenkopf” aus dem XÖV-Starterpaket in den Nachrichten 0001 und 0002 des Starterpakets genutzt:

image_NachrichtenkopfNutzung

Wird der Nachrichtenkopf, wie in der vorherigen Abbildung dargestellt, mit einer Geschäftsregel (z. B. “SCH-002”) versehen, ergibt sich für diese Regel folgendes Bild bei der Übersetzung nach Schematron:

<!--Abstrakte Regeln-->
<!-- /Data/starterpaket/Baukasten/Nachrichtenkopf -->
<sch:rule id="rule-SCH-002" abstract="true">
  <sch:assert id="SCH-002"
  test="not(starterpaket:sender = starterpaket:empfaenger)">
  Sender und Empfänger einer Nachricht müssen sich unterscheiden.</sch:assert>
</sch:rule>

<!--Konkrete Regeln-->
<sch:rule context="starterpaket:wettbewerbsmeldungen.anmeldung.0001//starterpaket:nachrichtenkopf">
  <sch:extends rule="rule-SCH-002"/>
</sch:rule>
<sch:rule context="starterpaket:wettbewerbsmeldungen.anmeldungsbestaetigung.0002//starterpaket:nachrichtenkopf">
  <sch:extends rule="rule-SCH-002"/>
</sch:rule>

Neben der einen abstrakten Schematron-Regel zur Geschäftsregel “SCH-002” ergeben sich zwei konkrete Regeln für die beiden Anwendungskontexte in den Nachrichten 0001 und 0002.

Im Falle komplexerer Modellierungen, die im folgenden Teil beschrieben werden, kann es vorkommen, dass für eine Geschäftsregel eine Vielzahl konkreter Schematron-Regeln mit verschiedenen Anwendungskontexten erstellt werden.

Anleitung zur Modellierung von Geschäftsregeln

Im Allgemeinen können Schematron-Regeln mit den folgenden Bestandteilen aus einem XÖV-Fachmodell generiert werden:

<sch:rule id="..." context="...">
  <sch:assert id="..." test="...">...</sch:assert>
</sch:rule>

Hinweis: Konkret werden zur besseren Übersicht leicht abweichende Regel-Konstrukte genutzt. Diese werden in den folgenden Detailabschnitten erläutert.

Modellierung von Geschäftsregeln im XÖV-Fachmodell

In der folgenden Tabelle werden die in dieser Dokumentation relevanten Konzepte und zugehörige Begrifflichkeiten aufgeführt sowie ihre jeweilige Repräsentation in Schematron und dem XÖV-Fachmodell.

KonzeptSchematronXÖV-Fachmodell

Geschäftsregeln des Standards

sch:schema/sch:pattern*

Gesamtmenge der im Modell spezifizierten Geschäftsregeln

Geschäftsregel

sch:rule mit genau einem sch:assert

UML-Zusicherung

Kennung der Geschäftsregel

sch:rule/@id**, sch:assert/@id

Name der UML-Zusicherung

Dokumentation bzw. Fehlermeldung der Geschäftsregel

sch:assert/text()

Dokumentation der UML-Zusicherung

Spezifikation der Geschäftsregel

sch:assert/@test

Spezifikation der UML-Zusicherung

Anwendungskontext der Geschäftsregel

sch:rule/@context

Zusammenspiel von Fach- und Auswertungskontext der Geschäftsregel (siehe Abschnitt “Kontexte”)

Im Standard genutzter XML Schema-Namensraum

sch:ns

Im Modell spezifizierter Namensraum eines internen oder externen Schema-Pakets

  • Das Schematron-Schema besteht aus einem sch:pattern-Element, welches alle Geschäftsregeln umfasst.

    • Der sch:rule/@id wird “rule-” als Präfix vorangestellt.

Anwendungskontext einer Geschäftsregel

Die Möglichkeiten, im XÖV-Fachmodell den Anwendungskontext einer Geschäftsregel zu bestimmen sind vielfältig und erfordern ein tieferes Verständnis der im Standard modellierten Nachrichtenstrukturen.

Zur Bestimmung des Gesamtkontextes (oder der Kontexte), in dem (oder denen) eine Geschäftsregel Anwendung finden soll, werden im XÖV-Fachmodell für jede Geschäftsregel zwei zusammenspielende Arten von Kontexten bestimmt:

  1. Auswertungskontext

  2. Fachkontext

Auswertungskontext

Die Spezifikation eine Geschäftsregel - abgebildet über die Spezifikation der UML-Zusicherung - stellt einen XPath-Ausdruck dar, der sich gewöhnlich über relative Pfade auf ein oder mehrere XML-Elemente und/oder -Attribute innerhalb der Nachrichtenstrukturen bezieht. Beispiel:

not(elementA/elementB = elementC)

Der Auswertungskontext beschreibt den Kontext, in dem der gegebene XPath-Ausdruck ausgewertet werden soll – im vorherigen Beispiel bspw. den Datentyp, in dem elementA (mit Kindelement elementB) und elementC spezifiziert sind, oder das XML-Element, das im Nachrichtenbaum die Elemente elementA und elementC aufweist. Der Anwendungskontext wird über das “zugesicherte/eingeschränkte Element” der zugrundeliegenden UML-Zusicherung bestimmt:

image_eingeschraenktes-element

Als Auswertungskontext können bestimmt werden: - Nachrichten - Datentypen (anonyme und benannte sowie Basistypen und Typen globaler Elemente) - globale Elemente - XML-Elemente - XML-Attribute

Fachkontext

Der in einer Geschäftsregel bestimmte Auswertungskontext kann in den Nachrichtenstrukturen eines Standards mehrfach auftreten, d. h. mehrfach in derselben Nachricht und auch in mehreren Nachrichten. Aus diesem Grund muss zusätzlich zum Auswertungskontext ein Fachkontext bestimmt werden:

Der Fachkontext legt fest, in welchen Nachrichten bzw. in welchen Teilbereichen der Nachrichtenstrukturen die Geschäftsregeln greifen sollen. Geschäftsregeln mit demselben Fachkontext werden demselben - so genannten - Rule Set zugewiesen, einer UML-KLasse, die mit dem Stereotyp schRuleSet annotiert ist und die entsprechenden UML-Zusicherungen als “innere Elemente” enthält:

image_rule-set

Für jedes Rule Set werden ein oder mehrere Fachkontexte über UML-Abhängigkeitsbeziehungen mit dem Stereotyp schContext spezifiziert.

Als Fachkontext können bestimmt werden:

Nachrichten

Bedeutung: In der Nachricht werden die Geschäftsregeln des betrachteten Rule Sets an allen Stellen geprüft, an denen der Auswertungskontext der einzelnen Regeln auftritt.

Beispiel-Geschäftsregel mit “Nachricht1” als Fachkontext und “elementG” als Auswertungskontext: image Die Geschäftsregel wird in den drei fett markierten Auswertungskontexten geprüft.

Generiertes Schematron: Für die im Modell spezifizierte Geschäftsregel werden drei konkrete Schematron-Regeln mit den folgenden Kontexten (sch:rule/@context) generiert: - Nachricht1/elementA/elementE/elementF/elementG - Nachricht1/elementJ/elementG - Nachricht1/elementG

Datentypen (anonyme und benannte sowie Basistypen und Typen globaler Elemente)

Bedeutung: Die Prüfung der Geschäftsregeln des betrachteten Rule Sets beschränkt sich auf die durch den Datentyp beschriebenen Nachrichtenteilbäume.

Beispiel-Geschäftsregel mit “TypX” als Fachkontext und “elementG” als Auswertungskontext:

image_fachkontext-datentyp

Die Geschäftsregel wird in den drei fett markierten Auswertungskontexten geprüft.

Generiertes Schematron: Für die im Modell spezifizierte Geschäftsregel werden drei konkrete Schematron-Regeln mit den folgenden Kontexten (sch:rule/@context) generiert: - Nachricht1/elementA/elementE/elementF/elementG - Nachricht1/elementJ/elementG - Nachricht2/elementJ/elementL/elementF/elementG

Globale Elemente

Bedeutung: Analog Datentyp.

XML-Elemente

Bedeutung: Die Prüfung der Geschäftsregeln des betrachteten Rule Sets beschränkt sich auf den Nachrichtenteilbaum, der das Element als Wurzel hat.

Beispiel-Geschäftsregel mit “elementF” als Fachkontext und “elementG” als Auswertungskontext:

image_fachkontext-element

Die Geschäftsregel wird in den zwei fett markierten Auswertungskontexten geprüft.

Generiertes Schematron: Für die im Modell spezifizierte Geschäftsregel werden drei konkrete Schematron-Regeln mit den folgenden Kontexten (sch:rule/@context) generiert: - Nachricht1/elementA/elementE/elementF/elementG - Nachricht2/elementJ/elementL/elementF/elementG

XML-Attribute

Bedeutung: Analog XML-Element.

Der Fachkontext kann mit dem Auswertungskontext übereinstimmen.

Aufbau der generierten Schematron-Datei

Alle im XÖV-Fachmodell eines Standards modellierten Geschäftsregeln werden in dieselbe Schematron-Datei generiert. Der Name der Datei ist zusammengesetzt aus dem technischen Namen des Standards (Stereotypeigenschaft xoevStandard/nameTechnisch) und dem Suffix “-schematron”.

In der Datei werden alle im Standard genutzten XML-Namensräume und -Präfixe deklariert, sodass sie in den Spezifikationen der Geschäftsregeln (d. h. den XPath-Ausdrücken in sch:assert/@test) genutzt werden können.

Alle Schematron-Regeln werden in dasselbe Pattern geschrieben.

Für jede im XÖV-Fachmodell spezifizierte Geschäftsregel wird eine abstraktes sch:rule-Element generiert, dessen ID zusammengesetzt ist aus dem Präfix “rule-” und der Kennung der Geschäftsregel, die dem Namen der UML-Zusicherung entspricht. Das sch:rule-Element enthält genau ein sch:assert-Element, dessen ID wiederum der Kennung der Geschäftsregel (ohne Präfix) entspricht. In das Attribut sch:assert/@test wird die Spezifikation der Geschäftsregel eingetragen, welche der Spezifikation der UML-Zusicherung entspricht. Die Dokumentation bzw. Fehlermeldung der Geschäftsregel wird als Wert des Elements sch:assert selbst angegeben:

<sch:rule id="rule-Beispielkennung der Geschäftsregel A" abstract="true">
  <sch:assert id="Beispielkennung der Geschäftsregel A" test="...">...</sch:assert>
</sch:rule>
<sch:rule id="rule-Beispielkennung der Geschäftsregel B" abstract="true">
  <sch:assert id="Beispielkennung der Geschäftsregel B" test="...">...</sch:assert>
</sch:rule>

Für jeden Anwendungskontext, in dem die Geschäftsregel geprüft werden soll – berechnet aus dem Auswertungskontext und dem Fachkontext der Regel – wird darüber hinaus ein konkretes sch:rule-Element erstellt, welches die zugehörige abstrakte Regel erweitert:

<sch:rule context="Beispiel Anwendungskontext 1 der Geschäftsregel A">
  <sch:extends rule="rule-Beispielkennung der Geschäftsregel A"/>
</sch:rule>
<sch:rule context="Beispiel Anwendungskontext 2 der Geschäftsregel A">
  <sch:extends rule="rule-Beispielkennung der Geschäftsregel A"/>
</sch:rule>
...

Falls mehrere Geschäftsregeln im gleichen Anwendungskontext geprüft werden, werden ihre zugehörigen abstrakten Schematron-Regeln in der entsprechenden konkreten Schematron-Regel gemeinsam aufgeführt:

<sch:rule context="Beispiel Anwendungskontext">
  <sch:extends rule="rule-Beispielkennung der Geschäftsregel A"/>
  <sch:extends rule="rule-Beispielkennung der Geschäftsregel B"/>
  ...
</sch:rule>
...

Die XPath-Ausdrücke in den sch:rule/@context-Attributen werden mittels des Ausdrucks “//” optimiert, sofern dies den Anwendungskontext der Gesschäftsregeln nicht verändert. Auf diese Weise kann die Anzahl der zu generieren Schematron-Regeln deutlich reduziert werden.

Vereinfachte Modellierungsmuster

Impliziter Fachkontext

Eine UML-Zusicherung muss nicht zwingend in einem Rule Set spezifiziert werden, sondern kann auch direkt der UML-Klasse eines Datentyps, globalen Elements oder einer Nachricht zugeordnet werden. Die Klasse gilt in diesem Fall implizit als Fachkontext der Schematron-Regel.

Impliziter Auswertungskontext

Wenn eine UML-Zusicherung direkt der UML-Klasse eines Datentyps, globalen Elements oder einer Nachricht zugeordnet ist und diese Klasse ebenso den Auswertungskontext der UML-Zusicherung darstellt, muss für die Zusicherung kein “zugesichertes/eingeschränktes Element” angegeben werden. In diesem Fall sind also der Fachkontext und der Auswertungskontext identisch.

Namens- und Entwurfsregeln

  • Ein Schematron Rule Set (UML-Klasse mit dem Stereotyp schRuleSet) hat keine UML-Eigenschaften, sondern ausschließlich UML-Zusicherungen.

  • Ein Schematron Rule Set (UML-Klasse mit dem Stereotyp schRuleSet) muss mindestens einen Fachkontext haben (von der UML-Klasse ausgehende UML-Abhängigkeitsbeziehung mit dem Stereotyp schContext).

  • Eine Schematron Fachkontext-Beziehung (UML-Abhängigkeitsbeziehung mit dem Stereotyp schContext) muss bei einem Rule Set (UML-Klasse mit dem Stereotyp schRuleSet) beginnen.

  • Eine Schematron Fachkontext-Beziehung (UML-Abhängigkeitsbeziehung mit dem Stereotyp schContext) muss bei einer UML-Klasse oder -Eigenschaft enden.

  • Eine Geschäftsregel (UML-Zusicherung) muss eine Spezifikation besitzen.

  • Ein in einer Geschäftsregel (UML-Zusicherung) eingeschränktes Element muss vom Fachkontext der Regel aus erreichbar sein.