Re: [xsl] Dividing a long document into seperate documents

Subject: Re: [xsl] Dividing a long document into seperate documents
From: "Jay Bryant" <jay@xxxxxxxxxxxx>
Date: Wed, 16 Aug 2006 13:07:31 -0500
Because you are reaching into the metadata element.

Replace

<xsl:result-document href="{concat('rdf',
count(preceding-sibling::oai_dc:dc) +1, '.rdf')}">

with

  <xsl:result-document href="{concat('rdf',
count(../preceding-sibling::metadata[oai_dc:dc]) +1, '.rdf')}">

Notice that it's now counting metadata elements that have oai_dc:dc
children.

Also, you might try the following arrangement:

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

<xsl:template match="metadata">
  <xsl:result-document href="{concat('rdf',
count(preceding-sibling::metadata[oai_dc:dc]) + 1, '.rdf')}">
    <xsl:apply-templates/>
  </xsl:result-document>
</xsl:template>

<xsl:template match="oai_dc:dc">
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#";
xmlns:dc="http://purl.org/dc/elements/1.1/";
xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/";>

<xsl:variable name="identifier">
<xsl:value-of select="normalize-space(dc:identifier)"/>
</xsl:variable>
<rdf:Description>
<xsl:attribute name="rdf:about"><xsl:value-of
select="$identifier"/></xsl:attribute>
<rdf:type rdf:resource="http://purl.org/gem/qualifiers/GEM2"/>
        <xsl:apply-templates select="dc:identifier"/>
<xsl:apply-templates select="dc:title"/>
<xsl:apply-templates select="dc:creator"/>
<xsl:apply-templates select="dc:subject"/>
<xsl:apply-templates select="dc:format"/>
<xsl:apply-templates select="dc:description"/>
<xsl:apply-templates select="dc:publisher"/>
<xsl:apply-templates select="dc:date"/>
<xsl:apply-templates select="dc:type"/>
<xsl:apply-templates select="dc:contributor"/>
<xsl:apply-templates select="dc:coverage"/>
<xsl:apply-templates select="dc:rights"/>
<xsl:apply-templates select="dc:language"/>
     <xsl:apply-templates select="dc:relation"/>
    <xsl:apply-templates select="dc:source"/>
</rdf:Description>
</rdf:RDF>
</xsl:template>

XSLT's natural model is applying templates. The code can sometimes be easier
to understand if it follows the template path.

Jay Bryant
Bryant Communication Services

----- Original Message ----- 
From: "Choi Ryan" <yutaka234@xxxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Wednesday, August 16, 2006 12:28 PM
Subject: Re: [xsl] Dividing a long document into seperate documents


