B - Advanced 5 - Tree traversal
Table of contents
Purpose of this section is to introduce tree traversal within XML tree in validation rule definitions.
In short, traversal is done with dot notation, by using . between elements. As comparison, tree traversal in XPath is done with a forward slash /.
Steps we are making in this section are:
First, let's make Debtor mandatory by using the dropdown menu. Opening this rule should contain the following:
Context: HeaderType1 Definition: self.Debtor->size() >= 1
When we break this into sections, we see context to be HeaderType1, meaning that code in definition is always ran when element of this type is found within XML. We refer to this type in OCL section as well, by using the keyword "self" (this is optional but we recommend it to be used to make validation rule more clear)-
Next, traversing to Debtor is done by using dot notation in between of self and Debtor. Restriction for the element is done after the traversal.
We can modify this rule to go to Name and to see what happens. Code then should be:
Definition: self.Debtor.Name->size() >= 1
When testing this, we should be able to see that validation rule itself works as we have defined (Debtor/Name is mandatory, meaning both Debtor and Name must be given. However, we see that the message is always given in location Header.
In the next section we'll fix this to be more clear.