private static String relativizePath(final String dirStr, final String uriStr) {
		// Pfad an Schrägstrichen auftrennen, mehrere aufeinander folgende werden zusammengefasst. (/bla////foo ist gleich /bla/foo)
		final String[] dir = dirStr.split("/+", -1);
		final String[] uri = uriStr.split("/+", -1);

		int commonIndex = 0;
		for(int i = 0; i < uri.length && i < dir.length; i++) {
			if(!uri[i].equals(dir[i])) {
				break;
			}
			commonIndex++;
		}

		if(commonIndex <= 1) {
			// Nicht bis zum root zurückwandern, das wäre sinnlos. Stattdessen absoluten Pfad zurückgeben.
			return uriStr;
		}

		final StringBuilder result = new StringBuilder(uriStr.length());

		// Von dir rückwärts wandern, bis an gemeinsamen Pfad angelangt.
		for(int i = dir.length - 1; i > commonIndex; i--) {
			result.append("../");
		}
		// und jetzt in Richtung uri wandern
		for(int i = commonIndex; i < uri.length; i++) {
			result.append(uri[i]).append('/');
		}
		if(result.length() == 0) {
			return "";
		}
		result.setLength(result.length() - 1);
		return result.toString();
	}