RE: [xsl] Constructing a tree from leaf nodes (knowing the tree structure)?

Subject: RE: [xsl] Constructing a tree from leaf nodes (knowing the tree structure)?
From: "Simon Shutter" <simon@xxxxxxxxxxx>
Date: Thu, 19 Apr 2007 22:15:17 -0700
Dimitre,

I've done my best.  Perhaps someone who does understand the problem as I've
stated it and who also understands what you need to correctly and
unambiguously define the problem can help bridge the gap here.

Simon

-----Original Message-----
From: Dimitre Novatchev [mailto:dnovatchev@xxxxxxxxx] 
Sent: April 19, 2007 9:25 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Constructing a tree from leaf nodes (knowing the tree
structure)?

Simon,

Seems I am  beginning to guess, however this description is miles away
from what I'd classify as correctly and unambiguously defined problem.
The reason is the "f" element and the "complete" attributes.

Whenever this problem becomes well-defined, I'll be glad to have a look at
it.

Cheers,
Dimitre

On 4/19/07, Simon Shutter <simon@xxxxxxxxxxx> wrote:
> Dimitre,
>
> I believe I do know what the problem is and I'm sorry I've been unable to
> communicate it clearly enough in my previous posts.
>
> Let me try again.
>
> I have a known tree structure.  Let's say it's stored in a file tree.xml.
> It looks like this:
>
> <a>
>   <b>
>     <c/>
>     <d/>
>   </b>
>   <e>
>     <f/>
>     <g>
>       <h/>
>       <i/>
>     </g>
>   </e>
> </a>
>
> I have an application that generates boolean values (stored in an
attribute
> called "result") for a number of data elements.  The element names
> correspond to the leaf node elements in the tree structure above.  Let's
say
> they are are stored in a file data.xml that looks like this:
>
> <data>
>  <c result="true"/>
>  <d result="false"/>
>  <h result="true"/>
>  <i result="true"/>
> </data>
>
> Data.xml does not have to contain an element for each leaf node in the
> tree.xml.
>
> I am interested in constructing an output tree that has the same structure
> as the tree above based only on the leaf node data.  To prevent ambiguity
> there can only be one instance of each element in tree.xml.
>
> The idea is that if all descendants of a node have a result attribute =
> "true" then the result attribute value of that node is true also.  Ken
> identified this in his opening paragraph even though I didn't make it
clear.
>
> In addition to the logical AND calculation, I also want to indicate where
> leaf nodes are missing and that is where the "complete" attribute comes
in.
> So the output tree should indicate nodes that have missing descendants as
> well as the logical AND result.  In the example I used, the desired output
> tree is:
>
> <a complete="false" result="false">
>  <b complete="true" result="false">
>    <c complete="true" result="true"/>
>    <d complete="true" result="false"/>
>  </b>
>  <e complete="false" result="true">
>    <f complete="false" result=""/>
>    <g complete="true" result="true"/>
>      <h complete="true" result="true"/>
>      <i complete="true" result="true"/>
>    </g>
>  </e>
> </a>
>
> So in answer to your question, the element f can be absent from data.xml
but
> it needs to be in the output tree so it can identified as missing when the
> output tree is transformed to HTML.  That is why all the leaf nodes have a
> "complete" attribute.
>
> Perhaps it is my choice of attributes that has caused confusion here.
> Anyhow, I hope that this attempt to outline my requirements makes more
sense
> than the original post.
>
> Regards, Simon
>
> P.S.  Don't be deluded by my email address that I have much experience
with
> XML and XSLT.  I chose the domain name based on Oracle's database
> terminology many years before I was even aware of XML.  I really am a
> newbie.
>
>
> -----Original Message-----
> From: Dimitre Novatchev [mailto:dnovatchev@xxxxxxxxx]
> Sent: April 19, 2007 5:11 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Constructing a tree from leaf nodes (knowing the tree
> structure)?
>
> This might have been an interesting problem, were it defined -- as of
> this moment it is more of a puzzle what the OP actually wants...  ?
> ?
>
> > The "complete" attribute signifies whether all required descendent nodes
> are
> > present or not.  For a leaf node I assume that if it is present
> > complete="true" and if it is absent complete="false".  Hence f has
>
> If a leaf node is "absent", it cannot also have any attributes,
> including a "complete" attribute. ? ? ?
>
> Also, Dr. Kay's question why "f" should have its "complete" attribute
> set to "false" remains unanswered.
>
>
> It is quite often the case that if one cannot formulate well he is
> asking help for, this person actually doesn't know what the problem
> is.
>
>
>
>
> On 4/19/07, Simon Shutter <simon@xxxxxxxxxxx> wrote:
> > Thanks, Michael.
> >
> > The "complete" attribute signifies whether all required descendent nodes
> are
> > present or not.  For a leaf node I assume that if it is present
> > complete="true" and if it is absent complete="false".  Hence f has
> > complete="false".  I agree it is redundant for the data elements c,d,h
and
> i
> > to have complete="true" but I need the attribute to be present to that I
> can
> > style the tree in HTML.
> >
> > As far as the ancestors go, b is complete because all its descendants
are
> > complete, while e and a are incomplete because some of their descendants
> are
> > incomplete.
> >
> > Simon
> >
> >
> > -----Original Message-----
> > From: Michael Kay [mailto:mike@xxxxxxxxxxxx]
> > Sent: April 19, 2007 4:14 PM
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: RE: [xsl] Constructing a tree from leaf nodes (knowing the tree
> > structure)?
> >
> > XSLT is certainly suited to the problem. However, I can't reverse
engineer
> > your requirements from your example. The following stylesheet comes
close,
> > and there are various ways I could refine it to produce your required
> > output, but I'd be using guesswork as to what the requirements are, so
it
> > would be better if you do that yourself! In particular I can't see why
you
> > consider b to be complete while f is incomplete, and since all the data
> > elements say complete="true", it's hard to see what role that attribute
> > plays in the calculation.
> >
> > I used your tree as the principal input, and wrapped the other nodes in
a
> > <data> element and called it data.xml. The stylesheet is:
> >
> > <xsl:stylesheet version="2.0"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> >
> > <xsl:output indent="yes"/>
> >
> > <xsl:variable name="tree" select="/"/>
> > <xsl:variable name="data" select="doc('data.xml')/data"/>
> >
> > <xsl:template match="*">
> >  <xsl:copy>
> >    <xsl:attribute name="complete"
> >       select="every $n in descendant::* satisfies
> >                 exists($data/*[name() = name($n)])"/>
> >    <xsl:attribute name="result"
> >           select="every $n in descendant::* satisfies
> >                 exists($data/*[name() = name($n) and @result='true'])
"/>
> >    <xsl:apply-templates/>
> >  </xsl:copy>
> > </xsl:template>
> >
> > </xsl:stylesheet>
> >
> > Michael Kay
> > http://www.saxonica.com/
> >
> > > -----Original Message-----
> > > From: Simon Shutter [mailto:simon@xxxxxxxxxxx]
> > > Sent: 19 April 2007 21:02
> > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > > Subject: [xsl] Constructing a tree from leaf nodes (knowing
> > > the tree structure)?
> > >
> > > This is probably a poorly posed question but essentially I am
> > > trying to determine if XSLT is suited to the following problem.
> > >
> > > Say I have a node fragment that defines a tree structure in
> > > which each element appears only once eg.
> > >
> > > <a>
> > >   <b>
> > >     <c/>
> > >     <d/>
> > >   </b>
> > >   <e>
> > >     <f/>
> > >     <g>
> > >       <h/>
> > >       <i/>
> > >     </g>
> > >   </e>
> > > </a>
> > >
> > > I then have data for some of the leaf nodes ie.
> > >
> > > <c complete="true" result="true"/>
> > > <d complete="true" result="false"/>
> > > <h complete="true" result="true"/>
> > > <i complete="true" result="true"/>
> > >
> > > In this example the leaf node </f> is missing.
> > >
> > > Is it possible to create a node fragment that mimics the tree
> > > structure and sets ancestor attributes according to the
> > > presence or absence of leaf nodes and their attributes?
> > >
> > > The desired output would be:
> > >
> > > <a complete="false" result="false">
> > >   <b complete="true" result="false">
> > >     <c complete="true" result="true"/>
> > >     <d complete="true" result="false"/>
> > >   </b>
> > >   <e complete="false" result="true">
> > >     <f complete="false" result=""/>
> > >     <g complete="true" result="true"/>
> > >       <h complete="true" result="true"/>
> > >       <i complete="true" result="true"/>
> > >     </g>
> > >   </e>
> > > </a>
> >
> >
>
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
> -------------------------------------
> You've achieved success in your field when you don't know whether what
> you're doing is work or play
>
>


-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play

Current Thread