xsl-list
[Top] [All Lists]

RE: graph-traversal query

2005-01-28 08:25:13
Ignoring the stuff about case-independence, define a key on the identifier

<xsl:key name="k" match="DEFCONCEPT" use="@name"/>

Find the logical parent using the key function:

key("k", PARENT/CONCEPT/@name)

or the grandparent by doing it twice:

key("k", PARENT/CONCEPT/@name) / key("k", PARENT/CONCEPT/@name)

That's XPath 2.0, in 1.0 you write 

key("k", key("k", PARENT/CONCEPT/@name)/PARENT/CONCEPT/@name)

Since your data (unusually) represents relationships in both directions, you
can also use the key to find the children

key("k", CHILD/CONCEPT/@name)

or grandchildren:

key("k", CHILD/CONCEPT/@name) / key("k", CHILD/CONCEPT/@name)

Michael Kay
http://www.saxonica.com/


-----Original Message-----
From: RQamar [mailto:qamar_rahil(_at_)yahoo(_dot_)co(_dot_)uk] 
Sent: 28 January 2005 14:27
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] graph-traversal query

Hi

This is a question I asked earlier on the forum and was advised by 
Wendell to send it as a seperate query so I could get feedback from a 
wider audience.

I'm educating myself on XSLT and XPath but until the two books Ive 
recently ordered arrive, I'd need some help from the experts 
to help me 
proceed.

My query is thus:

Im finding the dynamic assigning and traversing process in 
XSL quite 
confusing. Is there a logical way of  traversing through a tree to 
determine the grandchild of an element albeit indirectly. So I know 
that my XML file is as below

-----------------------
<DEFCONCEPT id="10180" name="Car">
       <PARENT>
           <CONCEPT name="Automobile" ref="10181"/>
       </PARENT>
       <CHILD>
           <CONCEPT name="Toyota" ref="10235"/>
       </CHILD>
</DEFCONCEPT >
<DEFCONCEPT id="10235" name="Toyota">
       <PARENT>
           <CONCEPT name="Car" ref="10180"/>
       </PARENT>
       <CHILD>
           <CONCEPT name="Corolla" ref="10279"/>
       </CHILD>
</DEFCONCEPT >
<DEFCONCEPT id="10279" name="Corolla">
       <PARENT>
           <CONCEPT name="Toyota" ref="10235"/>
       </PARENT>
</DEFCONCEPT >
-----------------------
and I want to reach the <DEFCONCEPT name="Corolla"> from the node 
<DEFCONCEPT name="Car"> because I have a query to determine the 
existence of a kind_of  Car 'Corolla' irrespective of the 
case (upper 
or lower) in which it has been written and where in the 
hierarchy it 
exists. How will it be possible using XSLT?


Thanks
Rahil



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>