Références Schematron

(Extrait du livre publié en langue allemande "Schematron - Effiziente Business Rules für XML-Dokumente", chapitre 10.)

 

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

 

A

<active>

Cet élément active exactement un patron (pattern) dans une phase. L'activation se fait par l'intermédiaire de l'attribut pattern.

Éléments parent: <phase>

Éléments enfant: <span>, <emph>, <dir>

Attribut:

pattern Cet attribut fait référence à un pattern.
Valeur: ID-REF
La valeur transmise doit être conforme à l'ID d'un pattern.

Exemple: voir <phase>

 

 

<assert>

Cet élément définit une hypothèse qui doit être exacte, afin de garantir la validité Schematron. Le nœud de contexte de l'hypothèse sera défini par la règle qui le contient. Une expression XPath sera indiquée dans l'attribut test et appliquée au nœud de contexte. On en attend une valeur booléenne en retour. Si l'hyphotèse est avérée (lorsque la valeur true apparaît), aucune erreur ne sera générée. Sinon, un message d'erreur figurant à l'intérieur de cet élément sera émis. Le message d'erreur est conçu de façon variable selon le contexte grâce aux éléments enfants <value-of> et <name>. On peut également faire référence à une proposition de solution à l'aide de l'attribut diagnostics de manière complémentaire ou alternative.

Éléments parent: <rule>

Éléments enfant: <dir>, <emph>, <span>, <value-of>, <name>

Attribut:

test

L'attribut obligatoire contient une expression XPath.
Valeur: expression XPath
Il est permis d'utiliser des expressions XPath absolues et relatives.

diagnostics Cet attribut renvoie aux propositions de solution. En fonction de l'implémentation, les solutions possibles référencées sont affichées en plus du message d'erreur.
Valeur: ID-REF
La valeur doit correspondre à l'ID d'une solution proposée.
subject Sans cet attribut, un message d'erreur activé est toujours assigné au nœud de contexte. Un nœud divergent peut être défini à l'aide de l'attribut subject.
Valeur: expression XPath
Il est permis d'utiliser des expressions relatives et absolues.
role Cet attribut indique par le biais d'un nom, une bref description de la fonction à l'intérieur d'un pattern. Ce nom peut également être utilisé lors d'un tri ou d'une recherche.
Valeur: Nom utilisé pour la description de messages d'erreur ou de règles.
flag Grâce à un attribut flag, on peut atteindre d'autres groupements d'erreurs, d'hypothèses ou de règles. On assigne un flag à toutes erreurs, hypothèses ou règles ayant la même valeur flag. La valeur booléenne adopte la valeur true, dès qu'un des éléments attribués à un flag déclenche une erreur, c'est-à-dire lorsqu'une hypothèse n'est pas avérée ou qu'une des règles déclenche une erreur.
Valeur: flag-name
nom XML – chaque élément <assert>, <report> ou <rule> ayant le même nom flag est affecté au même flag.
see On peut indiquer ici un URI /URL, ce qui permettra d'obtenir des informations complémentaires à propos de l'élément correspondant. Une implémentation peut réaliser ceci, en transformant, par exemple, une proposition de solution en un lien, qui mènera à l'URI indiqué.
Valeur: xs:anyURI
Un URI /URL qui mène à des informations de fond.
fpi Cette fonction attribue une valeur ID indépendante du système à l'ensemble d'un schéma, à un patron, à une phase, à une règle, à une erreur, à une hypothèse ou bien à une proposition de solution.
Valeur: ID
Formal public identifier.
icon Cet attribut permet un regroupement visuellement des éléments. Grâce au renvoi à un fichier video, des symboles sont affectés aux éléments en questions dont la cohérence peut être affichée lors de l'implémentation. On peut alors savoir s'il s'agit d'une erreur grave (fatale) ou légère ou bien s'il s'agit d'un avertissement.
Valeur: Il peut s'agir ici d'une indication de sentier absolu ou relatif menant à l'utilisation de fichiers graphiques.
id Cette fonction attribue une valeur ID à un élément. Celle-ci sera utilisée afin de référencer l'élément. La valeur ID doit être explicitement affectée à un élément et ne sera en aucun cas utilisée en tant que ID par un autre élément du schéma.
Valeur: ID
Un identifiant sans équivoque de cet élément.

 

