public void parseOptionDescriptionXMLfile(URL url) throws MaltChainedException {
		if (url == null) {
			throw new OptionException("The URL to the default option file is null. ");
		}

        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();

    		Element root = db.parse(url.openStream()).getDocumentElement();
    		NodeList groups = root.getElementsByTagName("optiongroup");
            Element group;
            for (int i = 0; i < groups.getLength(); i++) {
            	group = (Element)groups.item(i);
            	String groupname = group.getAttribute("groupname").toLowerCase();
            	OptionGroup og = null;
            	if (optionGroups.containsKey(groupname)) {
            		og = optionGroups.get(groupname);
            	} else {
            		optionGroups.put(groupname, new OptionGroup(groupname));
            		og = optionGroups.get(groupname);
            	}
            	parseOptionsDescription(group, og);
            }
        } catch (java.io.IOException e) {
        	throw new OptionException("Can't find the file "+url.toString()+".", e);
        } catch (OptionException e) {
        	throw new OptionException("Problem parsing the file "+url.toString()+". ", e);
        } catch (ParserConfigurationException e) {
        	throw new OptionException("Problem parsing the file "+url.toString()+". ", e);
        } catch (SAXException e) {
        	throw new OptionException("Problem parsing the file "+url.toString()+". ", e);
        }
	}