| Subject: [xsl] Indirect referencing in XSLT/XPath? From: "Roger L Costello costello@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sat, 5 Apr 2025 14:35:32 -0000 | 
Hi Folks,
The SNOBOL language has a wicked cool indirect referencing capability. Is
there an indirect referencing capability in XSLT/XPath?
Here is a brief description of SNOBOL's indirect referencing capability:
First, let's assign UNITS the string METERS
UNITS = "METERS"
In that statement UNITS is a name, and METERS is a data string.
In this statement UNITS is a data string:
ALTITUDE = "UNITS"
Let's output the value of ALTITUDE:
OUTPUT = ALTITUDE
prints UNITS.
[In SNOBOL, the word OUTPUT is a keyword; when it is assigned a value, that
value is output. I think that is pure genius.]
The value of UNITS hasn't changed, as we can see with this output:
OUTPUT = UNITS
prints METERS.
SNOBOL has an indirect referencing operation to reference the value of a
value. ["reference the value of a value" Let that sink into your brain; it is
so cool.] The indirect referencing operation is indicated by the unary
operator $ written in front of a name:
OUTPUT =  $ALTITUDE
prints METERS.
Let's change the value of UNITS:
UNITS = "FEET"
Now do an indirect reference:
OUTPUT =  $ALTITUDE
prints FEET.
Values may be assigned using indirect referencing:
$ALTITUDE = "FLIGHT_LEVEL"
We can see that the value of UNITS has changed:
OUTPUT =  UNITS
prints FLIGHT_LEVEL.
More than one level of indirect referencing is allowed, using $$, $$$, $$$$,
etc.
We've been using ALTITUDE as a name; now let's use it as a data string:
AIRCRAFT = "ALTITUDE"
Here's the reference chain that we've created: AIRCRAFT references ALTITUDE
which references UNITS which references FLIGHT_LEVEL. Stated another way,
AIRCRAFT has a property, ALTITUDE, and ALTITUDE has a property, UNITS, and
UNITS has a value, FLIGHT_LEVEL.
Let's do some indirect referencing to show the reference chain:
OUTPUT = AIRCRAFT
prints ALTITUDE
OUTPUT = $AIRCRAFT
prints UNITS.
OUTPUT = $$AIRCRAFT
prints FLIGHT_LEVEL.
----------------------------------------------------
Okay, that is a quick introduction to SNOBOL's indirect referencing
capability. I think it's wonderful. I can see the utility of changing an item
that is way down the reference chain--e.g., change the value of UNITS--without
impacting items that are way up the reference chain--e.g., no impact to
ALTITUDE or AIRCRAFT.
XML entities resemble indirect referencing:
<!DOCTYPE Document [
<!ENTITY UNITS "FLIGHT_LEVEL">
<!ENTITY ALTITUDE "&UNITS;">
<!ENTITY AIRCRAFT "&ALTITUDE;">
]>
<Document>
    &AIRCRAFT;
</Document>
I was delighted to see that SNOBOL uses the $ symbol. XSLT/XPath uses the $
symbol to identify a variable, e.g., $foo. In SNOBOL, the $ symbol is a unary
operator. Does XSLT/XPath consider the $ symbol to be a unary operator? I
don't think that XSLT/XPath permits two consecutive $ symbols, e.g., $$foo is
illegal and $($foo) is illegal, right?
Is there any way to do indirect referencing in XSLT/XPath?
/Roger
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| [xsl] XSL-List Guidelines, B Tommie Usdin btusd | Thread | Re: [xsl] Indirect referencing in X, Martin Honnen martin | 
| [xsl] XSL-List Guidelines, B Tommie Usdin btusd | Date | Re: [xsl] Indirect referencing in X, Martin Honnen martin | 
| Month |