diff --git a/lib/rexml/element.rb b/lib/rexml/element.rb
index af005754..677069cf 100644
--- a/lib/rexml/element.rb
+++ b/lib/rexml/element.rb
@@ -1268,9 +1268,11 @@ def [](name_or_index)
# document.root.attribute("x") # => x='x'
# document.root.attribute("x", "a") # => a:x='a:x'
#
- # This method matches +namespace+ loosely. An unprefixed attribute is
- # taken to be in the default namespace, and a +namespace+ that no prefix
- # is bound to falls back to the unprefixed attribute:
+ # This method matches +namespace+ as the XML Namespaces specification says
+ # first, then falls back to a looser match kept for compatibility: an
+ # unprefixed attribute is taken to be in the default namespace, and a
+ # +namespace+ that no prefix is bound to falls back to the unprefixed
+ # attribute:
#
# xml_string = ""
# document = REXML::Document.new(xml_string)
@@ -1278,11 +1280,16 @@ def [](name_or_index)
# document.root.attribute("a", "nosuch") # => a='a'
#
# The XML Namespaces specification says that an unprefixed attribute has
- # no namespace, so neither of those should match.
- # REXML::Attributes#get_attribute_ns follows the XML Namespaces
- # specification and returns +nil+ for both; use it when you need the
- # namespace to be matched strictly. The looser behavior here is kept for
- # compatibility.
+ # no namespace, so neither of those should match; the fallback answers
+ # them. The fallback only answers when nothing matches strictly, so an
+ # attribute that does is returned instead of the unprefixed one:
+ #
+ # xml_string = ""
+ # document = REXML::Document.new(xml_string)
+ # document.root.attribute("a", "ns0") # => p:a='PA'
+ #
+ # REXML::Attributes#get_attribute_ns matches strictly and only strictly,
+ # returning +nil+ where the fallback would answer.
#
def attribute( name, namespace=nil )
return attributes.get_attribute( name ) if namespace.nil?