As you can see, the mailto scheme basically has just the email address, so something like mailto:email@example.com is a complete URL.
For the http scheme, the slashes have a historical reason. In the old days (pre-1990s) many networks used double slash to indicate that the first token is a hostname.
Therefore /someplace/file.txt would mean file.txt under the /someplace directory on the current file system but //someplace/file.txt would mean /file.txt at server "someplace"
Therefore the full translation of http://example.com/item1 would be:
|http:||Use the http protocol|
|//example.com||Connect to example.com|
|/item.html||Ask the server for item.html|
(I've omitted port and fragment for simplicity)
The // is technically unnecessary to distinguish from local server because http requires that you need to specify a host to connect to.
When the file uri was originally implemented, it had the following forms and meanings
|file:./file.txt||Load file from current directory (Browser's working directory)|
|file:/directory/file.txt||Load file from root of current host|
|file://mount/file.txt||Attempts to load file.txt from mount point. If mount point is invalid, attempts to load file.txt from root directory|
|file:///directory/file.txt||Loads file.txt from root directory. This is the same as above with mount token missing.|
In modern browsers, everything upto the first slash is pretty much ignored. The mountpoint still works but often the browser ignores it and treats file://mount/file.txt as file:///file.txt