- From: Eve Maler <eve@doctools.com>
- Date: Sat, 14 Jun 1997 16:12:02 -0400
- To: w3c-sgml-wg@w3.org
- cc: elm@arbortext.com
Our current draft spec offers two types of linking element: SIMPLE and EXTENDED. Tim's Link-5 mail summarized a problem that was recently discovered with an extended-link example he's been using frequently in XML presentations. I've been asked to write up a proposal for my suggested solution. In the course of writing up the rationale for my solution, I pretty much convinced myself that one of Tim's solutions is just as good! Read on for the details. Here is Tim's description of the problem: * * * We have a problem as to what's a resource and what isn't. I am mostly responsible for this; I dreamed up a cute example of what I claimed to be an XML xlink and showed it to lots of audiences... a lot of people like it, but in retrospect it turns out not to be right. First, here's the example: <!DOCTYPE test [ <!ATTLIST X XML-LINK #FIXED "EXTENDED"> <!ATTLIST L XML-LINK #FIXED "LOCATOR"> ]> Faced with a tight situation, Sakata found a <X> <L ROLE="EG" LABEL="English translation" SHOW="NEW" HREF="/cgi-bin/xlate?term=tesuji" /> <L ROLE="PIC" LABEL="Illustration" SHOW="EMBED" HREF="pix.xml#DESCENDENT(*,FIG,CAPTION,TESUJI)" /> <L ROLE="CourseNotes" LABEL="Course Notes" HREF="notes.xml#ID(def-Tesuji)..DITTO,NEXT(3,P)" /> <L ROLE="ToMove" LABEL="Jump to move in game record" SHOW="REPLACE" HREF="game.xml#Move127" />tesuji</X>. For naive audiences, I walk 'em through the magic of the xpointers and the SHOW attributes... always with lots of nodding heads. Here's the problem... is the word 'tesuji' a resource of this link? In other words, should it be highlighted and able to launch traversal on a click? * * * The problem centers on the fact that we've conflated two concepts in each linking type: o The in-line (contextual) versus out-of-line (independent) nature of the link o Addressing a single resource versus potentially multiple resources A SIMPLE link is in-line/single, and an EXTENDED link is out-of-line/multi. The tesuji example, however, is in-line/multi (and, of course, it's possible to imagine an out-of-line/single example). Tim suggested two possible solutions: 1. If the content of the EXTENDED linking element is supposed to act as a resource, a locator element must appear inside it saying: <L ROLE="whatever" Label="whatever" HREF="#HERE()"/> This translates to "All links should be either in-line/single or out-of-line/multi." 2. The content of all EXTENDED linking elements must be treated as resources, much as the content of SIMPLE linking elements is supposed to be treated as resources. This translates to "All multi links should be in-line links." I have proposed a third: 3. In XML-Link, offer three types of linking elements: SIMPLE (in-line/single), MULTI (in-line/multi), and EXTENDED (out-of-line/multi). Make their templates distinct. The templates would look like this: SIMPLE: An element that links two resources, one of which (by definition) is the content of the linking element itself. <!ELEMENT SIMPLE ANY> <!ATTLIST SIMPLE XML-LINK CDATA #FIXED "SIMPLE" ROLE CDATA #IMPLIED HREF CDATA #REQUIRED TITLE CDATA #IMPLIED SHOW (EMBED|REPLACE|NEW) "REPLACE" ACTUATE (AUTO|USER) "USER" BEHAVIOR CDATA #IMPLIED > MULTI: An element that links two or more resources, one of which (by definition) is the content of the linking element itself. <!ELEMENT MULTI (#PCDATA|LOCATOR)*> <!ATTLIST MULTI XML-LINK CDATA #FIXED "MULTI" ROLE CDATA #IMPLIED TITLE CDATA #IMPLIED SHOW (EMBED|REPLACE|NEW) "REPLACE" ACTUATE (AUTO|USER) "USER" BEHAVIOR CDATA #IMPLIED > <!ELEMENT LOCATOR ANY> <!ATTLIST LOCATOR XML-LINK CDATA #FIXED "LOCATOR" ROLE CDATA #IMPLIED HREF CDATA #REQUIRED TITLE CDATA #IMPLIED SHOW (EMBED|REPLACE|NEW) "REPLACE" ACTUATE (AUTO|USER) "USER" BEHAVIOR CDATA #IMPLIED > EXTENDED: An element that links two or more resources. EXTENDED linking elements should not have content. <!ELEMENT EXTENDED (LOCATOR+)> <!ATTLIST EXTENDED XML-LINK CDATA #FIXED "EXTENDED" ROLE CDATA #IMPLIED TITLE CDATA #IMPLIED SHOW (EMBED|REPLACE|NEW) "REPLACE" ACTUATE (AUTO|USER) "USER" BEHAVIOR CDATA #IMPLIED > <!-- LOCATOR as above --> My thinking went like this: Understanding the in-line/out-of-line distinction seems to be the biggest mental leap XML users and implementors need to make (witness Peter M-R's very reasonable questions about "how do I implement EXTENDED links? what is there to do?"). Because of the Web experience, everyone already gets "from-to", but "between" is a lot harder. Therefore, if we actually need the notion of out-of-line links anymore, it would be useful if our link typology and our syntax clarified the distinction. The question is, Do we need out-of-line links if we've got links that can point to multiple other resources? For me, the power of MULTI is that I can now imagine pointing my browser at a document that contains simply a pile o' links, and having it *do* *something* when it gets there. The problem with pure ilinks is that they're not interoperable; the behavior of a system with respect to the links is entirely dependent on private expectations about what the links are and do. The advantage of MULTI links is that you can still manage them as ilinks, while maintaining them (if you choose) in an XML document form that is useful *as a document* in the regular sense. This is a little like the appeal of SHOW and ACTUATE, only much more pure with regard to presentation independence. Further, any Webhead who's ever coded an <A> link can easily see what to do with a tesuji-type construct in regular documents. If we *do* need the notion of pure out-of-line links for some reason, then I'm assuming that it's useful for applications to be able to predict, on encountering the start-tag of the linking element, whether it's in-line or out-of-line. If this is true, then we do need to distinguish MULTI from EXTENDED links in something like the manner shown above. However (just to undermine my own proposal a little more :-), there's a gotcha here too: Note that the EXTENDED template shown above disallows #PCDATA content. However, it's possible that a user will choose not to follow the template or will not validate against an element declaration that does follow it. Thus, there might be content inside the linking element anyway; the template can't *enforce* its own prescription. This should not be an XML-Link error, but the spec should be clear that if any content is present, it is not a resource unless one of the locator elements explicitly addresses that content with #HERE(). Yuck. If the template *could* enforce its own prescription, the case for making the syntactic distinction between MULTI and EXTENDED would be strengthened. Tim's and Jon's experiences with teaching the tesuji example demonstrate why I'm not in favor of suggestion #1, and why the problem outlined above is so yucky: It's incredibly intuitive to assume that any content of a linking element *must* be part of the relationship, and it's incredibly hard to imagine that a word inside a linking element is just another random word in the document. If we do need all of the SIMPLE, MULTI, and EXTENDED functional types, I want to warn against the false economy of having a maximum of two syntactic types. We've already discussed and discarded the idea of combining all the link types into one; the primary reason it didn't work was because we weren't willing to treat an HREF on the EXTENDED linking element as a locator equal in meaning and functionality to the locator subelements. (Our current spec doesn't offer an HREF attribute on EXTENDED.) Therefore, I believe we should keep our current separation of single-locator and multiple-locator links, and not consider offering a super-duper in-line/single+multi link type. Just to complete this picture, I wanted to point out that there seems to be no good reason to create a linking type for out-of-line links that point to only one other resource in the syntactic style of <A>. The creation of out-of-line links assumes enough sophistication that we don't need the syntactic sugar of making an entry-level "single" version available. Eve
Received on Saturday, 14 June 1997 16:12:28 UTC