xsl-list
[Top] [All Lists]

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

2006-08-16 11:07:55
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(_at_)hotmail(_dot_)com>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
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(_at_)bryantcs(_dot_)com>
Reply-To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
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



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


_________________________________________________________________
MSN Messenger를 통해 온라인상에 있는 친구와 대화를 나누세요.
http://messenger.msn.co.kr


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




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