Stylus Studio XML Editor

Table of contents

Appendices

B.4 Namespace URI Lookup

Namespace URI Lookup

The following describes in pseudo code the algorithm used in the lookupNamespaceURI method of the Node interface. This methods ignores DOM Level 1 nodes.

DOMString lookupNamespaceURI(in DOMString prefix) 
{ 
  switch (nodeType) { 
     case ELEMENT_NODE: 
     { 
         if ( Element's namespace != null and Element's prefix == prefix ) 
         { 
               // Note: prefix could be "null" in this case we are looking for default namespace 
               return (Element's namespace);
         } 
         if ( Element has attributes)
         { 
            for ( all DOM Level 2 valid local namespace declaration attributes of Element )
            {
                 if (Attr's prefix == "xmlns" and Attr's localName == prefix ) 
                       // non default namespace
                 { 
                        if (Attr's value is not empty) 
                        {
                          return (Attr's value);
                        }         
                        return unknown (null);                   
                 } 
                 else if (Attr's localname == "xmlns" and prefix == null)
                       // default namespace
                 { 
                        if (Attr's value is not empty) 
                        {
                          return (Attr's value);
                        }         
                        return unknown (null); 
                 } 
           }
         } 
         if ( Element has an ancestor Element ) 
            // EntityReferences may have to be skipped to get to it 
         { 
                   return ancestorElement.lookupNamespaceURI(prefix); 
         } 
         return null; 
     } 
     case DOCUMENT_NODE: 
          return documentElement.lookupNamespaceURI(prefix) 

     case ENTITY_NODE: 
     case NOTATION_NODE: 
     case DOCUMENT_TYPE_NODE: 
     case DOCUMENT_FRAGMENT_NODE: 
           return unknown (null); 

     case ATTRIBUTE_NODE: 
         if (Attr has an owner Element) 
         { 
             return ownerElement.lookupNamespaceURI(prefix); 
         } 
         else 
         { 
             return unknown (null); 
         } 
     default: 
         if (Node has an ancestor Element) 
          // EntityReferences may have to be skipped to get to it 
         { 
             return ancestorElement.lookupNamespaceURI(prefix); 
         } 
         else { 
             return unknown (null); 
         } 
  } 
}