Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > how to output unresolved xinclude element

Reply
Thread Tools

how to output unresolved xinclude element

 
 
shaun roe
Guest
Posts: n/a
 
      03-07-2007
I should like to use xslt to produce a document like the following:

<crate xmlnsi="http://www.w3.org/2001/XInclude">
<rod id="0">
<slot>1</slot>
<xi:include href="./endcapA/disk/1a/10011.xml"/> <!--D1A TR
middles-->
<xi:include href="./endcapA/disk/1a/10012.xml"/> <!--D1A TR
middles-->
<xi:include href="./endcapA/disk/1a/10001.xml"/> <!--D1A TR
outers-->
<xi:include href="./endcapA/disk/1a/10002.xml"/> <!--D1A TR
outers-->
<xi:include href="./endcapA/disk/2a/20001.xml"/> <!--D2A TR
outers-->
<xi:include href="./endcapA/disk/2a/20002.xml"/> <!--D2A TR
outers-->
<xi:include href="./endcapA/disk/3a/30001.xml"/> <!--D3A TR
outers-->
<xi:include href="./endcapA/disk/3a/30002.xml"/> <!--D3A TR
outers-->
</rod>
</crate>

i.e. it should contain 'manufactured' unresolved xi:include elements.
How can I get my xsl to output such an element?

thanks

shaun
 
Reply With Quote
 
 
 
 
Joseph Kesselman
Guest
Posts: n/a
 
      03-07-2007
> i.e. it should contain 'manufactured' unresolved xi:include elements.
> How can I get my xsl to output such an element?


The simplest answer: http://www.w3.org/TR/xslt#element-namespace-alias

An alternative is to construct the element explicitly using the
xsl:element directive.

Either will prevent the new element from being prematurely interpreted.

