xsl-list
[Top] [All Lists]

RE: [xsl] Matching a recursive local element structure

2011-02-04 19:06:39
Thanks for the ideas (all!)
Let me restate my question maybe it might lead to another idea  (I'm still
floundering !)

For every element declaration in an XSD I would like to generate a unique
XSLT match expression that matches that element declaration (but no others).
I've got it working quite well for both global and local elements until I
hit a recursive structure then well ... it recurses :)

Thanks for any suggestions !

I *feel* this should be solvable because while the structure are infinitely
recursive, each level of the recursion matches the same element declaration
so shouldn?t have to be unrolled ... I just cant yet get my head around a
match expression to catch it right.

But maybe its not finitely solvable ?



----------------------------------------
David A. Lee
dlee(_at_)calldei(_dot_)com
http://www.xmlsh.org


-----Original Message-----
From: Brandon Ibach [mailto:brandon(_dot_)ibach(_at_)single-sourcing(_dot_)com] 
Sent: Friday, February 04, 2011 7:44 PM
To: xsl-list
Subject: Re: [xsl] Matching a recursive local element structure


Perhaps this approach is not as generic as you may have had in mind,
but for this case, I think it would work.

<template match=?section/text//list/item[not(ancestor::subheading)]? > ?

-Brandon :)


On Fri, Feb 4, 2011 at 7:01 PM, David Lee <dlee(_at_)calldei(_dot_)com> wrote:
Suppose I have a schema which describes a recursive structure as local
elements.
Example (pseudo DTD, and pseudo xml I can provide more formal defs if
needed
)

Element section  (text)*
Element text ( list | para | bold | #PCDATA )*
Element list ( item*)
Element item ( text | subheading ) *
Element subheading (text)*

So for example doc may look like

<section>
  <text>Text
      <list>
                      <item><para>Item Text</para></item>
                      <item><para>Item Text2</para></item>
                      <item><para>Item Text</para>
      <list><item><para>More text> </item></list></para></item>
                </list>
   </text>
</section>


The key point is that the schema is recursive, so an xpath (or xslt match)
might be

                section/text
                section/text/list/item/para

section/text/list/item/list/item/list/item/list/item/list/item ?. Can get
really long here !!!!



Now suppose I want to avoid an infinite number of XSLT match strings but I
want to match say ?list/item? but ONLY within section/text
(presume there may be a different list/item locally defined within say
subheader)


Suggestions on to a good way to do that ?

<template match=?section/text//list/item? > ?

But this might match
                section/text/subheading/list/item
or
                section/text/list/item/subheading/list/item


which I don?t want.

I only want to match the ?list/item? which is a local element definition
below ?section?  (recursively),.
so the match should select
                section/text/list/item/list/item/list/item
but not
                section/text/list/item/subheading/list/item

( which I would say match with
                subheading/list/item
                subheading/list/item/list/item
)


Is there an obvious way to do this ?
Its entirely possible that I?m asking an impossible question (that is the
schemas may simply not allow this restriction in the first place),
But I?m trying to solve a general problem so asking a general question.

This is based on generating match strings from XSD element declarations so
its really a XSD question as well ?
Maybe its impossible to describe a schema such that a descendant
?list/item?
is distinguishable if its under ?section? or ?subheading? ?

Thanks for any suggestion !


-David

----------------------------------------
David A. Lee
dlee(_at_)calldei(_dot_)com
http://www.xmlsh.org



----------------------------------------
David A. Lee
dlee(_at_)calldei(_dot_)com
http://www.xmlsh.org



--~------------------------------------------------------------------
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>
--~--




--~------------------------------------------------------------------
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>
--~--