Exemple:

<rule context="arc:animal">
  <assert test="count(parent::*/arc:animal[arc:espece=current()/arc:espece]) = 2">
  Il y a dans ce compartiment moins ou plus de deux animaux de cette
  espece.</assert>
  <assert test="count(parent::*/arc:animal[arc:espece=current()/arc:espece][@sexe='male']) = 1">
  Un couple doit toujours être composé d'un mâle et d'une femelle.</assert>
</rule>

Etant donné que les éléments <assert> représentent une hypothèse que les animaux placés dans un même compartiment et appartenant à la même espèce doivent être exactement au nombre de deux. Lors du deuxième test, il sera indiqué qu'un des animaux au sein du couple sera un mâle, de sorte que le second devra être une femelle.

retour en haut

 

 

D

<diagnostic>

Cet élément définit une seule proposition de solution. L'indication résulte du contenu textuel de l'élément. 

Éléments parent: <diagnostics>

Éléments enfant: <dir>, <emph>, <span>, <value-of>

Attribut:

id voir élément <assert>
see voir élément <assert>
icon voir élément <assert>
fpi voir élément <assert>

 

Exemple:

<pattern>
  <rule context="arc:animal">
    <report test="count(parent::*/arc:animal[arc:espece=current()/arc:animal]) &gt; 2"
    diagnostics="nombre">Il y a dans ce compartiment plus de deux animaux d'une même espèce.
    </report>
  </rule>
</pattern>
<diagnostics>
  <diagnostic id="nombre">Noé, tu dois exclure autant d'animaux que nécessaire,
  afin qu'il n'en reste plus que deux d'une même espèce dans ce compartiment.</diagnostic>
</diagnostics>

L'élément <report> fait référence à un élément <diagnostic>. Ici un erreur est declénché, la proposition de solution est présentée. La description d'erreur peut être: "Il y a dans ce compartiment plus de deux animaux d'une même espèce". Proposition de solution: "Noé, tu dois exclure autant d'animaux que nécessaire, afin qu'il n'en reste plus que deux d'une même espèce dans ce compartiment".

 

<diagnostics>

Cet élément Top-Level forme un conteneur pour propositions de solution. Chaque élément diagnostic représente une solution proposée à laquelle on peut faire référence lors d'un test (<assert> ou <report>).

Éléments parent: <schema>, <pattern>

Éléments enfant: <include>, <diagnostic>

 

 

<dir>

Cet élément indique le sens d'écriture du texte.

Éléments parent: <p>, <diagnostic>, <active>, <title>, <assert>, <report>

Éléments enfant:

Attribut:

value Cet attribut indique le sens d'écriture.
Valeur:
ltr - direction d'écriture: de la gauche vers la droite (default)
rtl - direction d'écriture: de la droite vers la gauche
retour en haut

 

 

 

E

<emph>

Cet élément met en valeur des passages du texte par des moyens typographiques. Ceux-ci sont laissés aux choix de l'utilisateur et dépendent de l'implémentation utilisée.

Éléments parent: <p>, <diagnostic>, <active>, <assert>, <report>

Éléments enfant: –

 

 

<extends>

Cet élément est utilisé en cas de règle abstraite. Pour ce faire, l'attribut rule est utilisé.

Éléments parent: <rule>

Éléments enfant: –

Attribut:

rule Cet attribut obligatoire fait référence à une règle abstraite grâce l'ID en question.
Valeur: ID-REF
La valeur doit correspondre à l'ID d'une règle abstraite.

Exemple:

<rule context="arc:animal">
  <extends rule="poids"/>
</rule>
<rule abstract="true" id="poids">
  <report test="parent::*/arch:animal/arch:poids &lt; (arc:poids div 10)">
  Noé, l'animal est trop lourd pour ceux qui partagent son compartiment! Il pourrait en piétiner un.</report>
