|
Subject: XLink implemented in XSL From: Paul Prescod <paul@xxxxxxxxxxx> Date: Fri, 14 May 1999 19:05:30 -0500 |
Jonathan Borden wrote:
>
> Would something like this work?
Is your goal to implement XLink or to implement some small subset of XLink
applicable to a document type? The latter is definitely possible. I posit
that the former is possible (gotta love Turing completeness) but
incredibly painful to implement. I tried it and gave up.
Here's a document type:
<!ELEMENT link (locators)>
<!ATTLIST link %I-am-a-linking-element;>
<!ELEMENT locator EMPTY>
<!ATTLIST link %I-am-a-locator-element;>
<!ELEMENT otherstuff (otherstuff|link)*>
How do I make a template rule that matches any element that is an anchor.
Remember that anchor nodes are not explicitly labeled -- you just refer
to them in a link and they "become" an anchor. Furthermore link, locator
and otherstuff elements can all be anchors.
I guess the important part of the problem could be expressed as the
following query:
"this rule matches nodes A such that there exists a node B such that B has
an attribute called 'href' with a value that is an XPointer that can be
dereferenced to return A."
I tried to implement this specification but ran into two fairly
fundamental limitations in XSL.
#1. I can't figure out how to interpret a string from the document as a
reference. I could re-implement XPointer or XSL queries in Python on top
of the JVM on top of the Turing machine emulator that I haven't got around
to implementing. Actually the XPointer in Python and Python on the JVM
parts are already implemented but I haven't got around to the Turing
machine and the JVM.
Obviously it would be easier to use XSL's built-in extension mechanism to
call Python but that would not be an implementation "in XSL."
Now that XSL and XPointer are being combined I think that being able to
convert a string to a query is a no-brainer. It is necessary anyhow.
#2. XSL's support for building abstractions is extremely poor because the
only data types that can be passed from a template to its caller are
opaque result node sets and strings. But what you really want to return is
nodes and node lists. I tried several tricks to get around this. I
couldn't find one that would work.
Basically it means that there is no way to store a query or query result
set and use it as an input to another query. Insofar as XSL should behave
as a superset of a query language I consider this a pretty big limitation
unless I've got it wrong.
It should also be possible to call a named template ("macro") from an
expression.
--
Paul Prescod - ISOGEN Consulting Engineer speaking for only himself
http://itrc.uwaterloo.ca/~papresco
Earth will soon support only survivor species -- dandelions, roaches,
lizards, thistles, crows, rats. Not to mention 10 billion humans.
- Planet of the Weeds, Harper's Magazine, October 1998
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: XLink: behavior must go!, Jonathan Borden | Thread | Re: XLink implemented in XSL, James Clark |
| RE: Summary of results. Re: XSL Li, Pete Beazley | Date | Re: <xsl-script>, Paul Prescod |
| Month |