code: private String readNotationEntry(char c, PrefixedName attrName, Location refLoc)
          throws XMLStreamException
      {
          String id = readDTDName(c);
  
          /* Need to check whether we have a reference to a "pre-defined"
           * notation: pre-defined here means that it was defined in the
           * internal subset (prior to this parsing which then would external
           * subset). This is needed to know if the subset can be cached or
           * not.
           */
          if (mPredefdNotations != null) {
              NotationDeclaration decl = mPredefdNotations.get(id);
              if (decl != null) {
                  mUsesPredefdNotations = true;
                  return decl.getName();
              }
          }
  
          NotationDeclaration decl = (mNotations == null) ? null :mNotations.get(id);
          if (decl == null) {
              // In validating mode, this may be a problem (otherwise not)
              if (mCfgFullyValidating) {
                  if (mNotationForwardRefs == null) {
                      mNotationForwardRefs = new LinkedHashMap<String,Location>();
                  }
                  mNotationForwardRefs.put(id, refLoc);
              }
              return id;
          }
          return decl.getName();
      }
docs: Method called to read a notation reference entry; done both for
  attributes of type NOTATION, and for external unparsed entities
  that refer to a notation. In both cases, notation referenced
  needs to have been defined earlier; but only if we are building
  a fully validating DTD subset object (there is the alternative
  of a minimal DTD in DTD-aware mode, which does no validation
  but allows attribute defaulting and normalization, as well as
  access to entity and notation declarations).
  
  @param attrName Name of attribute in declaration that refers to this entity
  
  @param refLoc Starting location of the DTD component that contains
  the reference