From owner-xml-dev@ic.ac.uk Wed Dec 2 10:26:21 1998 Date: Wed, 02 Dec 1998 09:51:08 -0600 To: xml-dev@ic.ac.uk From: "W. Eliot Kimber" <eliot@dns.isogen.com> Subject: Re: XLink/XPointer Developer's List
At 09:40 AM 12/2/98 -0500, Simon St.Laurent wrote:
>harden, deserve their own space. I'd like to see some members of the
>HyTime community who haven't been working full tilt with XML join the
>discussion,
I actually don't know of anyone I would consider part of the HyTime community that hasn't been heavily involved with XML in one way or another (although I can't claim we've all been working "full tilt", although many of us are or have been). Certainly all the editors of the standard have been, as have long-time users like Lloyd Harding (SMIL), Michel Biezunski (Topic Maps), and Martin Bryan (XML EDI, Topic Maps). Fujistu (HyBrick) has been a long-time user of HyTime and an early implementor of Xlink/Xpointer. Steve DeRose of course is the editor of the Xlink and Xpointer specs. I personally did a partial implementation in DSSSL (<http://www.drmacro.com/hyprlink/xlink/>).
And, of course, I subscribed to the new mailing list immediately.
XLink and XPointer are very important to HyTime because they provide exactly what HyTime has always needed: a simple but useful application of the HyTime ideas that makes it clearer what the benefits of a more sophisticated approach to hyperlinking are. My experience in teaching XLink is that people get it pretty fast, they start to see the potential in things like extended links and addressing of non-IDed things. They then see why HyTime is the way it is and see that XLink/XPointer provides a migration path for them such that when and if they reach the limit of what XLink and XPointer can do, they can start taking advantage of additional HyTime facilities without affecting their existing documents and software, because XLink and HyTime are syntactically and semantically compatible.
By itself, XPointer is very useful to HyTime because it provides a very convenient addressing syntax that it was not practical for HyTime to provide directly (simply because we only had so much time to develop the standard and focused on the more general facilities--also defining a convenient syntax is much more difficult than defining a complete one because of the compromises that must be made to balance ease of use with functionality).
Because HyTime is defined entirely in terms of operations on groves, HyTime can be used with any addressing mechanism as long as the results of that mechanism can be defined in grove terms. This is trivial for XPointers since they are already defined in terms of XML. One of the reasons I did a DSSSL-based implementation of XPointer is that it becomes the mapping of XPointer semantics onto the grove formalism, and in particular, the SGML document grove defined by the SGML property set (this is because DSSSL is also defined in terms of operations on groves). So XPointers are entirely meaningful and sensical within a HyTime environment.
One interesting aspect of using XPointers within a HyTime environment is that you get indirection, which XLink/XPointer currently doesn't provide (and probably shouldn't provide if it hopes to stay sufficiently simple--indirection adds a significant amount of complication and implementation difficulty).
For example, the following indirect address combines normal HyTime syntax with XPointers to provide what is essentially a table of named XPointers:
<?xml version="1.0"?> <?IS10744 arch name="HyTime" public-id="ISO/IEC 10744:1997//DOCUMENT Hypermedia/Time-based Structuring Language (HyTime)//EN" doc-elem-form="HyDoc" renamer-att="HyNames" options="queryloc" auto="arcauto" ?> <!DOCTYPE LocTable [ <!NOTATION XPointer PUBLIC "http://www.w3.org/TR/WD-xptr" > <!-- Indirect address for using XPointers. Declared here to avoid instance specification of fixed attributes from HyTime architecture. --> <!ATTLIST XPointer-loc id ID #REQUIRED href CDATA #REQUIRED HyTime CDATA #FIXED "queryloc" notation NOTATION (XPointer) "XPointer" HyNames CDATA #FIXED "#ARCCONT href" > ]> <LocTable> <desc>Document containing a set of indirect addresses for use by reference from other documents. Makes addresses easier to manage. Can think of it as a "public API" to a document that associates names with unnamed objects (elements addressed by position). </desc> <XPointer-loc id="child-3" href="http://some/url#root().child(3)"/> <XPointer-loc id="child-4" href="http://some/url#root().child(4)"/> </LocTable>
This document can then be used by reference from other HyTime documents:
<?xml version="1.0"?> <?IS10744 arch name="HyTime" public-id="ISO/IEC 10744:1997//DOCUMENT Hypermedia/Time-based Structuring Language (HyTime)//EN" doc-elem-form="HyDoc" renamer-att="HyNames" options="varlink queryloc refloc" auto="arcauto" ?> <!DOCTYPE linkgroup [ <!NOTATION XPointer PUBLIC "http://www.w3.org/TR/WD-xptr" > <!-- Anchor specification element: corresponds to XLink locator --> <!ATTLIST anchspec anchrole CDATA #REQUIRED href CDATA #REQUIRED HyNames CDATA #FIXED "#ARCCONT href" HyTime CDATA #FIXED "anchspec" loctype CDATA #FIXED "href QUERYLOC XPointer" xml:link CDATA #FIXED "locator" xml:attributes CDATA #FIXED "role anchrole" > ]> <linkgroup xml:link="group"> <varlink linktype="compare" xml:link="extended"> <desc> An out-of-line ("independent") extended link that associates two things in order to suggest that they compare to each other in some way. </desc> <anchspec anchrole="thing-one" href="loctable.xml#id(child-3)"/> <anchspec anchrole="thing-two" href="loctable.xml#id(child-4)"/> </varlink>
Here, I've shown the mapping between the HyTime variable link (varlink) form and the XLink extended form, even though an XLink processor would not resolve the indirection of the elements in the location table document (because XLink doesn't define any indirection mechanism). In other words, HyTime sees these documents as linking the third child of "/some/url" to the fourth child, while XLink sees these documents as linking the queryloc "child-3" to the queryloc "child-4". This is because a HyTime engine will resolve all the indirect addresses when it determines the anchors of the link, but an XLink engine will not.
Note that the processing required by the HyTime engine is significantly greater than the processing required by the XLink engine, which is one reason why XLink doesn't (and probably shouldn't) require indirection. Unfortunately, from an authoring perspective (as opposed to a delivery perspective), indirection is pretty much a requirement in order to make addresses managable within a dynamic information base. Thus, it's likely that people will use indirection (and thus HyTime) while authoring and then convert the indirect addresses to direct XPointers for delivery.
Cheers,
E.
Cheers,
E.
<Address HyTime=bibloc> W. Eliot Kimber, Senior Consulting SGML Engineer ISOGEN International Corp. 2200 N. Lamar St., Suite 230, Dallas, TX 75202. 214.953.0004 www.isogen.com </Address>
xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev@ic.ac.uk Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ To (un)subscribe, mailto:majordomo@ic.ac.uk the following message; (un)subscribe xml-dev To subscribe to the digests, mailto:majordomo@ic.ac.uk the following message; subscribe xml-dev-digest List coordinator, Henry Rzepa (mailto:rzepa@ic.ac.uk)