하위 표현식을 반복적으로 호출하여 타임라인(시간 경과에 따라 변경되는 데이터 처리 참조)을 조합하십시오. 일반적으로 timelineoperation은 intervalvalue와 함께 사용되며, 이 두 표현식을 함께 사용하면 다른 표현식이 타임라인의 값을 기본 값으로 간주하여 이 값을 조작한 다음 결과 데이터를 타임라인에 다시 조합할 수 있습니다.
다음은 평가 시 timelineoperation이 동작하는 방식에 대한 간략한 설명입니다.
위에 설명된 동작은 보면 내부 표현식이 타임라인과 관련된 처리의 일부임을 몰라도 된다는 의미입니다. 또한 입력 타임라인이 값을 변경한 날짜에 대해서만 표현식이 호출되므로 처리가 효율적입니다.
<?xml version="1.0" encoding="UTF-8"?> <RuleSet name="Example_timelineoperation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://www.curamsoftware.com/CreoleRulesSchema.xsd"> <Class name="Person"> <!-- 개인이 생존해 있는 동안에는 true, 생년월일 전에는 false, 사망년월일(있는 경우) 이후에도 false --> <Attribute name="isAliveTimeline"> <type> <javaclass name="curam.creole.value.Timeline"> <javaclass name="Boolean"/> </javaclass> </type> <derivation> <specified/> </derivation> </Attribute> <!-- 개인이 어떤 시점에 소유한 자산입니다. 각 자산의 가치는 시간이 경과함에 따라 변할 수 있습니다. --> <Attribute name="ownedAssets"> <type> <javaclass name="List"> <ruleclass name="Asset"/> </javaclass> </type> <derivation> <specified/> </derivation> </Attribute> <!-- 개인(또는 개인이 사망한 경우 개인의 부동산)이 소유한 자산의 총 가치입니다. --> <Attribute name="totalAssetValueTimeline"> <type> <javaclass name="curam.creole.value.Timeline"> <javaclass name="Number"/> </javaclass> </type> <derivation> <!-- 소유한 모든 자산의 총 가치입니다. 각 자산의 가치는 시간이 경과함에 따라 변할 수 있습니다. --> <!-- <timelineoperation>은 이 안에서 수행되는 일련의 <sum> 계산에서 타임라인을 작성합니다. <sum>을 각각 실행하면 특정한 날의 총계가 계산됩니다. <timelineoperation>은 이러한 일별 총계를 숫자로 이루어진 타임라인으로 조합합니다. --> <timelineoperation> <sum> <!-- 소유한 각 자산에 대한 셀 수 있는 값 타임라인을 가져오십시오. --> <dynamiclist> <list> <reference attribute="ownedAssets"/> </list> <listitemexpression> <!-- <sum>이 타임라인 목록이 아닌 숫자 목록을 조작한다고 여기도록 countableValueTimeline이 리턴한 타임라인을 랩핑하십시오. --> <intervalvalue> <reference attribute="countableValueTimeline"> <current/> </reference> </intervalvalue> </listitemexpression> </dynamiclist> </sum> </timelineoperation> </derivation> </Attribute> <!-- 혜택을 받을 자격이 중단되는 지점입니다. 이 가변 임계값을 초과하는 자산이 있는 개인은 혜택을 받을 자격이 없습니다. --> <Attribute name="maximumAssetsThreshold"> <type> <javaclass name="curam.creole.value.Timeline"> <javaclass name="Number"/> </javaclass> </type> <derivation> <!-- 실제 구현 시, 이 값은 시간이 경과함에 따라 변화합니다(예: 요금표와 달라짐). 그러나 예를 들기 위해 이 구현에서는 중첩된 <intervalvalue> 없이 <timelineoperation>을 사용하여 값이 항상 상수인 타임라인을 작성합니다. <timelineoperation>을 사용하면 규칙 세트 개발 초기의 더미 구현에서 유용한 경우가 많습니다. --> <timelineoperation> <!-- 하드 코딩된 forever-constant 값 - 규칙 개발 중 나중에 가변 값으로 대체됩니다. --> <Number value="10000"/> </timelineoperation> </derivation> </Attribute> <!-- (특정한 날에) 개인이 생존해 있으며 개인의 총 자산 가치가 최대 자산 임계값을 초과하지 않는 경우 개인은 혜택을 받을 자격이 있습니다. --> <Attribute name="qualifiesForBenefitTimeline"> <type> <javaclass name="curam.creole.value.Timeline"> <javaclass name="Boolean"/> </javaclass> </type> <derivation> <timelineoperation> <all> <fixedlist> <listof> <javaclass name="Boolean"/> </listof> <members> <!-- 타임라인이 기본값인 경우 타임라인을 조작합니다. --> <intervalvalue> <reference attribute="isAliveTimeline"/> </intervalvalue> <compare comparison="<="> <intervalvalue> <reference attribute="totalAssetValueTimeline"/> </intervalvalue> <intervalvalue> <reference attribute="maximumAssetsThreshold"/> </intervalvalue> </compare> </members> </fixedlist> </all> </timelineoperation> </derivation> </Attribute> </Class> <!-- 개인이 어떤 시점에 소유한 자산입니다. 각 자산은 매입한 후 매도할 수 있습니다. 자산의 가치는 시간이 경과함에 따라 변화합니다. 자산은 개인이 소유하기 전이나 후에도 가치가 있습니다. 그러나 _countable_ 값은 소유권 기간이 지나면 0입니다. --> <Class name="Asset"> <Attribute name="boughtDate"> <type> <javaclass name="curam.util.type.Date"/> </type> <derivation> <specified/> </derivation> </Attribute> <!-- 자산이 매도되지 않은 경우 널입니다. --> <Attribute name="soldDate"> <type> <javaclass name="curam.util.type.Date"/> </type> <derivation> <specified/> </derivation> </Attribute> <Attribute name="isOwnedTimeline"> <type> <javaclass name="curam.creole.value.Timeline"> <javaclass name="Boolean"/> </javaclass> </type> <derivation> <existencetimeline> <intervaltype> <javaclass name="Boolean"/> </intervaltype> <intervalfromdate> <reference attribute="boughtDate"/> </intervalfromdate> <intervaltodate> <reference attribute="soldDate"/> </intervaltodate> <preExistenceValue> <false/> </preExistenceValue> <existenceValue> <true/> </existenceValue> <postExistenceValue> <false/> </postExistenceValue> </existencetimeline> </derivation> </Attribute> <!-- 당시에 개인이 소유했는지 여부에 무관한 자산의 가변 가치 --> <Attribute name="valueTimeline"> <type> <javaclass name="curam.creole.value.Timeline"> <javaclass name="Number"/> </javaclass> </type> <derivation> <specified/> </derivation> </Attribute> <!-- 개인의 자산으로 가산되는 가치입니다. 즉, 소유하는 기간 동안의 자산 가치입니다. 소유하지 않는 경우 0입니다. --> <Attribute name="countableValueTimeline"> <type> <javaclass name="curam.creole.value.Timeline"> <javaclass name="Number"/> </javaclass> </type> <derivation> <!-- 각 <choose> 호출의 결과를 타임라인에 다시 조합 --> <timelineoperation> <choose> <type> <javaclass name="Number"/> </type> <when> <condition> <!-- 상수 소유권의 각 간격을 조작 --> <intervalvalue> <reference attribute="isOwnedTimeline"/> </intervalvalue> </condition> <value> <!-- 특정 날짜에 자산이 소유된 경우 해당 날짜에 셀 수 있는 값이 해당 가치가 됩니다. --> <intervalvalue> <reference attribute="valueTimeline"/> </intervalvalue> </value> </when> <otherwise> <value> <!-- 특정 날짜에 자산이 소유된 경우 해당 날짜에 셀 수 있는 값은 0입니다. --> <Number value="0"/> </value> </otherwise> </choose> </timelineoperation> </derivation> </Attribute> </Class> </RuleSet>
<!-- 개인의 자산으로 가산되는 가치입니다. 즉, 소유하는 기간 동안의 자산 가치입니다. 소유하지 않는 경우 0입니다. --> <Attribute name="countableValueTimeline"> <type> <javaclass name="curam.creole.value.Timeline"> <javaclass name="Number"/> </javaclass> </type> <derivation> <!-- 각 <choose> 호출의 결과를 타임라인에 다시 조합 --> <timelineoperation> <choose> <type> <javaclass name="Number"/> </type> <when> <condition> <!-- 상수 소유권의 각 간격을 조작 --> <!-- **** <intervalvalue>에 리턴된 타임라인을 랩핑하는 것을 잊음 **** --> <reference attribute="isOwnedTimeline"/> </condition> <value> <!-- 특정 날짜에 자산이 소유된 경우 해당 날짜에 셀 수 있는 값이 해당 가치가 됩니다. --> <intervalvalue> <reference attribute="valueTimeline"/> </intervalvalue> </value> </when> <otherwise> <value> <!-- 특정 날짜에 자산이 소유된 경우 해당 날짜에 셀 수 있는 값은 0입니다. --> <Number value="0"/> </value> </otherwise> </choose> </timelineoperation> </derivation> </Attribute>
오류 ... Example_timelineoperation.xml(276, 19) AbstractRuleItem:INVALID_CHILD_RETURN_TYPE: 하위 'condition'이 'curam.creole.value.Timeline<? extends java.lang.Boolean>'을 리턴했지만 이 항목에는 'java.lang.Boolean'이 필요합니다.