</rule>
retour en haut

 

 

 

I

<include>

Avec cet élément, on peut intégrer des éléments Schematron stockés dans des documents XML externes dans un schéma Schematron. En fonction du contexte, on peut imbriquer par exemple un élément diagnostic, un pattern, une phase, une règle ou un test (<assert> ou <report>). On fait référence à un fichier Schema-Schematron à l'aide de l'attribut href. Ce fichier Schematron doit contenir l'élément encastré en tant qu'élément racine.

Éléments parent: <schema>, <diagnostics>, <pattern>, <phase>, <rule>

Éléments enfant:

Attribut:

href L'attribut href obligatoire indique le chemin du fichier Schematron à imbriquer.
Valeur: xs:anyURI
Il peut s'agir d'une indication de chemin relative ou absolue.

Exemple:

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <ns uri="http://www.schematron.info/arche" prefix="arc"/>
  <pattern>
    <rule context="arc:animal">
      <report test="count(parent::*/arc:animal[arc:espece=current()/arc:espece]) &gt; 2"
      diagnostics="nombre">Il y a plus de deux animaux d'un même espèce dans ce compartiment.
      </report>
    </rule>
  </pattern>
  <include href="diagnostics.xml"/>
</schema>

Le schéma contient un élément <include> qui renvoie au fichier ci-dessous:

<diagnostics xmlns="http://purl.oclc.org/dsdl/schematron">
  <diagnostic id="nombre">Noé, tu dois exclure autant d'animaux que nécessaire, afin qu'il 
  n'en reste plus que deux d'une même espèce.</diagnostic>
</diagnostics>

Le schéma ci-dessous est identique à celui ci-dessus. L'élément <include> est remplacé par l'élément <diagnostics> – élément racine du fichier diagnostics.xml.

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <ns uri="http://www.schematron.info/arche" prefix="arc"/>
  <pattern>
    <rule context="arc:animal">
      <report test="count(parent::*/arc:animal[arc:espece=current()/arc:espece]) &gt; 2"
      diagnostics="nombre">Il y a plus de deux animaux d'une même espèce dans ce compartiment.</report>
    </rule>
  </pattern>
  <diagnostics>
    <diagnostic id="nombre">Noé, tu dois en exclure autant que nécessaire,  
    afin qu'il n'en reste plus deux d'une même espèce.
    </diagnostic>
  </diagnostics>
</schema>
retour en haut

 

 

 

L

<let>

Cet élément définit une variable. Ce faisant, l'attribut name indique le nom d'une variable et grâce à une expression XPath l'attribut value indique la valeur d'une variable. A l'aide du noeud de contexte, l'expression XPath sera évaluée à l'intérieur d'une règle. En même temps la règle fixe également le champs d'application de la variable. La structure de la syntaxe de dépend du langage de questionnement. On donne à la variable un nom, précédé d'un signe $. L'appel de la variable par son nom name est le suivant: $name.

Éléments parent: <schema>, <pattern>, <phase>, <rule>

Éléments enfant:

Attribut:

name Cet attribut définit le nom de la variable.
Valeur: QName
Le nom de la variable doit correspondre au nom de la convention XML. La variable peut être utilisée dans les expressions XPath grâce à l'expression $nomVariable.
value L'expression XPath donnée ci-contre définit la valeur des variables. A cet effet, l'expression est évaluée en fonction de la définition de la variable.
Valeur: expression XPath
Il est permis d'utiliser des expressions XPath relatives et absolues.

Exemple:

[...]
<chambre>
  <animal sexe="femelle" carnivore="oui">
    <espece>Lion</espece>
    <poids>200</poids>
    <age>30</age>
  </animal>
</chambre>
[...]
<rule context="arc:animal">
  <let name="especeAnimal" value="arc:espece"/>
  <report test="count(parent::*/arc:animal[arc:espece=$especeAnimal]) &gt; 2">
  Il y a plus de deux animaux de cette espèce dans ce compartiment.</report>
  <assert test="not(count(parent::*/arc:animal[arc:espece=$especeAnimal]) &lt; 2)">
  Il n'y a aucun couple de cette espèce dans ce ce compartiement.</assert>
