I would really not complicate things here.
At the same time I agree, it is not beautiful having to use 'value' if the pointer is NULL and if not, the pointer ...

What we could do here is to create a ComplexValue leaf for the string (that is really not complex) and always use complexValueP to get to the attribute value.

It is to complicate things, but just a little ...