Recupera el valor de un atributo de un objeto de regla.
La expresión reference puede contener opcionalmente una expresión hijo que determina el objeto de regla a partir de la cual se puede obtener el atributo; si se omite, se utilizará el objeto de regla que contiene reference.
La expresión reference es la clave para crear reglas que son reutilizables y comprensibles. Puede utilizar reference en un atributo con nombre en lugar de cualquier expresión. El validador de conjunto de reglas CER emitirá un error si el tipo de atributo de referencia no coincide con el tipo requerido por la expresión.
<?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> <!-- Una simple referencia a otro atributo en esta clase de regla --> <Attribute name="ageNextYear"> <type> <javaclass name="Number"/> </type> <derivation> <arithmetic operation="+"> <!-- Esta <reference> no tiene elementos hijo, de modo que se toma el objeto de regla para que sea "este objeto de regla"--> <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"> <!-- Todas las personas de la unidad familiar --> <Attribute name="members"> <type> <javaclass name="List"> <ruleclass name="Person"/> </javaclass> </type> <derivation> <specified/> </derivation> </Attribute> <!-- Se designa a una persona especial como el "cabeza" de familia --> <Attribute name="headOfHousehold"> <type> <ruleclass name="Person"/> </type> <derivation> <specified/> </derivation> </Attribute> <!-- Una referencia a un atributo en un objeto de regla diferente: name OF favoritePet OF headOfHousehold En un lenguaje de programación, esto se puede escribir al revés utilizando una notación de "puntos" de desreferencia como la siguiente: headOfHousehold.favoritePet.name --> <Attribute name="nameOfHeadOfHouseholdsFavoritePet"> <type> <javaclass name="String"/> </type> <derivation> <!-- El nombre... --> <reference attribute="name"> <!-- ...de la mascota favorita... --> <reference attribute="favoritePet"> <!-- ...del cabeza de familia. --> <!-- La referencia más interna debe hacer referencia a un atributo en este objeto de regla.--> <reference attribute="headOfHousehold"/> </reference> </reference> </derivation> </Attribute> <!-- Identifica a los propietarios de perros de la unidad familiar comprobando qué personas tienen una mascota favorita que sea un perro. --> <Attribute name="dogOwners"> <type> <javaclass name="List"> <ruleclass name="Person"/> </javaclass> </type> <derivation> <filter> <list> <!-- referencia simple a los miembros de la unidad familiar --> <reference attribute="members"/> </list> <listitemexpression> <equals> <String value="Dog"/> <!-- Una referencia a un atributo en un elemento de la lista. --> <reference attribute="species"> <reference attribute="favoritePet"> <current/> </reference> </reference> </equals> </listitemexpression> </filter> </derivation> </Attribute> </Class> </RuleSet>