속성의 파생 사항을 표시하는 마커 표현식을 구체적인 서브클래스(또는 수퍼클래스 중 하나)에 지정해야 합니다.
규칙 클래스에 있는 하나 이상의 속성이 abstract로 표시된 경우 CER 규칙 세트 유효성 검증기는 클래스 자체를 abstract="true"로 표시하도록 하며 규칙 클래스를 모든 create 표현식에서 사용하지 못하도록 합니다.
<?xml version="1.0" encoding="UTF-8"?> <RuleSet name="Example_abstract" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://www.curamsoftware.com/CreoleRulesSchema.xsd"> <!-- 모든 유형의 혜택에 대한 기본 클래스입니다. 모든 구체적 서브클래스에는 자체 계산된 "name" 및 "isEligible"이 있습니다. --> <Class name="Benefit" abstract="true"> <Initialization> <!-- 혜택 적격성을 심사받고 있는 사람입니다. --> <Attribute name="person"> <type> <ruleclass name="Person"/> </type> </Attribute> </Initialization> <!-- 이 유형의 혜택 이름 --> <Attribute name="name"> <type> <javaclass name="String"/> </type> <derivation> <abstract/> </derivation> </Attribute> <!-- 개인이 이 혜택에 적격인지 여부입니다. --> <Attribute name="isEligible"> <type> <javaclass name="Boolean"/> </type> <derivation> <abstract/> </derivation> </Attribute> </Class> <!-- Benefit의 구체적인 서브클래스입니다. 상속된 추상 속성의 구체적인 파생 사항을 포함합니다. --> <Class name="MedicalBenefit" extends="Benefit"> <Attribute name="name"> <type> <javaclass name="String"/> </type> <derivation> <String value="Medical Benefit"/> </derivation> </Attribute> <Attribute name="isEligible"> <type> <javaclass name="Boolean"/> </type> <derivation> <all> <fixedlist> <listof> <javaclass name="Boolean"/> </listof> <members> <!-- NB person 속성은 Benefit에서 상속합니다. --> <reference attribute="isPoor"> <reference attribute="person"/> </reference> <reference attribute="isSick"> <reference attribute="person"/> </reference> </members> </fixedlist> </all> </derivation> </Attribute> </Class> <!-- Benefit의 또 다른 구체적 서브클래스입니다. 상속된 추상 속성의 다른 구체적 파생 사항을 포함합니다 --> <Class name="NeedyBenefit" extends="Benefit"> <Attribute name="name"> <type> <javaclass name="String"/> </type> <derivation> <String value="Medical Benefit"/> </derivation> </Attribute> <Attribute name="isEligible"> <type> <javaclass name="Boolean"/> </type> <derivation> <all> <fixedlist> <listof> <javaclass name="Boolean"/> </listof> <members> <reference attribute="isPoor"> <reference attribute="person"/> </reference> <any> <fixedlist> <listof> <javaclass name="Boolean"/> </listof> <members> <reference attribute="isHungry"> <reference attribute="person"/> </reference> <reference attribute="isDeprived"> <reference attribute="person"/> </reference> </members> </fixedlist> </any> </members> </fixedlist> </all> </derivation> </Attribute> </Class> <Class name="Person"> <Attribute name="isPoor"> <type> <javaclass name="Boolean"/> </type> <derivation> <specified/> </derivation> </Attribute> <Attribute name="isSick"> <type> <javaclass name="Boolean"/> </type> <derivation> <specified/> </derivation> </Attribute> <Attribute name="isHungry"> <type> <javaclass name="Boolean"/> </type> <derivation> <specified/> </derivation> </Attribute> <Attribute name="isDeprived"> <type> <javaclass name="Boolean"/> </type> <derivation> <specified/> </derivation> </Attribute> <!-- 개인이 평가되고 있는 모든 혜택의 목록입니다. --> <Attribute name="allBenefits"> <type> <javaclass name="List"> <ruleclass name="Benefit"/> </javaclass> </type> <derivation> <fixedlist> <listof> <ruleclass name="Benefit"/> </listof> <members> <!-- 구체적 규칙 클래스의 인스턴스 작성 --> <create ruleclass="MedicalBenefit"> <this/> </create> <create ruleclass="NeedyBenefit"> <this/> </create> </members> </fixedlist> </derivation> </Attribute> <!-- 이 개인이 적격인 혜택입니다. 이 목록은 추상 규칙 클래스 "Benefit"의 목록이지만 각각의 구체적 인스턴스가 고유한 방식으로 적격성을 판별합니다. --> <Attribute name="eligibleBenefits"> <type> <javaclass name="List"> <ruleclass name="Benefit"/> </javaclass> </type> <derivation> <filter> <list> <reference attribute="allBenefits"/> </list> <listitemexpression> <reference attribute="isEligible"> <current/> </reference> </listitemexpression> </filter> </derivation> </Attribute> </Class> </RuleSet>