reference

규칙 오브젝트에서 속성의 값을 검색합니다.

reference 표현식은 속성을 가져올 규칙 오브젝트를 판별하는 하위 표현식을 선택적으로 포함할 수 있습니다. 생략된 경우 reference를 포함하는 규칙 오브젝트를 사용합니다.

reference 표현식은 재사용 가능하며 이해하기 쉬운 규칙을 작성하는 데 주요합니다. 표현식 대신 지명된 속성의 reference를 사용할 수 있습니다. 참조된 속성의 유형이 표현식에 필요한 유형과 일치하지 않으면 CER 규칙 세트 유효성 검증기가 오류를 발행합니다.

<?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>

    <!-- 이 규칙 클래스의 다른 속성에 대한
         단순 참조 -->
    <Attribute name="ageNextYear">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <arithmetic operation="+">
          <!-- 이 <reference>에는 하위 요소가 없으므로
               규칙 오브젝트가 "이 규칙 오브젝트"로
 사용됩니다.-->
          <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">

    <!-- 가정의 모든 사람 -->
    <Attribute name="members">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <!-- 한 명의 특별한 사람이 가정의
         "세대주"로 지정됩니다. -->
    <Attribute name="headOfHousehold">
      <type>
        <ruleclass name="Person"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <!-- 다음은 다른 규칙 오브젝트에 있는 속성의
         참조입니다.

    name OF favoritePet OF headOfHousehold

    프로그래밍 언어에서는 다음과 같이
    구분 "점" 표기법을 사용하여 역으로
    쓸 수 있습니다.

    headOfHousehold.favoritePet.name

    -->
    <Attribute name="nameOfHeadOfHouseholdsFavoritePet">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>

        <!-- 이름... -->
        <reference attribute="name">

          <!-- ...가장 좋아하는 애완동물의... -->
          <reference attribute="favoritePet">

            <!-- ...가정의 세대주의. -->
            <!-- 가장 안쪽에 있는 참조는 이 규칙 오브젝트의
                   속성을 나타내야 합니다. -->
            <reference attribute="headOfHousehold"/>
          </reference>
        </reference>
      </derivation>
    </Attribute>


    <!-- 가장 좋아하는 애완동물인 개가 있는
         사람을 확인하여 가정에서 개를 소유한 사람을
         식별합니다. -->
    <Attribute name="dogOwners">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <filter>
          <list>
            <!-- 가정 구성원에 대한
                 단순 참조 -->
            <reference attribute="members"/>
          </list>
          <listitemexpression>
            <equals>
              <String value="Dog"/>
              <!-- 목록에 있는 항목에 대한 속성
                   참조입니다. -->

              <reference attribute="species">
                <reference attribute="favoritePet">
                  <current/>
                </reference>
              </reference>

            </equals>

          </listitemexpression>
        </filter>
      </derivation>
    </Attribute>

  </Class>

</RuleSet>