String	ids[] = new String [3];
ExternalIdentifiers ids = new ExternalIdentifiers();
    private String[] readExternalIds (boolean inNotation, boolean isSubset)    throws Exception    {	char	c;	String	ids[] = new String [3];	int	flags = LIT_DISABLE_CREF | LIT_DISABLE_PE | LIT_DISABLE_EREF;	if (tryRead ("PUBLIC")) {	    requireWhitespace ();	    ids [0] = readLiteral (LIT_NORMALIZE | LIT_PUBID | flags);	    if (inNotation) {		skipWhitespace ();		c = readCh ();		unread (c);		if (c == '"' || c == '\'') {		    ids [1] = readLiteral (flags);		}	    } else {		requireWhitespace ();		ids [1] = readLiteral (flags);	    }	    for (int i = 0; i < ids [0].length (); i++) {		c = ids [0].charAt (i);		if (c >= 'a' && c <= 'z')		    continue;		if (c >= 'A' && c <= 'Z')		    continue;		if (" \r\n0123456789-' ()+,./:=?;!*#@$_%".indexOf (c) != -1)		    continue;		error ("illegal PUBLIC id character U+"			+ Integer.toHexString (c));	    }	} else if (tryRead ("SYSTEM")) {	    requireWhitespace ();	    ids [1] = readLiteral (flags);	} else if (!isSubset) 		error ("missing SYSTEM or PUBLIC keyword");	if (ids [1] != null) {	    if (ids [1].indexOf ('#') != -1)		handler.verror ("SYSTEM id has a URI fragment: " + ids [1]);	    ids [2] = handler.getSystemId ();	    if (ids [2] == null)		handler.warn ("No base URI; hope URI is absolute: "			+ ids [1]);	}	return ids;    }