(These tricks are more often used when writing stylesheets that produce
stylesheets, but they're certainly applicable to this problem as well.)

--
Joe Kesselman / Beware the fury of a patient man. -- John Dryden
 
Reply With Quote
 
 
 
 
shaun roe
Guest
Posts: n/a
 
      03-07-2007

The namespace-alias seems neat, but I get a bit of ugliness with it:

I declare my namespaces:

<xsl:stylesheet xmlnssl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlnsi="http://www.w3.org/2001/XInclude"
xmlnsout="myAlias">

and my alias:

<xsl:namespace-alias stylesheet-prefix="xout" result-prefix="xi"/>

and then use it...

<xout:include href="concat($MurPathRoot,$diskpath,'/',xmlMur) "/>


and sure enough all my elements come out ok:

<xout:include href="./endcapA/disk/1a/10301"/>


but the root document element is:

<configuration xmlnsi="http://www.w3.org/2001/XInclude"
xmlnsout="http://www.w3.org/2001/XInclude">

i.e. its declared both the original xi: and my xout: ... is this
expected?

thanks

shaun



In article <45eee4de$1@kcnews01>,
Joseph Kesselman <(E-Mail Removed)> wrote:

> http://www.w3.org/TR/xslt#element-namespace-alias

 
Reply With Quote
 
Joseph Kesselman
Guest
Posts: n/a
 
      03-07-2007
shaun roe wrote:
> i.e. its declared both the original xi: and my xout: ... is this
> expected?


There's a similar directive which lets you suppress namespace
declarations that aren't in use. See the spec and/or Kay's book, or wait
a few hours for me to get around to looking it up.

--
Joe Kesselman / Beware the fury of a patient man. -- John Dryden
 
Reply With Quote
 
Joe Kesselman
Guest
Posts: n/a
 
      03-08-2007
Joseph Kesselman wrote:
> There's a similar directive which lets you suppress namespace
> declarations that aren't in use. See the spec and/or Kay's book, or wait
> a few hours for me to get around to looking it up.


Since you waited: What you want is the exclude-result-prefixes attribute
of the xsl:stylesheet element. It's described in
http://www.w3.org/TR/xslt#section-Cr...and-Attributes

--
() ASCII Ribbon Campaign | Joe Kesselman
/\ Stamp out HTML e-mail! | System architexture and kinetic poetry
 
Reply With Quote
 
Richard Tobin
Guest
Posts: n/a
 
      03-08-2007
In article <(E-Mail Removed)>,
Joe Kesselman <(E-Mail Removed)> wrote:

>> There's a similar directive which lets you suppress namespace
>> declarations that aren't in use. See the spec and/or Kay's book, or wait
>> a few hours for me to get around to looking it up.


>Since you waited: What you want is the exclude-result-prefixes attribute
>of the xsl:stylesheet element. It's described in
>http://www.w3.org/TR/xslt#section-Cr...and-Attributes


I think this won't necessarily do quite the right thing in this case.
Despite its name, exclude-result-prefixes specifies a namespace uri to
be excluded, not a prefix. Since in this case he does need the
xinclude namespace, he may well still get a spurious xout prefix
declared somewhere.

-- Richard
--
"Consideration shall be given to the need for as many as 32 characters
in some alphabets" - X3.4, 1963.
 
Reply With Quote
 
Joe Kesselman
Guest
Posts: n/a
 
      03-08-2007
Richard Tobin wrote:
> I think this won't necessarily do quite the right thing in this case.
> Despite its name, exclude-result-prefixes specifies a namespace uri to
> be excluded, not a prefix. Since in this case he does need the
> xinclude namespace, he may well still get a spurious xout prefix
> declared somewhere.


In the implementation I'm familiar with (Xalan), it should do the right
thing, because it's take as a request not to issue any declarations for
prefixes bound to that URI except those which are actually used by an
element or attribute. But while that's a reasonable interpretation It
may not be the only one... Best suggestion I can make is to try it and
see what happens.

If it doesn't work -- well, an unused namespace declaration really is
pretty harmless.


--
() ASCII Ribbon Campaign | Joe Kesselman
/\ Stamp out HTML e-mail! | System architexture and kinetic poetry
 
Reply With Quote
 
shaun roe
Guest
Posts: n/a
 
      03-08-2007
In article <(E-Mail Removed)>,
Joe Kesselman <(E-Mail Removed)> wrote:

> Richard Tobin wrote:
> > I think this won't necessarily do quite the right thing in this case.
> > Despite its name, exclude-result-prefixes specifies a namespace uri to
> > be excluded, not a prefix. Since in this case he does need the
> > xinclude namespace, he may well still get a spurious xout prefix
> > declared somewhere.

>
> In the implementation I'm familiar with (Xalan), it should do the right
> thing, because it's take as a request not to issue any declarations for
> prefixes bound to that URI except those which are actually used by an
> element or attribute. But while that's a reasonable interpretation It
> may not be the only one... Best suggestion I can make is to try it and
> see what happens.
>
> If it doesn't work -- well, an unused namespace declaration really is
> pretty harmless.


I did indeed try this as a first move, and as Richard Tobin has said, it
did not suppress the declaration. (using Saxon) I can live with two
declarations of the namespace, its just not as neat as I'd hoped.

In fact, give that both namespaces are declared anyway in the output, I
found I can reverse the alias/output assignation:

<xsl:stylesheet xmlnssl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns="http://www.w3.org/2001/XInclude"
xmlnsi="myAlias">

..
..
..

<xi:include href="concat($MurPathRoot,$diskpath,'/',xmlMur) "/>


and get, as output:

<configuration xmlns="http://www.w3.org/2001/XInclude"
xmlnsi="http://www.w3.org/2001/XInclude">
..
..
..
..
<xi:include href="./endcapA/disk/2a/20302"/>


which leaves my end users looking at the familiar <xi:include .../>,
which I suspect they will be happier with.

thanks for the help

shaun
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
how to Update/insert an xml element's text----> (<element>text</element>) HANM XML 2 01-29-2008 03:31 PM
[xinclude] How to use indirection in xinclude like "Catalog" in the entity world ? SL XML 0 02-15-2005 01:58 PM
XInclude Erdem Guven XML 1 08-12-2004 07:51 AM
Xinclude (was: Re: Nested <!ENTITY> Tags?) Ed Dennison XML 0 09-12-2003 07:47 PM



Advertisments