The examples given so far show a comparatively simple tree model, but actually a repository item property can be derived from any other properties, so long as the properties can be represented as vertices on a path of a directed acyclic graph. That is, the derivation of a property can have multiple paths that are traversed to derive the value. For example, a shipping address might derive from the user’s specified shipping address, the user’s billing address or home address, or the user’s company’s address:
<item-descriptor name="user"> <property name="shipToAddress" writable="false" item-type="address"> <derivation> <expression>shippingAddress</expression> <expression>billingAddress</expression> <expression>homeAddress</expression> <expression>company.address</expression> </derivation> </property> <table name="user" > <property name="shippingAddress" item-type="address"/> <property name="billingAddress" item-type="address"/> <property name="homeAddress" item-type="address"/> <property name="company" item-type="company"/> </table> </item-descriptor>
Note that this example assumes you’ve also defined item descriptors named address
and company
. To determine the value of the shipToAddress
for a user, the expressions specified in the derivation are searched in order. Any expression may also refer to properties that are themselves derived.