Hello everyone!
This is not a review of the internet draft document as such, but rather
some more general changes to the structure of the format that I think
would make metalinks a lot easier to use in computer programs The
changes should be fairly easy to add to the ID if Anthony and the rest
of you like them. Sorry for suggesting all these changes at this late
stage, but I think they are important so please take a look at them at
least.
My suggestions would make the new format backwards incompatible, but
AFAIK the ID isn't completely compatible with most current
implementations anyway (not meta data at least). I think it is more
important to make the standard as good as possible than making it
backwards compatible. Clients with support for 3.0 will be able to add
support for the new standard easily anyway.
Here's my suggested changes:
Change 1: Remove unnecessary tags that carry no information
The metalink format contains some tags that could be removed without
losing ANY functionality. I'm thinking about <files>, <verification> and
<resources>. They may look pretty to humans, but I think the format
would be easier to deal with if they were removed. A metalink contains
one or more files, which contains hashes and urls (among other things).
The following xml structure reflects this hierarchy just as well as the
current one:
<metalink>
<file name="example.ext">
<identity>Example</identity>
<hash type="md5">2156346474343745</hash>
<url>http://example.com/</url>
<url>ftp://ftp.example.com/</url>
</file>
<file name="example2.ext">
...
</file>
</metalink>
(I skipped some details here, like <?xml ...)
In my experience it would be easier to parse/load/read a metalink with
that structure. It may depend on how you do that, but I can't think of
any situation when it would make it harder.
Change 2: remove "piece" attribute from piece hashes
The internet draft does state that the "piece" attribute starts at zero
and "increses", which probably means that you must supply the chunk
checksums / piece hashes in the right order (the first one first and so
on). This is really good. Otherwise you need to sort them each time you
load a metalink file.
If you supply the piece hashes in the correct order, then you don't need
the "piece" attribute as the order of xml elements is significant (you
can't, for example, show the <p> tags in an xhtml document in any
order!). Having the piece attribute will without doubt make people
believe you can supply them in any order, as that is the only reason for
having it.
My suggestion: remove the "piece" attribute and require that the piece
hashes are placed in the correct order.
Change 3: Remove (and forget about!) meta data inheritance
This is a confusing and unnecessary part of the standard, which makes it
harder for applications to read metalinks and only gives us some kind of
"compression" in return (i.e. some duplicates of tags can be removed in
multi-file metalinks, at times). If we really want small files, then an
XML-format is the wrong way to achieve that. In that case we should
investigate alternative solutions, because there will be better ones.
Even though this feature might be useful in some situations, I think the
added complexity it adds to every application that wants to load a
metalink is a too high price to pay. It is far more important that
metalinks are easy to deal with (and easy to understand!) than that they
are as small as possible. Remember, XML isn't small and will never be!
Lets focus on what we are good at instead (ie being a nice and easy xml
format that bundles data about files).
Change 4: Add meta data about the metalink (i.e. about the whole
metalink as such)
Screenshot of DTA: http://hampuswessman.se/dta_metalink.png
A metalink contains a collection of files. The current standard only
makes it possible to add meta data (ie identity, description, ...) for
each separate file. Many clients display information about the
collection as such (i.e. the whole metalink). See the DTA screenshot
above for an example. These clients apparently interpret the contents of
the metalink wrong as there is no such data in the metalink format. The
"meta data inheritance" mentioned in Change 3 is probably one reason for
this confusion.
Now to the solution. I like the way that e.g. DTA presents the metalink
and so I think we should adapt the format after this. More precisely, we
remove all kinds of "meta data inheritance" (see change 3) and then we
add some new tags directly under <metalink>, like <identity> and
<description>. Exactly which can be determined later on. This way there
would be some meta data about the <metalink> and some about each <file>
and it would be placed directly under those tags (only).
This would make the metalink format behave more like many people who
come into contact with it for the first time expects it to work (in my
very limited experience). It would also be very useful. An example is a
good way to describe why:
A web site presents their 10 favorite open source games in an article.
They want everyone to be able to download these games easily. A metalink
would, of course, be perfect! They add all the 10 games to the metalink
and write short descriptions (and so on) for each file/game. They also
set the <identity> of the metalink (ie of the whole collection of files)
to "Our 10 favorite games" and add a description to the whole metalink
which describes what kind of file collection this is.
When using DTA to download this fictional metalink, we would be
presented with the description of the metalink at the top and then each
file below. We can then choose which files we actually want and so on...
Perfect!!
Example xml:
<metalink>
<identity>The best 10 open source games ever</identity>
<description>...</description>
<file name="wesnoth.exe">
<identity>Wesnoth</identity>
...
</file>
<file name="superpong.exe">
<identity>Super Pong 3000</identity>
...
</file>
...
</metalink>
That was a far too long e-mail... Kudos to everyone that got this far!
Keep up the good work with the internet draft, Anthony.
Hampus
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Metalink Discussion" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/metalink-discussion?hl=en
-~----------~----~----~----~------~----~------~--~---