[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Embedding the XPath of an input Text Fragment in

Subject: Re: Embedding the XPath of an input Text Fragment in output
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Thu, 12 Jun 2008 16:09:20 -0400
Re:  Embedding the XPath of an input Text Fragment in
At 12:00 PM 6/12/2008, David wrote:
>    <xsl:template match="*" mode="xpath-step">
>      <xsl:text>/</xsl:text>
>      <xsl:value-of select="name()"/>
>      <xsl:if test="count(../*[name()=name(current())]) > 1">
>        <xsl:text>[</xsl:text>
>        <xsl:value-of
> select="count(preceding-sibling::*[name()=name(current())]) + 1"/>
>        <xsl:text>]</xsl:text>
>      </xsl:if>
>    </xsl:template>

The schematron sources have several variants of this, targetting
different use cases. using name() is fine for human-oriented paths in
error reprorting etc, but if you need to execute the paths the problem
is thatit uses namespace prefixes from the  source file, so you need to
bind the same prefixes in the context that the xpath is executed.

Quite true.


(BTW -- somewhat OT -- where are the Schematron XSLTs obtainable?)

   <xsl:template match="*" mode="xpath-step">
     <xsl:text>/*</xsl:text>
     <xsl:if test="count(../*) > 1">
       <xsl:text>[</xsl:text>
       <xsl:value-of select="count(preceding-sibling::*) + 1"/>
       <xsl:text>]</xsl:text>
     </xsl:if>
   </xsl:template>

makes xpaths that are a bit less informative to a human reader  /*[33]
instead of /xhtml:table[2]  but don't have a dependency on namespace
context.

Similarly but oppositely, one can intervene to make the path even more informative to the human reader, while sometimes more dependent on local context, as in


<xsl:template match="div" mode="xpath-step">
   <xsl:text>/div[@id='</xsl:text>
   <xsl:value-of select="@id"/>
   <xsl:text>']</xsl:text>
</xsl:template>

... when one knows that every div has an @id, each @id is unique, and they are useful.

So you get paths like

/tei/text/div[@id='ch2']/p[3]

and such.

(variants of this generate /*[local-name()='table'][2] or (for xpath 2)
/*:table[2] if you want a version which shows the variable name but
without namespace dependency)

Cool.


Cheers,
Wendell



======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.