I'm not sure what you said about typenames and attribute
names, but I wonder if it is this problem. XML ELEMENT names are
confused about whether they are acting as programming language "type
names", or as programming language "field names".
In a "data oriented schema" (aka, Type Definition Language)
we might write
TYPE POINT
    {
    x : INT
    y : INT
    }
    
TYPE RECTANGLE
    {
    lower-left : POINT
    upper-right : POINT
    }
and then we might have instances:
<POINT>		-- Point is the Type Name
  <x>3</x>	-- X is a field name
  <y>4</y>
</POINT>
<RECTANGLE>	-- type
  <lower-left>		-- field
      <POINT>		-- type
      	  <x>3</x>	-- field
	  <y>4</y>
      <POINT>
  </lower-left>
  
  <upper-right>
      <POINT>
      	  <x>30</x>
	  <y>40</y>
      <POINT>
  </upper-right>
  
</RECTANGLE>
  
	  	      	      
    
    Programming languages make it clear when an identifier defines a
type (POINT), and when it uses a type (lower-left).
-- Mark