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>