세션의 메모리에 있는 규칙 클래스의 새 인스턴스를 가져옵니다. 규칙 오브젝트에 필요한 초기화 값은 create 표현식의 하위 요소로 지정되어야 합니다.
Cúram V6부터 선택적 ruleset XML 속성 값을 설정하여 서로 다른 규칙 세트에서 규칙 클래스의 새 인스턴스를 작성하는 데 create를 사용할 수 있습니다.
Cúram V6부터 작성된 규칙 오브젝트에 값을 전달할 때 다음과 같이 구문을 선택할 수 있습니다.
CER이 Initialization 요소에 정의된 속성 블록을 계속 지원합니다. 이 구문은 항상 설정되어야 하고 기본 구현이 없는 속성에 유용하게 사용할 수 있습니다.
Cúram V6부터 CER에서는 설정할 속성을 지명하고 사용할 값을 포함하는 specify 요소를 사용하여 임의의 속성 값도 대체할 수 있습니다. 이 구문은 가끔 설정되고/되거나 기본 구현이 있는 속성에 유용하게 사용할 수 있습니다.
Cúram V6부터 작성된 규칙 오브젝트는 세션에 "풀"됩니다. 이 풀을 사용하면 동일한 요청을 통해 단일 규칙 오브젝트로 제공되는 규칙 오브젝트를 작성할 수 있습니다. 그러면 메모리 사용이 절약되고 동일한 계산이 수행되지 않도록 하여 CPU 로드를 저하시킬 수 있습니다. 동일한 규칙 클래스를 요청하고 초기화되어 지정된 모든 속성의 값이 동일한 경우 규칙 오브젝트를 작성하는 두 개의 요청은 동일하다고 간주됩니다.
아래 예에서 개인의 직장 전화번호가 개인의 집 전화번호와 같은 경우 각 번호에 대해 단일 규칙 오브젝트가 사용되므로, isOutOfThisArea에 대한 파생 값은 한 번만 계산됩니다. 그렇지 않고 직장과 집 전화번호가 다른 경우 두 개의 서로 다른 규칙 오브젝트가 작성됩니다.
<?xml version="1.0" encoding="UTF-8"?> <RuleSet name="Example_create" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://www.curamsoftware.com/CreoleRulesSchema.xsd"> <Class name="Person"> <!-- 증거로 수집된 전화번호 세부사항 --> <Attribute name="homePhoneAreaCode"> <type> <javaclass name="Number"/> </type> <derivation> <specified/> </derivation> </Attribute> <Attribute name="homePhoneNumber"> <type> <javaclass name="Number"/> </type> <derivation> <specified/> </derivation> </Attribute> <Attribute name="workPhoneAreaCode"> <type> <javaclass name="Number"/> </type> <derivation> <specified/> </derivation> </Attribute> <Attribute name="workPhoneNumber"> <type> <javaclass name="Number"/> </type> <derivation> <specified/> </derivation> </Attribute> <!-- PhoneNumber 규칙 오브젝트를 작성하여 목록에 두기 --> <Attribute name="phoneNumbers"> <type> <javaclass name="List"> <ruleclass name="PhoneNumber"/> </javaclass> </type> <derivation> <fixedlist> <listof> <ruleclass name="PhoneNumber"/> </listof> <members> <!-- 집 세부사항용 전화번호입니다. --> <create ruleclass="PhoneNumber"> <!-- PhoneNumber.owner의 값 --> <this/> <!-- PhoneNumber.number의 값 --> <reference attribute="homePhoneNumber"/> <specify attribute="areaCode"> <!-- PhoneNumber.areaCode의 값 --> <reference attribute="homePhoneAreaCode"/> </specify> </create> <!-- 직장 세부사항용 전화번호입니다. 개인의 직장 전화번호가 개인의 집 전화번호와 동일한 경우(즉, 지역 코드와 번호가 같음) 이 <create> 표현식은 위의 <create> 표현식이 리턴한 규칙 오브젝트와 동일한 규칙 오브젝트를 리턴합니다. 전화번호가 동일하지 않으면 두 개의 서로 다른 규칙 오브젝트가 리턴됩니다.--> <create ruleclass="PhoneNumber"> <this/> <reference attribute="workPhoneNumber"/> <specify attribute="areaCode"> <reference attribute="workPhoneAreaCode"/> </specify> </create> </members> </fixedlist> </derivation> </Attribute> </Class> <Class name="PhoneNumber"> <Initialization> <!-- 이러한 속성의 값은 <create> 표현식에 지정된 순서대로 전달되어야 합니다. --> <Attribute name="owner"> <type> <ruleclass name="Person"/> </type> </Attribute> <Attribute name="number"> <type> <javaclass name="Number"/> </type> </Attribute> </Initialization> <!-- 이 속성의 값은 <create> 표현식의 <specify> 요소로 전달될 수 있습니다. 그러면 여기의 기본 파생 사항을 대체합니다. --> <Attribute name="areaCode"> <type> <javaclass name="Number"/> </type> <derivation> <!-- <create> 표현식이 이 속성의 값을 <specify>하지 않는 경우 사용하는 기본 구현입니다. --> <Number value="123"/> </derivation> </Attribute> <!-- 풀링된 규칙 오브젝트의 경우 이 파생된 값은 한 번만 계산됩니다. 예를 들어, 개인의 직장 전화번호가 개인의 집 전화번호와 동일한 경우 집 전화번호와 직장 전화번호 둘 다에 동일한 규칙 오브젝트를 사용하고 이 단일 규칙 오브젝트의 "isOutOfThisArea" 값이 한 번만 계산됩니다. --> <Attribute name="isOutOfThisArea"> <type> <javaclass name="Boolean"/> </type> <derivation> <not> <equals> <reference attribute="areaCode"/> <!-- 기관이 있는 지역의 지역 코드입니다. --> <Number value="123"/> </equals> </not> </derivation> </Attribute> </Class> </RuleSet>