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>