reference

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>