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

Re: inserting a child element while honoring the paren

Subject: Re: inserting a child element while honoring the parent element's content model
From: "Chris Papademetrious christopher.papademetrious@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 21 Feb 2023 17:52:46 -0000
Re:  inserting a child element while honoring the paren
Hi Wendell,

That's mostly what I did in this template:

  <!-- add <j> to <topic>, honoring the following content model:
         topic = a?, b?, c?, j, x?, y?, z?, topic* -->
  <xsl:template match="topic[not(j)]" mode="add-j">
    <xsl:variable name="stuff-before-j"
select="(a|b|c)/(.|preceding-sibling::node())" as="node()*"/>
    <xsl:copy>
      <xsl:sequence select="@*|$stuff-before-j"/>
      <j/>
      <xsl:sequence select="node() except $stuff-before-j"/>
    </xsl:copy>
  </xsl:template>

The part that was tricky for me at first was figuring out how to handle <a>,
<b>, and <c> being present or absent in any combination. But this seems to
work pretty well!


Hi Eliot (again),

I've been thinking that it would be nice to have some helper
functions/templates to make DITA element insertion easier. For example, if I
want to insert an <othermeta> element into a DITA topic:

<topic>
  <title>...</title>
  <prolog>
    <author type="owner">myeong</author>
    <metadata>
      <othermeta content="foo" name="bar"/>
    </metadata>
    <resourceid appid="hile_repeatCopy"/>
  </prolog>
  <body>...</body>
</topic>

I would want to reuse whatever elements might already exist, or create missing
elements as needed while honoring content models:

topic = title, titlealts?, (shortdesc | abstract)?, prolog?, body?,
related-links?, topic* }
prolog = author*, source?, publisher?, copyright*, critdates?, permissions?,
(metadata | change-historylist)*, resourceid*, (data | sort-as | data-about |
foreign | mathml | svg-container | unknown)*
metadata = audience*, category*, keywords*, prodinfo*, othermeta*, (data |
sort-as | data-about | foreign | mathml | svg-container | unknown)*

If I figure out a nice solution to this, I will let you know.


  *   Chris


From: Piez, Wendell A. (Fed) wendell.piez@xxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Tuesday, February 21, 2023 10:36 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re:  inserting a child element while honoring the parent
element's content model

Chris,

How about (.|preceding-sibling::node), as in
$fromhere/(.|preceding-sibling::node()) ?

Also useful for counting, as in count(self::h1|preceding-sibling::h1).

Cheers, Wendell


From: Chris Papademetrious
christopher.papademetrious@xxxxxxxxxxxx<mailto:christopher.papademetrious@syn
opsys.com>
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx<mailto:xsl-list-service@xxxxxxxxxxxx
rytech.com>>
Sent: Monday, February 20, 2023 3:29 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx<mailto:xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Subject: Re:  inserting a child element while honoring the parent
element's content model

Hi Eliot,

I hadn't known about these operators, thank you!

I couldn't see a clean way to use "<<"  for a preceding-sibling-or-self:: axis
for this specific case, but I will definitely keep these operators in mind for
future DiTA processing tasks.


  *   Chris
XSL-List info and
archive<https://urldefense.com/v3/__http:/www.mulberrytech.com/xsl/xsl-list__
;!!A4F2R9G_pg!Z3nf-HGm4cQQ0xPYAPTIW7s2XVGPGxeUm8UkvupvKaxYpDgxu9bfeGyVc4wB7uA
Y2RvbN2PpxzO8q8-B3hHzltXwWc3ulHu6OekNmOilvZ_7MYLVdnhD$>
EasyUnsubscribe<https://urldefense.com/v3/__http:/lists.mulberrytech.com/unsu
b/xsl-list/3380743__;!!A4F2R9G_pg!Z3nf-HGm4cQQ0xPYAPTIW7s2XVGPGxeUm8UkvupvKax
YpDgxu9bfeGyVc4wB7uAY2RvbN2PpxzO8q8-B3hHzltXwWc3ulHu6OekNmOilvZ_7MYIZ-WDh$>
(by email<>)

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.