I opt for the semantic element constructor. This guy is the master, the xml and notation element are nothing but observers of this master.
The initialize in the xml adapter is used to make sure the values of the different attributes on the model are being set on the xml, so you have to implement this initialization step as well.
The getDefaultValue() in the adapter serves only to remove attributes in the xml that have their default value. e.g. if the default value of an attribute is 'abc', specifying this in the getDefaultValue() method will make sure that the attribute disappears from the xml if the model has the value 'abc' for this particular property.