Hello Alexander,

> Currently, bfe_authors.py uses
>
>     authors = []
>     authors_1 = bfo.fields('100__')
>     authors_2 = bfo.fields('700__')
>
> This enforces authors to be considered only if both indicators are
> blank. However, you may notice that from the authoritative definition at
>
>        http://www.loc.gov/marc/bibliographic/bd100.html

this is an example of the default values of Invenio not being Marc21
compliant.  I've complained about this a few times, and I should have
filled a task about those defaults, and sent a few patches, although I
haven't yet ;-(.

The problem of the default values not being correct has those
consequences: if you import records from another catalog, those values
mishave in Invenio.  Librarians (and library-educated computer people)
expect those records to behave like in the other system.  So it is
interoperability and economy.

The problem arises not only in those Python bibformat snippets, but also
in bibindex definition, and all export formats.  For example, my
bfe_author.py has those fields:
 
    if (authors_type in ['','personal']):
        authors.extend(bfo.fields('100%%'))
    if (authors_type in ['','corporate']):
        authors.extend(bfo.fields('110%%'))
    if (authors_type in ['','meeting']):
        authors.extend(bfo.fields('111%%'))
    if (authors_type in ['','personal']):
        authors.extend(bfo.fields('700%%'))
    if (authors_type in ['','corporate']):
        authors.extend(bfo.fields('710%%'))
    if (authors_type in ['','meeting']):
        authors.extend(bfo.fields('711%%'))
    if (authors_type in ['','personal','corporate','meeting']):
        authors.extend(bfo.fields('720%%'))

(In my case I have the need of show sometimes personal or corporate
authors, depending of the collection; I understand that it is not always
the case).

In bibindex (/admin/bibindex/bibindexadmin.py/field), you have also to
add those fields:

 author 100%, 110%, 111%, 700%, 710%, 711%, 720%

In the Marcxml to DC xls xls as well:

  <xsl:for-each select="datafield[(@tag=100 or @tag=110 or @tag=111)]">
   <dc:creator>
    <xsl:call-template name="subfieldSelect">
     <xsl:with-param name="codes">ab</xsl:with-param>
    </xsl:call-template>
   </dc:creator>
  </xsl:for-each>

  <xsl:for-each select="datafield[(@tag=700 or @tag=710 or @tag=711 or 
@tag=720)]">
   <dc:contributor>
    <xsl:call-template name="subfieldSelect">
     <xsl:with-param name="codes">ab</xsl:with-param>
    </xsl:call-template>
   </dc:contributor>
  </xsl:for-each>

I borrowed the following xsl function from somewhere (LC, I think):

  <!--- Added FJ 5-feb-2010 to resolve template -->
  <xsl:template name="subfieldSelect">
    <xsl:param name="codes">abcdefghijklmnopqrstuvwxyz</xsl:param>
    <xsl:param name="delimeter">
      <xsl:text> </xsl:text>
    </xsl:param>
    <xsl:variable name="str">
      <xsl:for-each select="subfield">
        <xsl:if test="contains($codes, @code)">
          <xsl:value-of select="text()"/>
          <xsl:value-of select="$delimeter"/>
        </xsl:if>
      </xsl:for-each>
    </xsl:variable>
    <xsl:value-of 
select="substring($str,1,string-length($str)-string-length($delimeter))"/>
  </xsl:template>

And so on.  It is a major task, but much needed.  Newcomers are likely
to feel frustated due to the system not behaving as espected.

Ferran

Reply via email to