1

私はw3cbibtex変換を使用してbibtexファイルを生成していますが、残念ながら、同じ年に論文の著者キーが重複して生成されています。

  • ジョーンズ:2012
  • ジョーンズ:2012

問題のテンプレートはxsltbibtex-labelで名前が付けられています。

bibtex-labelが次のようになるように、作成者ごと、年ごとのカウント値を追加するにはどうすればよいですか。

  • ジョーンズ:2012a
  • ジョーンズ:2012b

特に非xml出力の場合、この種のことを行うための適切なリソースを見つけることができません。

入力例(ここから):

<rdf:RDF xmlns="http://www.w3.org/2001/02pd/rec54#"
    xmlns:contact="http://www.w3.org/2000/10/swap/pim/contact#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:doc="http://www.w3.org/2000/10/swap/pim/doc#"
    xmlns:mat="http://www.w3.org/2002/05/matrix/vocab#"
    xmlns:org="http://www.w3.org/2001/04/roadmap/org#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rec="http://www.w3.org/2001/02pd/rec54#">

    <REC rdf:about="http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001">
        <dc:date>1998-10-01</dc:date>
        <dc:title>Document Object Model (DOM) Level 1</dc:title>
        <doc:versionOf rdf:resource="http://www.w3.org/TR/REC-DOM-Level-1"/>
        <editor rdf:parseType="Resource">
            <contact:fullName>Arnaud Le Hors</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>Scott Isaacs</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>Steve Byrne</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>Mike Champion</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>Gavin Nicol</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>Lauren Wood</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>Ian Jacobs</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>Robert Sutor</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>Jonathan Robie</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>Chris Wilson</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>Vidur Apparao</contact:fullName>
        </editor>
        <org:deliveredBy rdf:parseType="Resource">
            <contact:homePage rdf:resource="http://www.w3.org/DOM/Group/"/>
        </org:deliveredBy>
        <mat:hasErrata rdf:resource="http://www.w3.org/DOM/updates/REC-DOM-Level-1-19981001-errata.html"/>
    </REC>


    <REC rdf:about="http://www.w3.org/TR/1998/REC-html40-19980424">
        <rdf:type rdf:resource="http://www.w3.org/2001/02pd/rec54#Superseded"/>
        <dc:date>1998-04-24</dc:date>
        <dc:title>HTML 4.0 Specification</dc:title>
        <doc:versionOf rdf:resource="http://www.w3.org/TR/html40"/>
        <editor rdf:parseType="Resource">
            <contact:fullName>Arnaud Le Hors</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>Ian Jacobs</contact:fullName>
        </editor>
        <editor rdf:parseType="Resource">
            <contact:fullName>David Raggett</contact:fullName>
        </editor>
        <previousEdition rdf:resource="http://www.w3.org/TR/REC-html40-971218"/>
        <org:deliveredBy rdf:parseType="Resource">
            <contact:homePage rdf:resource="http://www.w3.org/MarkUp/"/>
        </org:deliveredBy>
        <mat:hasErrata rdf:resource="http://www.w3.org/MarkUp/html40-updates/REC-html40-19980424-errata.html"/>
    </REC>

</rdf:RDF>

出力例(フル):

@TechReport{LeHors:1998,
  author = {Arnaud Le Hors and Scott Isaacs and Steve Byrne and Mike Champion and Gavin Nicol and Lauren Wood and Ian Jacobs and Robert Sutor and Jonathan Robie and Chris Wilson and Vidur Apparao},
  title  = {{Document Object Model (DOM) Level 1}},
  note = {\url{http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001}. Latest version available at \url{http://www.w3.org/TR/REC-DOM-Level-1}},
  year = {1998},
  month = nov,
  bibsource = "http://www.w3.org/2002/01/tr-automation/tr.rdf",
  type = "Recommendation",
  institution = "W3C",
}

@TechReport{LeHors:1998,
  author = {Arnaud Le Hors and Ian Jacobs and David Raggett},
  title  = {{HTML 4.0 Specification}},
  note = {\url{http://www.w3.org/TR/1998/REC-html40-19980424}. Latest version available at \url{http://www.w3.org/TR/html40}},
  year = {1998},
  month = apr,
  bibsource = "http://www.w3.org/2002/01/tr-automation/tr.rdf",
  type = "Recommendation",
  institution = "W3C",
}

必要な出力:

@TechReport{LeHors:1998a,
  author = {Arnaud Le Hors and Scott Isaacs and Steve Byrne and Mike Champion and Gavin Nicol and Lauren Wood and Ian Jacobs and Robert Sutor and Jonathan Robie and Chris Wilson and Vidur Apparao},
  title  = {{Document Object Model (DOM) Level 1}},
  note = {\url{http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001}. Latest version available at \url{http://www.w3.org/TR/REC-DOM-Level-1}},
  year = {1998},
  month = nov,
  bibsource = "http://www.w3.org/2002/01/tr-automation/tr.rdf",
  type = "Recommendation",
  institution = "W3C",
}

@TechReport{LeHors:1998b,
  author = {Arnaud Le Hors and Ian Jacobs and David Raggett},
  title  = {{HTML 4.0 Specification}},
  note = {\url{http://www.w3.org/TR/1998/REC-html40-19980424}. Latest version available at \url{http://www.w3.org/TR/html40}},
  year = {1998},
  month = apr,
  bibsource = "http://www.w3.org/2002/01/tr-automation/tr.rdf",
  type = "Recommendation",
  institution = "W3C",
}
4

1 に答える 1

1

まず、safeSurnametranslate関数の関数を単純化するために、XSLTの上部に2つの変数を定義できます。

<xsl:variable name="nameIn" 
   select="'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.- 0123456789ñÑçÇáéíóúÃÉÃÓÚäëïöüÄËÃÖÜ'" />
<xsl:variable name="nameOut" 
   select="'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

これにより、より読みやすいコードを記述して、フォーマットされた名前を取得できるようになります。

<xsl:variable name="safeSurname" select="translate($surname, $nameIn, $nameOut)" />

接尾辞を生成するコードを見ると、より明確になります。これは、xsl:number関数を使用して、年と名前が一致する先行する兄弟の数をカウントすることで実現できます。数値ではなく文字を出力するためにformat属性を使用していることに注意してください。

<xsl:number 
   value="count(preceding-sibling::rec:REC
      [substring-before(dc:date/text(), '-') = $date]
      [translate(substring-after(rec:editor[1]/contact:fullName, ' '), $nameIn, $nameOut) = $safeSurname]
   ) + 1" 
   format="a"/>

このコードでは、 $dateは現在のREC要素の年です。

これがbibtex-labelの完全一致テンプレートです。コードをすべて1つのテンプレートに保持するために、モードbibtex-yearのdc:dateテンプレートの呼び出しを削除したことに注意してください。

<xsl:template match="*" mode="bibtex-label">
  <xsl:variable name="surname" select="substring-after(rec:editor[1]/contact:fullName, ' ')"/>
  <xsl:variable name="safeSurname" select="translate($surname, $nameIn, $nameOut)" />
  <xsl:variable name="date"  select="substring-before(dc:date/text(), '-')"/>
  <xsl:value-of select="concat($safeSurname, ':', $date)" />
  <xsl:number value="count(preceding-sibling::rec:REC[substring-before(dc:date/text(), '-') = $date][translate(substring-after(rec:editor[1]/contact:fullName, ' '), $nameIn, $nameOut) = $safeSurname]) + 1" format="a"/>
</xsl:template>
于 2012-08-27T08:37:33.300 に答える