reference

Permet d'extraire la valeur d'un attribut à partir d'un objet règle.

L'expression reference peut contenir une expression enfant qui détermine l'objet règle à partir duquel l'attribut peut être obtenu ; en cas d'omission, l'objet règle contenant l'élément reference sera utilisé.

L'expression reference constitue un élément clé de la création de règles réutilisables et compréhensibles. Vous pouvez utiliser une référence à un attribut nommé à la place d'une expression. Le valideur du jeu de règles CER renverra une erreur si le type des attributs référencés ne correspond pas au type requis par l'expression.

<?xml version="1.0" encoding="UTF-8"?>
<RuleSet name="Example_reference"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation=
"http://www.curamsoftware.com/CreoleRulesSchema.xsd">
  <Class name="Person">

    <Attribute name="name">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="age">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <!-- Une référence simple à un autre
         attribut de cette classe de règles -->
    <Attribute name="ageNextYear">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <arithmetic operation="+">
          <!-- Cette <référence> ne possède aucun élément enfant,
               ainsi l'objet règle est utilisé pour être "cet objet
 règle"-->
          <reference attribute="age"/>
          <Number value="1"/>
        </arithmetic>
      </derivation>
    </Attribute>

    <Attribute name="favoritePet">
      <type>
        <ruleclass name="Pet"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

  </Class>

  <Class name="Pet">

    <Attribute name="name">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="species">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

  </Class>

  <Class name="Household">

    <!-- Tous les membres du foyer -->
    <Attribute name="members">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <!-- Une personne en particulier est désignée comme
         le "chef" de famille -->
    <Attribute name="headOfHousehold">
      <type>
        <ruleclass name="Person"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <!-- Une référence à un attribut sur un
         objet règle différent :

    name OF favoritePet OF headOfHousehold

    Dans un langage de programmation, cet élément peut être
    rédigé à l'envers à l'aide d'une notation par points
    de déréférencement comme suit :

    headOfHousehold.favoritePet.name

    -->
    <Attribute name="nameOfHeadOfHouseholdsFavoritePet">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>

        <!-- Le nom... -->
        <reference attribute="name">

          <!-- ...of the favorite pet... -->
          <reference attribute="favoritePet">

            <!-- ...du chef de famille. -->
            <!-- La référence interne doit faire référence à
                   un attribut de cet objet règle.  -->
            <reference attribute="headOfHousehold"/>
          </reference>
        </reference>
      </derivation>
    </Attribute>


    <!-- Identifie les propriétaires du chien dans le foyer
         en déterminant quelles sont les personnes dont l'animal favori
         est un chien. -->
    <Attribute name="dogOwners">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <filter>
          <list>
            <!-- référence simple aux membres
                 du foyer -->
            <reference attribute="members"/>
          </list>
          <listitemexpression>
            <equals>
              <String value="Dog"/>
              <!-- Une référence à un attribut d'un élément
                   de la liste. -->

              <reference attribute="species">
                <reference attribute="favoritePet">
                  <current/>
                </reference>
              </reference>

            </equals>

          </listitemexpression>
        </filter>
      </derivation>
    </Attribute>

  </Class>

</RuleSet>