Permitting non-indirect links
At 12:20 PM 01/03/97 -0500, David G. Durand wrote:
>I want to make clear that I am not saying that extra elements or entity
>references _cannot_ be used in XML linking, they almost certainly will be
>needed. However, nothing that can currently be done in HTML should become
>any harder when using XML -- that would be a prescription for failure. Call
>me reactionary, but I'm just trying to speak for the people who already
>know HTML who just want to get the job done -- they may accept additional
>complexity for additional power, but if what they can already do becomes
>harder, they won't necessarily take the trouble to enter our brave new
>world of descriptive markup.
What David is proposing is not *just* needed for HTML. Most
industry-standard DTDs have a similar mechanism. Since SGML doesn't provide
inter-book linking syntax, but everybody needs inter-book links, most DTDs
have something like:
<!ELEMENT interbook - - (whatever)>
tgt.entity ENTITY #REQUIRED
tgt.idref NAME #REQUIRED>
HyTime (until the TC) provided no support for cases similar to this. So, all
those documents would have to be re-authored even though what they're doing
is reasonable. One explanation tendered was that it is evil to combine a
link and a location address, but that is pontifical, and even a HyTime clink
can point directly to a destination in the same document. So, we at the very
least need to include a comparably simple construct (the alternatives,
telling all HTML users to re-author all their links, or to say we can't
support HTML links in XML, are, as Vizini would have said, inconceivable).
A link with a URL on an attribute is structurally the same, it just has
slightly different syntax: it combines the two attributes into one, and it
puts a system identifier (essentially) right there, instead of indirecting
through the DTD. Lots of SGML "cheats" with public or system ids on
attributes, rather than indirecting through entity declarations. We can say
that's awful if we like, but its frequency shows it is attractive, perhaps
a) it keeps the whole reference in once place, which greatly simplifies
readability and maintainability.
b) it keeps authors from having to learn a second language, namely that of
markup declarations, so it's easier to teach, and easier to create UIs for.
c) it eliminates 90% of the need for internal declaration subsets, which
allows applications (often) to precompile DTDs and save time and space.
d) it saves system resources because you don't have to keep all your entity
dcls around on the off chance that the last element in the document may
mention one a second time. since most entities that are declared to allow
linking, are referenced only once or a very few times, you gain a lot on
average even though we can dream up scenarios where you'd lose.
So that's another plea for (a) keeping it majorly simple for simple cases,
and (b) making sure existing HTML and other linking protocols can be subsumed.