Le principe des règles métier

Le principe des règles métier ne tire pas son origine du schéma Schematron. Ce dernier sert seulement à reformuler des règles métier dans le langage approprié, afin que les documents XML puissent être vérifiés, en se reférant à ces mêmes règles. Une règle métier consiste en toute condition que l'on peut formuler dans un document XML. L'une des règles métier citée dans l'instance de l'Arche énonce:

  • Les animaux carnivores ne doivent pas être placés dans le même compartiment que les herbivores.

Schematron applique des règles (éléments <rule>) qui peuvent regrouper plusieurs règles métier. Il se peut également que plusieurs règles Schematron soient nécessaires pour définir une seule règle métier. Une règle Schematron détermine, en fonction d'un contexte donné, les critères selon lesquels un document doit être vérifié. 

Définir le nœud de contexte ne signifie pas qu'il faille obligatoirement qualifier un nœud unique. Il peut s'agir d'un node-set (par exemple tous les éléments avec un nom précis). Les critères à vérifier seront définis grâce à des tests qui sont assignés à une règle. Si un test échoue, un message d'erreur fixé par avance, apparaîtra. Les nœuds de contexte de la règle ci-dessus sont tous les animaux carnivores de l'instance de l'arche. Le critère à vérifier est par conséquent qu'aucun de ces animaux n'ait été placé dans le même compartiment qu'un herbivore. Les variations suivantes de la règle métier montrent que les règles Schématron peuvent décrire la même règle métier avec différents noeuds de contexte:

  • Des animaux carnivores et herbivores ne doivent pas être placés dans le même compartiment.
  • Un compartiment ne doit abriter que des animaux carnivores ou alors que des herbivores.

Les règles ci-dessus auraient alors un nœud de contexte différents, à savoir les herbivores ou les compartiments. Il s'ensuit une formulation différente des tests correspondants.  

 

Comment définir une règle métier?
Voilà pour la théorie. L'application des règles métier dans Schematron est désormais pour vous un jeu d'enfants. L'élément <rule> comporte la règle; l'attribut context fixe le noeud de contexte. L'élément <rule> comporte également les tests ou les conditions auxquelles les règles sont soumises.

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
   <ns uri="http://www.schematron.info/arche" prefix="arc"/>
   <pattern>
      <rule context="arc:animal[@carnivore='oui']">                     (1)
         <report test="parent::*/arc:animal[@carnivore='non']">
          Il y a des carnivores et des herbivores dans un même
          compartiment. Les animaux ne sont pas des ressources alimentaires!
         </report>
      </rule>
   </pattern>
</schema>
(1) Dans l'instance, la règle sera appliquée à tous les éléments <animal>, dont les attributs carnivore ont la valeur 'oui'.

 L'application d'une règle à un élément signifie que tous les tests qui ont été définis par cette règle pour cet élément seront effectués. 

 

Remarque à l'attention des experts XSLT:

Le principe des règles métier est le même que celui de templates XSLT avec l'attribut match. Lors de la mise en œuvre de la transformation de Schematron en XSLT, toutes les règles templates seront transposées en interne et les valeurs correspondantes de l'attribut context seront adoptées en tant que attributs match. La transformation de notre exemple donnerait ceci:

<xsl:template match="arc:animal[@carnivore='oui']">
     […]
     <!-- Les tests seront réalisés en tant qu'éléments xsl:if -->
     […]
</xsl:template>

La sélection des nœuds de contexte peut contenir les conditions sous la forme de prédicats par le biais d'une expression XPath. Dans l'exemple ci-dessus, la vérification portait sur la présence d'un carnivore et d'un herbivore dans un même compartiment. Cette condition pourrait désormais être élargie à l'aide de prédicats supplémentaires. Par exemple, on pourrait vérifier si des mâles carnivores et herbivores cohabitent dans la même chambre.

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <ns uri="http://www.schematron.info/arche" prefix="arc"/>
  <pattern>
    <rule context="arc:animal[@carnivore='oui'] [@sexe='male']">     (1)
      <report test="parent::*/arc:animal[@carnivore='non']">
        Il y a des carnivores et des herbivores dans un même compartiment.
        Les animaux ne sont pas des ressources alimentaires!
      </report>
    </rule>
  </pattern>
</schema>
(1) Dans l'attribut context, l'expression XPath a été complétée par un prédicat supplémentaire. Désormais, la règle ne sera applicable qu'aux animaux mâles carnivores. En clair, un test doit seulement vérifier si un herbivore vit dans le même compartiment. Cependant, ce type de présélection n'est pas impératif. Lors d'un test, les mêmes critères peuvent aussi être interrogés. Une présélection peut minimiser considérablement le nombre de règles à parcourir, car l'attribut context détermine à quel nœud la règle sera appliquée, ce qui influence les performances du processus de vérification de manière positive. De surcroît, cela simplifie les expressions XPath des tests qui en découlent.

 

<< précédent suivant >>

 

 

 


Copyright © dpunkt.verlag GmbH 2011
Vous pouvez imprimer cette version en ligne pour un usage privé. Par ailleurs, ce chapitre du livre "Schematron - Effiziente Business Rules für XML-Dokumente" est soumis aux mêmes clauses prévues pour la version papier : L'intégralité de l'oeuvre est protégée par les droits d'auteurs. Tous droits réservés y compris la copie, la traduction, la reproduction sur microfilm, tout comme l'enregistrement et le traitement dans des systèmes électroniques.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, téléphone + 49 (0)6221-14830, fax + 49 (0)6221-148399, hallo(at)dpunkt.de