</rule>

On a défini la variable especeAnimal pour l'élément <rule>. Elle contient le contenu de l'élément arc:espece du noeud de contexte correspondant (arc:animal). La variable peut donc être utilisée, précédée du signe $ dans chaque expression XPath à l'interieur de la règle (count(parent::*/arc:animal[arc:espece=$especeAnimal]) &gt; 2).

retour en haut

 

 

 

N

<name>

Cet élément est, sans autre attribut, une abréviation de l'élément <value-of>, qui sera transmis dans l'attribut select de l'expression XPath name(). Il distribue le nom d'élément du noeud de contexte et sera utilisé pour configurer des erreurs (<assert> ou <report>) ou pour proposer des solutions variables au noeud de contexte.

Éléments parent: <assert>, <report>

Éléments enfant:

Attribut:

path Lorsque l'élément <name> avec cet attribut apparait dans une expression XPath, le nom de contexte ne sera pas distribué mais bien le nom du noeud auquel l'expression XPath fait référence. L'élément <name> <name path="expression XPath"/> fonctionne de la même façon que <value-of select="expression XPath/name()"/>.
Valeur: expression XPath.
Il est permis d'utiliser des expressions relatives et absolues.

Exemple:

[...]
<compartiment>
  <animal sexe="femelle" carnivore="non">
    <espece>Zebre</espece>
    <poids>200</poids>
    <age >40</age>
  </animal>
  <animal sexe="male" carnivore="non">
    <espece>Zebre</espece>
    <poids>250</poids>
    <age>40</age>
  </animal>
  <animal sexe="male" carnivore="non">
    <espece>Zebre</espece>
    <poids>280</poids>
    <age>40</age>
  </animal>
</compartiment>
<compartiment>
  <animal sexe="femelle" carnivore="oui">
    <espece>Lion</espece>
    <poids>200</poids>
    <age>30</age>
  </animal>
</compartiment>
[...]
<rule context="arc:animal">
  <let name="especeAnimal" value="arc:espece"/>
  <report test="count(parent::*/arc:animal[arc:espece=$especeAnimal]) &gt; 2">
  Dans cet élément <name path="parent::*"/> il y a plus de deux éléments <name/>
  de cette espèce.</report>
  <assert test="not(count(parent::*/arc:animal[arc:animal=$especeAnimal]) &lt; 2)">
  Dans cet élément <name path="parent::*"/> il n'y aucun autre élément <name/> de cette espèce.</assert>
</rule>

Le message résultant de la première erreur est le suivant: »Il y a plus de deux éléments animal pour cette espèce dans cet élément compartiment.« Le deuxième message d'erreur énonce: »Il n'y a aucun autre élément animal pour cette espèce dans cet élément compartiment.«

 

 

<ns>

Cet élément définit un espace de noms et le préfixe à utiliser. Si un élément de l'instance XML qui n'existe pas dans l'espace de noms Null doit être adressé, on doit définir un espace de nom avec ledit élément.

Éléments parent: <schema>

Éléments enfant:

Attribut:

uri Un espace de noms URI est indiqué ci-contre, pour lequel un préfixe doit être défini.
Valeur: xs:anyURI
Indicateur explicite d'un espace de noms.
prefix Ici, on indique un préfixe pouvant être utilisé dans toutes les expressions XPath du schéma. Il faut noter qu' il n'y a pas d'espace de noms Default dans XPath. Il faut donc attribuer un préfixe à chaque espace de noms. On attribue aux éléments sans préfixe un espace de noms Null.
Valeur: xs:string
Suite de caractères utilisés comme préfixe.

Exemple:

<arche xmlns="http://www.schematron.info/arche">
  […]
</arche>
<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <ns uri="http://www.schematron.info/arche" prefix="arc"/>
  <pattern>
    <rule context="arc:compartiment">
      […]
    </rule>
  </pattern>
