public void startElement(String uri, String sname, String qname, Attributes atts) {
		
		Object context = null;
		
		if (!_contextStack.isEmpty()){
			context = _contextStack.peek();
		}
		
		String attrName = atts.getValue(_attribute_name);
		String attrLabel = atts.getValue(_attribute_label);
		String attrDesc = atts.getValue(_attribute_description);
		
		if (qname == _element_module){
			
		}else if (qname == _element_querydef){
			QueryDef queryDef = new QueryDef(-1,
					attrName, 
					attrLabel,
					attrDesc, 
					atts.getValue(_attribute_source),
					atts.getValue(_attribute_type), 
					atts.getValue(_attribute_orderby));
			newMeta(MetaDataType.QueryDef, attrName, queryDef);
			_contextStack.push(queryDef);
		}else if(qname == _element_columndef){
			String columnName = atts.getValue(_attribute_column_name);
			String joinTable = atts.getValue(_attribute_join);
			String pickList = atts.getValue(_attribute_picklist);
			String columnType = atts.getValue(_attribute_type);
			ColumnDef columnDef = new ColumnDef(attrName, attrDesc,columnName, joinTable, pickList, columnType);
			((QueryDef)context).addColumn(columnDef);
			_contextStack.push(columnDef);
		}else if(qname == _element_join){
			String tableName = atts.getValue(_attribute_table_name);
			String bString = atts.getValue(_attribute_outer);
			Join join = new Join(attrName, attrLabel, tableName, !"false".equalsIgnoreCase(bString));
			((QueryDef)context).addJoin(join);
			_contextStack.push(join);
		}else if(qname == _element_join_spec){
			String source = atts.getValue(_attribute_source_filed);
			String dest = atts.getValue(_attribute_target_field);
			((Join)context).addJoinSpec(new JoinSpec(attrName, attrLabel, source, dest));
		}else if(qname == _element_picklist){
			
		}else if (qname == _element_pickmap){
			String source = atts.getValue(_attribute_source_filed);
			String dest = atts.getValue(_attribute_target_field);
			String cons = atts.getValue(_attribute_cons);
			((ColumnDef)context).addPickMap(source, dest, cons);
		}else {
			throw new RuntimeException("invalid tag: " + qname);
		}
		
	}