public final void startElement(final String ns, final String lName,
			final String qName, final Attributes list) throws SAXException {
		// the actual element name is either in lName or qName, depending
		// on whether the parser is namespace aware
		String name = lName == null || lName.length() == 0 ? qName : lName;

		// Compute the current matching rule
		StringBuffer sb = new StringBuffer(match);
		if (match.length() > 0) {
			sb.append('/');
		}
		sb.append(name);
		match = sb.toString();

		// Fire "begin" events for all relevant rules
		Rule r = (Rule) RULES.match(match);
		if (r != null) {
			r.begin(name, list);
		}
	}