</schema>

On utilise l'espace de noms "http://www.schematron.info/arche" dans l'instance. C'est pourquoi, on définit cet espace de noms avec l'élément <ns> pour le schéma, ainsi qu'un préfixe. On peut dès lors utiliser le préfixe ou l'espace de noms dans l'expression XPath de l'attribut context.

retour en haut

 

 

 

P

<p>

Grâce à cet élément, on peut afficher un contenu sous la forme de paragraphes. Cela se révèle pertinent, lorsqu'un rapport principal d'erreur est généré. Une implémentation intéractive comme celle d'oXygen-Editor ne soutient pas cet élément.

Éléments parent: <schema>, <pattern>, <phase>

Éléments enfant: <span>, <emph>, <dir>

Attribut:

icon voir élément <assert>
id voir élément <assert>
class voir élément <span>

Exemple:

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <title>Schematron pour Noé</title>
  <p>Ce Schematron doit aider Noé à placer les animaux correspondants dans le bon compartiment.</p>
  […]
</schema>

Le contenu des éléments <p> et <title> peuvent être complétés par l'implémentation.

 

 

<param>

Cet élément sert à remettre un paramètre d'un pattern abstrait. La valeur du paramètre peut être indiquée par l'attribut value. Contrairement à une variable, une expression partielle XPath sera remise ici qui ne sera dissoute que lors de l'appel du paramètre. Un paramètre à l'intérieur d'une expression XPath sera appelé grâce au signe clé $ accompagné du nom du paramètre. Ce dernier sera défini par le biais de l'attribut name.

Éléments parent: <pattern>

Éléments enfant:

Attribut:

name voir élément <let>
value Le String indique ici la valeur du paramètre et représente une expression partielle XPath. L'expression ne sera evaluée que dans le contexte de l'appel.
Valeur: String
Lors de l'appel du paramètre le String indiqué ici doit générer une expression XPath correcte dans le contexte respectif.

Exemple:

<pattern id="noe" is-a="patternAbstrait">
  <param name="count"
         value="parent::*/arc:animal[arc:espece=current()/arc:espece]"/>
</pattern>
<pattern id="patternAbstrait" abstract="true">
  <rule context="arc:animal">
      <report test="count($count) &gt; 2">
      Il y a plus de deux animaux de cette espèce dans ce compartiment.</report>
      <assert test="not(count($count) &lt; 2)">
      Il n'y a aucun couple de cette espece dans ce compartiment.</assert>
  </rule>
</pattern>

Par l'intermédiaire de l'attribut is-a, le pattern noe appelle le pattern ayant l'ID patternAbstrait. A cette occasion, le paramètre $count sera remis. Ce dernier comprend l'expression XPath parent::*/arc:animal[arc:espece=current()/arc:espece]. Le pattern abstrait avec l'ID patternAbstrait sera exécuté.

 

 

<pattern>

Cet élément regroupe les règles Schematron. Chaque noeud du document XML à vérifier ne sera jamais examiné sous la loupe de plusieurs règles qui pourraient convenir, et qui se trouvent dans un pattern. Si plusieurs règles d'un pattern correspondent à un noeud, alors celui-ci sera examiné sous la loupe des premières règles seulement. La structure pour l'activation de certaines règles s'applique également (voir <active>). Ici les pattern entier seront activés ici, et non pas les règles seules.

Éléments parent: <schema>

Éléments enfant: <include>, <title>, <p>, <let>, <param>, <rule>

Attribut:

see voir élément <assert>
fpi voir élément <assert>
icon voir élément <assert>
id voir élément <assert>
abstract Un pattern abstrait peut être appelé par d'autres pattern grâce à l'attribut is-a et il peut lui être remis ce paramètre. Un pattern nécessite une ID.
Valeur:
true Cette valeur rend un pattern abstrait.
false Il s'agit d'un pattern normal, non abstrait.
 
is-a Grâce à cet attribut, un pattern abstrait est appelé. La valeur de l'attribut fait référence à un pattern abstrait.
Valeur: ID-REF
La valeur doit correspondre à l'ID d'un pattern abstrait. Le pattern avec l'ID correspondante sera appelé.

