Dieser Ausdruck ruft eine neue Instanz einer Regelklasse im Hauptspeicher der Sitzung ab. Alle vom Regelobjekt benötigten Initialisierungswerte müssen als untergeordnete Elemente des Ausdrucks create angegeben werden.
Seit Cúram Version 6 kann der Ausdruck create verwendet werden, um eine neue Instanz einer Regelklasse aus einem anderen Regelwerk zu erstellen, indem für das optionale XML-Attribut ruleset ein Wert definiert wird.
Seit Cúram Version 6 besteht eine Auswahlmöglichkeit für die Syntax, die bei der Übergabe von Werten an ein erstelltes Regelobjekt verwendet wird:
CER unterstützt weiterhin einen Block von Attributen, die in einem Element Initialization definiert sind. Diese Syntax ist gut für Attribute geeignet, die immer festgelegt sein müssen und keine Standardimplementierung besitzen.
Seit Cúram Version 6 unterstützt CER auch willkürliche Attribute, deren Wert mit einem Element specify überschrieben werden kann, in dem die festzulegenden Attribute angegeben sind und das den zu verwendenden Wert enthält. Diese Syntax kann bei Attributen hilfreich sein, die nur manchmal festgelegt werden und/oder eine Standardimplementierung besitzen.
Seit Cúram Version 6 werden Regelobjekte innerhalb der Sitzung "in einem Pool zusammengefasst". Durch diesen Pool können identische Anforderungen für die Erstellung eines Regelobjekts mit einem einzigen Regelobjekt erfüllt werden, was die Hauptspeicherbelegung und (durch die Verhinderung identischer Berechnungen) auch die CPU-Belastung verringert. Zwei Anforderungen für die Erstellung eines Regelobjekts sind dann identisch, wenn sie dieselbe Regelklasse anfordern und die Werte aller initialisierten und angegebenen Attribute gleich sind.
Falls im folgenden Beispiel die geschäftliche Telefonnummer einer Person mit der privaten Telefonnummer einer Person identisch ist, wird für beide Nummern ein einziges Regelobjekt verwendet und der abgeleitete Wert für isOutOfThisArea folglich nur ein einziges Mal berechnet. Bei unterschiedlichen geschäftlichen und privaten Nummern werden zwei Regelobjekte erstellt.
<?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"> <!-- Phone number details as gathered in evidence --> <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> <!-- Create PhoneNumber rule objects and place them in a list --> <Attribute name="phoneNumbers"> <type> <javaclass name="List"> <ruleclass name="PhoneNumber"/> </javaclass> </type> <derivation> <fixedlist> <listof> <ruleclass name="PhoneNumber"/> </listof> <members> <!-- Phone Number for the home details. --> <create ruleclass="PhoneNumber"> <!-- The value for PhoneNumber.owner --> <this/> <!-- The value for PhoneNumber.number --> <reference attribute="homePhoneNumber"/> <specify attribute="areaCode"> <!-- The value for PhoneNumber.areaCode --> <reference attribute="homePhoneAreaCode"/> </specify> </create> <!-- Phone Number for the work details. If a person's work phone number is identical to the person's home phone number (i.e. the area code and number are the same), then this <create> expression will return the same rule object as the rule object returned by the <create> expression above. If the phone numbers are not identical, then two different rule objects will be returned.--> <create ruleclass="PhoneNumber"> <this/> <reference attribute="workPhoneNumber"/> <specify attribute="areaCode"> <reference attribute="workPhoneAreaCode"/> </specify> </create> </members> </fixedlist> </derivation> </Attribute> </Class> <Class name="PhoneNumber"> <Initialization> <!-- The values for these attributes must be passed, in order, by any <create> expression. --> <Attribute name="owner"> <type> <ruleclass name="Person"/> </type> </Attribute> <Attribute name="number"> <type> <javaclass name="Number"/> </type> </Attribute> </Initialization> <!-- The value for this attribute may be passed by a <specify> element within a <create> expression, which will override the default derivation here. --> <Attribute name="areaCode"> <type> <javaclass name="Number"/> </type> <derivation> <!-- Default implementation, used if the <create> expression does not <specify> a value for this attribute. --> <Number value="123"/> </derivation> </Attribute> <!-- For a pooled rule object, this derived value will only be calculated once. For example, if a person's work phone number is identical to the person's home phone number, then the same rule object will be used for both home and work phone numbers, and the "isOutOfThisArea" value for this single rule object will be calculated only once. --> <Attribute name="isOutOfThisArea"> <type> <javaclass name="Boolean"/> </type> <derivation> <not> <equals> <reference attribute="areaCode"/> <!-- The area code for the agency's area --> <Number value="123"/> </equals> </not> </derivation> </Attribute> </Class> </RuleSet>