> Um. It is kind of weired. Your suggestion works for a similar example, but
> not in this xslt.  Have no idea why...
>
> Any idea??
>
> Here is my xslt... and my xml files.. Any suggestion???
>
> XSLT:
> <xsl:stylesheet version="2.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
> xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#";
> xmlns:dc="http://purl.org/dc/elements/1.1/";
> xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"; >
>
> <xsl:output encoding="UTF-8" method="xml" indent="yes"  />
>
> <xsl:template match="uiuc">
> <xsl:for-each select="metadata/oai_dc:dc">
>   <xsl:result-document href="{concat('rdf',
> count(preceding-sibling::oai_dc:dc) +1, '.rdf')}">
>
>     <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
> xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#";
> xmlns:dc="http://purl.org/dc/elements/1.1/";
> xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/";>
>
> <xsl:variable name="identifier">
> <xsl:value-of select="normalize-space(dc:identifier)"/>
> </xsl:variable>
> <rdf:Description>
> <xsl:attribute name="rdf:about"><xsl:value-of
> select="$identifier"/></xsl:attribute>
> <rdf:type rdf:resource="http://purl.org/gem/qualifiers/GEM2"/>
>         <xsl:apply-templates select="dc:identifier"/>
> <xsl:apply-templates select="dc:title"/>
> <xsl:apply-templates select="dc:creator"/>
> <xsl:apply-templates select="dc:subject"/>
> <xsl:apply-templates select="dc:format"/>
> <xsl:apply-templates select="dc:description"/>
> <xsl:apply-templates select="dc:publisher"/>
> <xsl:apply-templates select="dc:date"/>
> <xsl:apply-templates select="dc:type"/>
> <xsl:apply-templates select="dc:contributor"/>
> <xsl:apply-templates select="dc:coverage"/>
> <xsl:apply-templates select="dc:rights"/>
> <xsl:apply-templates select="dc:language"/>
>      <xsl:apply-templates select="dc:relation"/>
>     <xsl:apply-templates select="dc:source"/>
> </rdf:Description>
> </rdf:RDF>    </xsl:result-document></xsl:for-each>
> </xsl:template>
>
> <xsl:template match="dc:identifier">
>   <dc:identifier rdf:resource="{normalize-space(.)}"/>
> </xsl:template>
>
> <xsl:template match="dc:title">
> <dc:title>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:title>
> </xsl:template>
>
> <xsl:template match="dc:creator">
> <dc:creator>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:creator>
> </xsl:template>
>
> <xsl:template match="dc:subject">
> <dc:subject>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:subject>
> </xsl:template>
>
> <xsl:template match="dc:format">
> <dc:format>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:format>
> </xsl:template>
>
> <xsl:template match="dc:description">
> <dc:description>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:description>
> </xsl:template>
>
> <xsl:template match="dc:publisher">
> <dc:publisher>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:publisher>
> </xsl:template>
>
> <xsl:template match="dc:date">
> <dc:date>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:date>
> </xsl:template>
>
> <xsl:template match="dc:type">
> <dc:type>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:type>
> </xsl:template>
>
> <xsl:template match="dc:contributor">
> <dc:contributor>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:contributor>
> </xsl:template>
>
> <xsl:template match="dc:coverage">
> <dc:coverage>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:coverage>
> </xsl:template>
>
> <xsl:template match="dc:language">
> <dc:language>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:language>
> </xsl:template>
>
> <xsl:template match="dc:rights">
> <dc:rights>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:rights>
> </xsl:template>
>
> <xsl:template match="dc:relation">
> <dc:relation>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:relation>
> </xsl:template>
>
> <xsl:template match="dc:source">
> <dc:source>
> <xsl:value-of select="normalize-space(.)"/>
> </dc:source>
> </xsl:template>
>
> </xsl:stylesheet>
>
>
> My xml file:
>
> <?xml-stylesheet type="text/xsl" href="uiuc_item.xsl"?>
> <uiuc>
> <metadata>
> <oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/";
> xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/";
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
>               http://www.openarchives.org/OAI/2.0/oai_dc.xsd";>
> <dc:title>Oldtown Folks</dc:title>
> <dc:creator>Stowe, Harriet Beecher, 1811-1896</dc:creator>
> <dc:subject>New England -- Social life and customs -- 
Fiction.</dc:subject>
> <dc:subject>Women -- New England -- Fiction.</dc:subject>
> <dc:subject>PS2954 .O4</dc:subject>
>
<dc:identifier>http://digital.library.upenn.edu/women/stowe/folks/folks.html
</dc:identifier>
>
> <dc:format>text/html</dc:format>
> <dc:description>Boston: Fields, Osgood, and Co., 1869</dc:description>
> <dc:publisher>Fields, Osgood, and Co.</dc:publisher>
> <dc:date>1869</dc:date>
> <dc:publisher>A Celebration of Women Writers</dc:publisher>
> <dc:date>2001-01-11</dc:date>
> <dc:type>Text</dc:type>
> </oai_dc:dc>
> </metadata>
> <metadata>
> <oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/";
> xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/";
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
>               http://www.openarchives.org/OAI/2.0/oai_dc.xsd";>
> <dc:title>An Island Garden</dc:title>
> <dc:creator>Thaxter, Celia, 1835-1894</dc:creator>
> <dc:creator>Hassam, Childe</dc:creator>
> <dc:subject>Celia Thaxter's Garden (Appledore Island, Me.).</dc:subject>
> <dc:subject>Thaxter, Celia, 1835-1894.</dc:subject>
> <dc:subject>Gardens -- Maine -- Appledore Island.</dc:subject>
> <dc:subject>Appledore Island (Me.) -- Description and travel.</dc:subject>
> <dc:subject>SB466 .U6 T5</dc:subject>
>
<dc:identifier>http://digital.library.upenn.edu/women/thaxter/garden/garden.
html</dc:identifier>
>
> <dc:format>text/html</dc:format>
> <dc:publisher>A Celebration of Women Writers</dc:publisher>
> <dc:date>2001-07-13</dc:date><dc:type>Text</dc:type>
> </oai_dc:dc>
> </metadata>
> </uiuc>
>
>
>
> >From: "Jay Bryant" <jay@xxxxxxxxxxxx>
> >Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> >To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> >Subject: Re: [xsl] Dividing a long document into seperate documents
> >Date: Tue, 15 Aug 2006 16:53:57 -0500
> >
> >The reason it's creating just one record is because it's counting up the
> >preceding-sibling axis. As it happens, the metadata elements have no RDF
> >elements as preceding siblings, so it never gets anywhere. If you're
> trying
> >to create an RDF file for each metadata/oai_dc:dc element, then count
> those
> >elements, thus:
> >
> ><xsl:for-each select="metadata/oai_dc:dc">
> >   <xsl:result-document href="{concat('rdf',
> >count(preceding-sibling::oai_dc:dc) +1, '.rdf')}">
> >     <!-- Snipped the other processing -->
> >   </xsl:result-document>
> ></xsl:for-each>
> >
> >HTH
> >
> >Jay Bryant
> >Bryant Communication Services
> >
>
> _________________________________________________________________
> MSN Messenger8& EkGX ?B6s@N;s?! @V4B D#18?M 4kH-8& 3*4)<<?d.
> http://messenger.msn.co.kr

Current Thread