Exemple:

<chambre>
  <animal sexe="femelle" carnivore="non">
    <espece>Elephant</espece>
    <poids>900</poids>
    <age>150</age>
  </animal>
  <animal sexe="male" carnivore="non">
    <espece>Elephant</espece>
    <poids>1200</poids>
    <age>162</age>
  </animal>
  <animal sexe="femelle" carnivore="non">
    <espece>Zebre</espece>
    <poids>100</poids>
    <age>40</age>
  </animal>
</chambre>
<chambre>
  <animal sexe="male" carnivore="oui">
    <espece>Lion</espece>
    <poids>280</poids>
    <age>40</age>
  </animal>
  <animal sexe="femelle" carnivore="oui">
    <espece>Lion</espece>
    <poids>130</poids>
    <age>16</age>
  </animal>
</chambre>
<pattern>
  <rule context="arc:animal[@carnivore='oui']">
    <report test="parent::*/arc:animal/arc:poids &lt; (arc:poids div 2)">
    Noé, ce carnivore est trop fort (lourd) pour celui qui 
    partage sa chambre. Il pourrait l'utiliser comme ressource alimentaire.
    </report>
  </rule>
  <rule context="arc:animal">
    <report test="parent::*/arc:animal/arc:poids &lt; (arc:poids div 10)">
    Noé, ce carnivore est trop fort pour ceux qui partagent son compartiment! Il pourrait en pétiner un.</report>
  </rule>
</pattern>

La première règle pose la question de savoir si l'animal carnivore est plus lourd qu'un autre animal dans le même compartiment. Les autres animaux peuvent être au maximal dix fois plus lourd que leurs compagnons de chambre. La deuxième règle vérifie chaque élément <animal>. Etant donné que la première règle s'applique aux éléments <animal> qui sont carnivores, la deuxième règle n'interroge que les non-carnivores.

 

 

<phase>

Cet élément définit une phase. Certains pattern peuvent être activés par des éléments <active>. L'implémentation permet alors à l'utilisateur de choisir une phase. Le document est alors examiné à l'aide des règles dans les pattern activés.

Éléments parent: <schema>

Éléments enfant: <let>, <p>, <include>, <active>

Attribut:

id voir élément <assert>
icon voir élément <assert>
fpi voir élément <assert>
see voir élément <assert>

Exemple:

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <phase id="tous">
    <active pattern="arche"/>
    <active pattern="noe"/>
  </phase>
  <phase id="compartiment">
    <active pattern="arche"/>
  </phase>
  <phase id="couples">
    <active pattern="noe"/>
  </phase>
  <pattern id="arche"> […] </pattern>
  <pattern id="noah"> […] </pattern>
</schema>

L'implémentation offre aux utilisateurs la possibilité de faire valider l'instance d'après les phases tous, compartiment et couples. Lors de la phase tous, les patterns arche et noe seront activés, lors de la phase compartiment seulement le pattern arche et lors de la phase couples, seulement le pattern noe. Une phase activant tous les pattern sera en règle générale, offerte par l'implémentation sans phase tous.

retour en haut

 

 

 

R

<report>

Cet élément contient un test d'erreur. L'attribut test indique une expression XPath appliquée sur le noeud de contexte et dont on attend une valeur boléenne. Si la valeur false est retournée, aucun message d'erreur ne sera généré. Sinon, le message d'erreur qui se trouve dans cet élément sera affiché.                                                                                

Éléments parent: <rule>

Éléments enfant: <dir>, <emph>, <span>, <value-of>, <name>

Attribut:

test voir élément <assert>
diagnostics voir élément <assert>
flag voir élément <assert>
fpi voir élément <assert>
icon voir élément <assert>
id voir élément <assert>
role voir élément <assert>
see voir élément <assert>
subject voir élément <assert>

Exemple:

