Dieser Ausdruck ruft den Wert eines Attributs aus einem Regelobjekt ab.
Der Ausdruck reference kann optional einen untergeordneten Ausdruck enthalten, mit dem das Regelobjekt bestimmt wird, aus dem das Attribut abgerufen werden soll. Wird dieser untergeordnete Ausdruck nicht angegeben, wird das Regelobjekt verwendet, das den Ausdruck reference enthält.
Der Ausdruck reference ist für die Erstellung von wiederverwendbaren und aussagekräftigen Regeln von wesentlicher Bedeutung. Sie können einen Ausdruck reference für ein benanntes Attribut anstelle eines Ausdrucks "any" verwenden. Der CER-Regelwerkvalidierer gibt einen Fehler aus, wenn der Typ des Attributs, auf das verwiesen wird, nicht mit dem vom Ausdruck erforderten Typ übereinstimmt.
<?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> <!-- A simple reference to another attribute on this rule class --> <Attribute name="ageNextYear"> <type> <javaclass name="Number"/> </type> <derivation> <arithmetic operation="+"> <!-- This <reference> has no child element, so the rule object is taken to be "this rule object"--> <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"> <!-- All the people in the household --> <Attribute name="members"> <type> <javaclass name="List"> <ruleclass name="Person"/> </javaclass> </type> <derivation> <specified/> </derivation> </Attribute> <!-- One special person is designated as the "head" of the household --> <Attribute name="headOfHousehold"> <type> <ruleclass name="Person"/> </type> <derivation> <specified/> </derivation> </Attribute> <!-- A reference to an attribute on a different rule object: name OF favoritePet OF headOfHousehold In a programming language, this might be written back-to-front using a dereferencing "dot" notation like this: headOfHousehold.favoritePet.name --> <Attribute name="nameOfHeadOfHouseholdsFavoritePet"> <type> <javaclass name="String"/> </type> <derivation> <!-- The name... --> <reference attribute="name"> <!-- ...of the favorite pet... --> <reference attribute="favoritePet"> <!-- ...of the head of household. --> <!-- The inner-most reference must refer to an attribute on this rule object. --> <reference attribute="headOfHousehold"/> </reference> </reference> </derivation> </Attribute> <!-- Identifies the dog owners in the household by checking which people have a favorite pet which is a dog. --> <Attribute name="dogOwners"> <type> <javaclass name="List"> <ruleclass name="Person"/> </javaclass> </type> <derivation> <filter> <list> <!-- simple reference to the members of the household --> <reference attribute="members"/> </list> <listitemexpression> <equals> <String value="Dog"/> <!-- A reference to an attribute on an item in the list. --> <reference attribute="species"> <reference attribute="favoritePet"> <current/> </reference> </reference> </equals> </listitemexpression> </filter> </derivation> </Attribute> </Class> </RuleSet>