this block states that the element "some_element" must have an attribute named "has_name". this attribute can only take true or false as values, and if it is true, the first child element of the element must be "name", which stores text. if "name" did not need to be the first element, then the choice could be wrapped in an "interleave" element along with other elements. the order of the specification of attributes in relax ng has no meaning, so this block need not be the first block in the element definition.