public void read(URL url) throws DocumentException {
		SAXReader reader = new SAXReader();
		Document document = reader.read(url);
		Element root = document.getRootElement();
		String versionString = root.attributeValue("version");
		if (versionString == null) {
			return;
		}
		int version = 0;
		try {
			version = Integer.parseInt(versionString);
		} catch (NumberFormatException ex) {
		}
		if (version > cachedVersion) {
			cachedVersion = version;
			cachedActionList = new ArrayList<GpioAction>();
			now.setTimeInMillis(TestTime.currentTimeMillis());
			for (@SuppressWarnings("unchecked")
			Iterator<Element> i = root.elementIterator("schedule"); i.hasNext();) {
				Element schedule = i.next();
				for (int day : getDaysOfWeek(schedule)) {
					if (day == 0) { // value 0 used for erroneous day
						continue;
					}
					for (@SuppressWarnings("unchecked")
					Iterator<Element> j = schedule.elementIterator("action"); j
							.hasNext();) {
						Element action = j.next();
						try {
							cachedActionList.add(createGpioAction(day, action));
						} catch (ParseException e) {
							continue;
						} catch (NumberFormatException ex) {
							continue;
						}
					}
				}
			}
			Collections.sort(cachedActionList);
		}
	}