public static function composeFromComponents(
		string $scheme = null,
		string $authority = null,
		string $path = null,
		string $query = null,
		string $fragment = null
	):Uri {
		$uri = "";

		if(!is_null($scheme )
		&& strlen($scheme) > 0) {
			$uri .= $scheme . ":";
		}

		if((!is_null($authority)
		&& strlen($authority) > 0)
		|| $scheme === "file") {
			$uri .= "//" . $authority;
		}

		$uri .= $path;

		if(!is_null($query)
		&& strlen($query) > 0) {
			$uri .= "?";
			$uri .= $query;
		}

		if(!is_null($fragment)
		&& strlen($fragment) > 0) {
			$uri .= "#";
			$uri .= $fragment;
		}

		return new Uri($uri);
	}