<rule context="arc:animal">
  <report test="count(//arc:animal[arc:espece=current()/arc:espece]) &gt; 2">
  Il y a plus de deux animaux de cette espèce dans l'arche.</report>
  <report test="count(parent::*/arc:animal[arc:espece=current()/arc:espece]) &lt; 2">
  Il y a moins de deux animaux dans ce compartiment.</report>
</rule>

Le premier test <report> vérifie qu'il n'y ait pas plus de deux animaux d'une même espèce au sein de l'arche. À l'inverse, le second test s'assure que pas moins de deux animaux de cette espèce n'aient été placés dans un même compartiment.

 

 

<rule>

Cet élément définit une règle Schematron. Si dans un document XML, un noeud correspond à l'expression XPath indiquée dans l'attribut context, tous les tests (<assert> et <report>) seront effectués avec ce noeud comme noeud de contexte. Une exception est à noter: une règle mentionnée précédemment dans un même pattern et qui correspond déjà au même noeud. Dans ce cas, aucune autre règle du pattern actuel ne sera exécuté pour ce noeud. 

Éléments parent: <pattern>

Éléments enfant: <include>, <let>, <assert>, <extends>, <report>

Attributs:

abstract On peut transformer une règle Schematron en une règle abstraite. Une règle abstraite n'a aucun contexte et peut être appelée par d'autres règles grâce à l'élément <extends>. Une règle abstraite nécessite une ID.
Valeur:
true Une règle Schematron devient une règle abstraite à l'aide de cette valeur.
false La règle mentionnée est concrète et non abstraite.
 
id voir élément <assert>
icon voir élément <assert>
fpi voir élément <assert>
see voir élément <assert>
context Ici, le noeud de contexte d'une règle sera défini à l'aide d'une expression XPath. Chaque règle qui n'est pas abstraite, nécessite un noeud de contexte qui sera utilisé à l'intérieur de cette règle dans toutes les expressions XPath.
Valeur: expression XPath
Il est permis d'utiliser des expressions relatives et absolues.
flag voir élément <assert>
role voir élément <assert>
subject voir élément <assert>

Exemple:

<chargement>
  <chambre>
    <animal sexe="femelle" carnivore="oui">
      <espece>Lion</espece>
      <poids>200</poids>
      <age>30</age>
    </animal>
    <animal sexe="male" carnivore="non">
      <espece>Zebre</espece>
      <poids>280</poids>
      <age>40</age>
    </animal>
  </chambre>
</chargement>
<rule context="arc:compartiment[arc:animal[@carnivore='non']]">
  <report test="arc:animal[@carnivore='oui']">
  Des carnivores et des herbivores se trouvent dans le même compartiment. 
  Les animaux ne sont pas une ressource alimentaire!</report>
</rule>

Tous les tests d'une règle sont testés à l'aide des noeuds de contexte correspondants. Le noeud de contexte pour cette règle est un noeud de l'instance qui correspond à l'expression XPath arc:chambre[arc:animal[@carnivore='non']]. Il doit s'agir d'un élément <chambre>, qui contient un élément <animal> ayant la valeur d'attribut non dans l'attribut carnivore. Les tests ne s' appliquent qu'aux premièrs éléments <chambre> dans l'instance exécutée. Cependant, le test <report> ne s'applique qu'au premier élément <chambre> – ainsi, l'utilisateur ne remarque pas la vérification du deuxième élément <chambre>.

retour en haut

 

 

 

S

<schema>

<schema> est l'élément racine d'un schéma Schematron. Il regroupe le schéma dans son entier et contient tous les pattern, toutes les propositions de solution, ainsi que toutes les phases.

Éléments parent:

Éléments enfant: <diagnostics>, <include>, <let>, <ns>, <p>, <pattern>, <phase>, <title>

Attributs:

defaultPhase Grâce à cet attribut, on peut déterminer une phase default pour un schéma Schematron. Si cet attribut est supporté, l'implémentation utilise la phase référencée ici, par Default.
Valeur: ID-REF
La valeur doit correspondre à un ID appartenant à une phase utilisée dans le schéma.
fpi voir élément <assert>
icon voir élément <assert>
id voir élément <assert>
queryBindingCet attribut sert à d'intégrer un langage de requête à l'intérieur d'un schéma. Pour une intégration réussie, le langage de requête approprié doit être supporté par l'implémentation. Standard oblige, certains noms sont réservés pour les langages les plus importants.
Valeur: (Ils ne doivent pas être obligatoirement supportés)
stx intègre le langage de requête STX (Streaming Transformations for XML).
xslt intègre XSLT 1.0 (eXtensible Stylesheet Language Transformation)
xslt1.1 intègre XSLT 1.1
xslt2 intègre XSLT 2.0 (XPath 2.0 compris)
exslt intègre EXSLT
xpath intègre XPath (XML Path Language)
xpath2 intègre XPath 2.0
xquery intègre le langage de requête XQuery (XML Query Language)
D'autres langages de requête peuvent être supportés en fonction de l'implémentation. 
schemaVersion Cet attribut indique la version Schematron en question. Son utilisation dépend de l'implémentation.
Valeur: non definie
Les valeurs de cet attribut ne sont pas explicitement déterminées, et dépendent donc de l'implémentation utilisées.
see voir élément <assert>

 

 

 

<span>

Cet élément en ligne peut faire ressortir des passages du texte. Lorsque cet élément est supporté, l'implémentation souligne les passages du texte correspondants à l'aide de moyens typographiques. Les moyens typographiques utilisés sont définis par l'attribut class.

Éléments parent: <p>, <diagnostic>, <active>, <assert>, <report>

Éléments enfant:

Attribut:

class Cet attribut désigne les différents caractères typographiques utilisés. Il n'y a pas d'instruction pour la valeur des attributs. Ceux-ci sont fixés par l'implémentation.
Valeur: classe
mot clé pour l'implémentation.
retour en haut

 

 

 

T

<title>

Lorsque cet élément est supporté, le contenu sera représenté sous la forme d'un titre, situé à la place correspondante. Il en ressort qu'un support est judicieux, seulement lors d'une implémentation qui génère un rapport d'erreur central. Une implémentation interactive, comme celle de l'éditeur de textes oXygen, ne supporte pas un tel élément. 

Élément parent: <schema>, <pattern>

Élément enfant: <dir>, <p>

retour en haut

 

 

 

V

<value-of>

Cet élément est à mettre au même rang que l'élément XSLT <xsl:value-of>. En utilisant l'attribut select, une expression XPath est remise, celle-ci est analysée et sortie par le noeud de contexte. Cet élément est utilisé dans le but de créer des message d'erreur (<assert> ou <report>) ou des propositions de solutions variables selon le noeud de contexte ou le document à agencer. Dans un cas simple, le contenu d'un élément peut être sorti de l'instance.

Éléments parent: <diagnostic>, <assert>, <report>

Éléments enfant:

Attribut:

select L'expression XPath donnée ici définit le contenu à insérer dans l'élément <value-of>. Par exemple, les fonctions XSLT peuvent aussi être utilisées. Cela dépend du langage de requête intégré (voir queryBinding).
Valeur: expression XPath
Il est permis d'utiliser des expressions relatives et absolues.

Exemple:

<compartiment>
  <animal sexe="femelle" carnivore="non">
    <espece>Zebre</espece>
    <poids>200</poids>
    <age>40</age>
  </animal>
  <animal sexe="male" carnivore="non">
    <espece>Zebre</espece>
    <poids>250</poids>
    <age>40</age>
  </animal>
  <animal sexe="male" carnivore="non">
    <espece>Zebre</espece>
    <poids>280</poids>
    <age>40</age>
  </animal>
</compartiment>
<rule context="arc:animal">
  <report test="count (parent::*/arc:animal[arc:espece=current()/arc:espece]) &gt; 2">
  Il y a plus de deux animaux de cette espèce (<value-of select="arc:espece"/>) dans cet compartiment.
  </report>
</rule>

Chaque élément <value-of> à l'intérieur des tests sort le string Zebra.

retour en haut 

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