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>