xsl-list
[Top] [All Lists]

Re: [xsl] Namespace handling question

2010-05-14 14:13:56
On 14/05/2010 19:36, Bridger Dyson-Smith wrote:
All -
thanks for reading. I'm trying to generate OAI records for a series of
XML files; while I have the bulk of the processing working, I'm stuck
on a namespaces issue. I understand how to include/add a namespace to
my output file, I'm curious if there's a way to keep all of the
namespace information in the XML header - primarily to keep things
tidy. I've found a short XSL from Michael Kay on the dpawson website
for cleaning up the XML after the initial transform and I've
incorporated that as a second step in the process. Is there a good way
to combine the two?

And a second, related question: there is an xsi:schemaLocation that I
apparently need to include in the XML header. Attempts at using
<xsl:import-schema>  and<xsl:namespace>  haven't yielded correct
results. Would someone be willing to recommend a method for this? (See
the final example for my goal output).

I'm using XLST 2.0 and the Saxon-HE 9.2.0.6 in the oXygen editor.

Again, many thanks. Please excuse me if this has been beaten to death
- web searches and the list archives have so far refused to answer
this.
Best,
Bridger

My original XML looks something like this:
<root>
        <row>
                <title>Mice</title>
                <author>Kat, Krazy</author>
                <subject>bricks</subject>
                <number>01101100011011110111011001100101</number>
        </row>    
</root>

And I'm processing with the following XSL:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="2.0" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/";
     xmlns:dc="http://purl.org/dc/elements/1.1/";
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>

     <xsl:output method="xml" media-type="text/xml" indent="yes"/>


     <xsl:template match="/">
         <xsl:apply-templates />
     </xsl:template>

That is the default so you don't need to declare this template.

     <xsl:template match="row">
         <xsl:for-each select=".">

xsl:for-each iterating over . is a no-op so thi scan be omitted


             <xsl:result-document href="{concat(child::title,
child::number, '.xml')}">
You only need xsl;element and xsl:namespace if these are going to use values dynnamically generated at run time.
                 <xsl:element name="oai_dc:dc">
                     <xsl:namespace name="oai_dc"
select="'http://www.openarchives.org/OAI/2.0/oai_dc/'"/>
                     <xsl:namespace name="xsi"
select="'http://www.w3.org/2001/XMLSchema-instance'"/>




so the above could be written
  <oai_dc:dc>
as all these namespaces are already in scope
although you say above you want a schemalocation attribute, this is not a special attribute to xsl so you just generate it as any other, so for example as a lteral result element attribute

<oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/http://www.openarchives.org/OAI/2.0/oai_dc.xsd";>


so putting it together and ignoring the xsl:result-document for now I think you want something like


<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                xmlns:xs="http://www.w3.org/2001/XMLSchema";
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
                xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/";
                xmlns:dc="http://purl.org/dc/elements/1.1/";
                >

<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="row">
<oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/http://www.openarchives.org/OAI/2.0/oai_dc.xsd";>
  <dc:publisher>Ignatz Mouse Publishers</dc:publisher>
  <dc:creator><xsl:value-of select="author"/></dc:creator>
  <dc:title><xsl:value-of select="title"/></dc:title>
  <dc:subject><xsl:value-of select="subject"/></dc:subject>
  <dc:identifier><xsl:value-of select="number"/></dc:identifier>
</oai_dc:dc>
</xsl:template>
</xsl:stylesheet>




which produces


$ saxon9 ns1.xml ns1.xsl
<?xml version="1.0" encoding="UTF-8"?>
<oai_dc:dc xmlns:xs="http://www.w3.org/2001/XMLSchema";
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
           xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/";
           xmlns:dc="http://purl.org/dc/elements/1.1/";

xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/http://www.openarchives.org/OAI/2.0/oai_dc.xsd";>
   <dc:publisher>Ignatz Mouse Publishers</dc:publisher>
   <dc:creator>Kat, Krazy</dc:creator>
   <dc:title>Mice</dc:title>
   <dc:subject>bricks</dc:subject>
   <dc:identifier>01101100011011110111011001100101</dc:identifier>
</oai_dc:dc>







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

<Prev in Thread] Current Thread [Next in Thread>