The principal node type refers to what a name matches:
On the 'child' axis, a name matches an element.
On the 'attribute' axis, a name matches an attribute.
Principal node type "special cases" the extra relationships:
Only the attribute axis has type 'attribute'.
Only the namespace axis has type 'namespace'.
Everything else has type 'element'.