1

Я пытаюсь преобразовать следующий каталог DublinCore XML:

<?xml version="1.0" encoding="UTF-8"?>
<articlesinDublinCore xmlns:dc="http://purl.org/dc/elements/1.1/">
<article>
  <dc:creator>Laura Steinert</dc:creator>
  <dc:creator>Ulrich Hoppe</dc:creator>
  <dc:language>English</dc:language>
  <dc:date>2015-09-16</dc:date>
  <dc:title>Using Network Analytics for the Recommendation of Scientific Papers
  </dc:title>
  <dc:format>PDF</dc:format>
  <dc:publisher>Springer</dc:publisher>
  <dc:type>Text</dc:type>
</article>
<article>
<dc:contributor>Nicholas Baloian</dc:contributor>
<dc:contributor>Yasser Zorian</dc:contributor>
  <dc:language>English</dc:language>
  <dc:date>2015-09-16</dc:date>      
  <dc:title>Collaboration and Technology</dc:title>
  <dc:format>PDF</dc:format>      
  <dc:publisher>Springer</dc:publisher>
  <dc:type>Collection</dc:type>
</article>
</articlesinDublinCore>

в каталог MARC, используя официальный файл XLST следующим образом:

<xsl:template match="/">
    <record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://www.loc.gov/MARC21/slim 
        http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"  > 
        <datafield tag="042" ind1=" " ind2=" ">
            <subfield code="a">dc</subfield>
        </datafield>

        <xsl:for-each select="//dc:contributor">
            <datafield tag="720" ind1="0" ind2="0">
                <subfield code="a">
                    <xsl:value-of select="."/>
                </subfield>
                <subfield code="e">collaborator</subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:coverage">
            <datafield tag="500" ind1=" " ind2=" ">
                <subfield code="a">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:creator">
            <datafield tag="720" ind1=" " ind2=" ">
                <subfield code="a">
                    <xsl:value-of select="."/>
                </subfield>
                <subfield code="e">author</subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:date">
            <datafield tag="260" ind1=" " ind2=" ">
                <subfield code="c">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each> 

        <xsl:for-each select="//dc:description">
            <datafield tag="520" ind1=" " ind2=" ">
                <subfield code="a">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:format">
            <datafield tag="856" ind1=" " ind2=" ">
                <subfield code="q">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:identifier">
            <datafield tag="024" ind1="8" ind2=" ">
                <subfield code="a">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:language">
            <datafield tag="546" ind1=" " ind2=" ">
                <subfield code="a">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:publisher">
            <datafield tag="260" ind1=" " ind2=" ">
                <subfield code="b">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:relation">
            <datafield tag="787" ind1="0" ind2=" ">
                <subfield code="n">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:rights">
            <datafield tag="540" ind1=" " ind2=" ">
                <subfield code="a">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:source">
            <datafield tag="786" ind1="0" ind2=" ">
                <subfield code="n">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:subject">
            <datafield tag="653" ind1=" " ind2=" ">
                <subfield code="a">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:title[1]">
            <datafield tag="245" ind1="0" ind2="0">
                <subfield code="a">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:title[position()>1]">
            <datafield tag="246" ind1="3" ind2="3">
                <subfield code="a">
                    <xsl:value-of select="."/>
                </subfield>
            </datafield>
        </xsl:for-each>

        <xsl:for-each select="//dc:type">
            <datafield tag="655" ind1="7" ind2=" ">
                <subfield code="a">
                    <xsl:value-of select="."/>
                </subfield>
                <subfield code="2">local</subfield>
            </datafield>
        </xsl:for-each>
    </record>
</xsl:template>

Полученный преобразованный файл накапливает все элементы в двух статьях в одну запись следующим образом (я цитирую только часть этого):

<?xml version="1.0" encoding="utf-8"?>
<record xmlns="http://www.loc.gov/MARC21/slim"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/MARC21/slim              http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">
<datafield tag="042" ind1=" " ind2=" ">
<subfield code="a">dc</subfield>
</datafield>
<datafield tag="720" ind1="0" ind2="0">
  <subfield code="a">Nicholas Baloian</subfield>
  <subfield code="e">collaborator</subfield>
</datafield>
<datafield tag="720" ind1="0" ind2="0">
  <subfield code="a">Yasser Zorian</subfield>
  <subfield code="e">collaborator</subfield>
</datafield>
</record>

Однако мне нужно преобразовать коллекцию элементов в DoublineCore в коллекцию элементов в формате MARC. У кого-нибудь есть идея, как я могу отредактировать выражение XPATH в файле XLST (второй блок кода), чтобы получить желаемый результат?

Заранее спасибо.

0