A Long Overdue Post

So many things get lost to the edges. Too many commitments, too little motivation, etc. etc.

For many a moon I’ve been meaning to write up how Alex and I turned my QueerLCSH into a libGuide. I’m finally doing it!


 

The very first thing, of course, was the QueerLCSH itself which you can read ALL about over at that link. (Scroll past the updates for the original post and a link to the headings themselves)

Then I was alerted by Jessica Colbert that she had made a very cool LibGuide at her institution using my headings! Clicking any of the headings brings the user directly into the library catalog, performing a subject search.

Naturally I thought, “hey, why not do that here too?”

I talked to Alex about the idea and they were totally on board and excited. The question was how to turn a looooooong list of headings into a LibGuide without it being totally tedious?

As it usually is (to me), the answer was XSLT. Remember that I made my QueerLCSH by painstakingly (and tediously) downloading records 1-by-1 from id.loc.gov as RDF/XML (MADS and SKOS). That means that I still have all the raw material to work with and transform however I want.

Alex pointed out that even if I could generate the links easily, we’d have to load those links into the LibGuide one at a time, thereby returning us to tedium land. I reached out to Springshare Support, and learned that if you upload a set of links as a database, they can then flip them to be link assets. I don’t know why that power isn’t given to users of LibGuide software, but I was glad they were willing to do it for us.

At this point we were ready for me to generate the links. I wrote the following XSLT transformation:

<?xml version=”1.0″ encoding=”UTF-8″?>
<xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform&#8221;
    xmlns:xs=http://www.w3.org/2001/XMLSchema&#8221;
    xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance&#8221;
    xmlns:madsrdf=http://www.loc.gov/mads/rdf/v1#&#8221;
    xmlns:rdf=http://www.w3.org/1999/02/22-rdf-syntax-ns#&#8221;        xmlns:ng=http://www.netanelganin.com&#8221;
    exclude-result-prefixes=“xs” version=“2.0”>

    <xsl:function name=“ng:norm” as=“xs:string”>
       
<xsl:param name=“arg” as=“xs:string”/>
       
<xsl:sequence select=“normalize-space(lower-case(translate($arg, ‘-.,’, ‘   ‘)))”/>
   
</xsl:function>

    <xsl:template match=“/rdf:RDF”>
       
<xsl:apply-templates
            select=“madsrdf:Topic/madsrdf:authoritativeLabel | madsrdf:ComplexSubject/madsrdf:authoritativeLabel”>
           
<xsl:sort select=“ng:norm(.)”/>
       
</xsl:apply-templates>
   
</xsl:template>

    <xsl:template match=“madsrdf:authoritativeLabel”>
       


           
href=“{concat(‘http://search.library.brandeis.edu/primo_library/libweb/action/dlSearch.do?&query=sub,contains,&#8217;,ng:norm(.),’&vid=BRAND&institution=01BRAND&search_scope=ALMA‘)}”>
               
select=“.”/>
           

       


   
</xsl:template>

</xsl:stylesheet>

It’s pretty straight forward — there’s a function which I use to normalize the headings, it turns commas, periods and dashes into spaces. Then all the headings get sorted, and tossed into a big list. I’ve highlighted the most important part in bold. This is what’s called a ‘deep link’. I learned while doing this that you can’t just perform a subject search in Alma and then create a link based on that. It’ll decay eventually. You need to build a subject search using this deep link thing. Here’s some Ex Libris documentation on deep links.

As you can see there’s an “ng:norm(.)” buried in the middle of the deep link, that’s where the heading slides in. This particular link is a subject search, but it could easily be a browse search.

So this stylesheet processed all the headings and turned them into links which bring a user directly into our catalog. We tossed ’em all into an Excel spreadsheet, uploaded it to the LibGuide software, and then Springshare turned them into link assets!

Pretty cool, right?

Feel free to snag this XSLT and do the same for your institution, or if you’re interested in having something similar but aren’t sure how — let me know and I’ll try to help you out!

Some interesting things to consider:

  • We made no attempt to guarantee that any of the subject searches would actually return results. While that does mean patrons are presented with topics we don’t actually have any resources for, we couldn’t think of how to maintain the upkeep as new books entered our catalog. How would we know if new material matched a topic which we had previously removed?
  • We didn’t add any of the subject headings which were only added toLCSH for validation purposes, e.g. “African American gays–Fiction”, “Gay couples–Legal status, laws, etc” (in truth I’ve never really understood why they do that…)
  • We didn’t add any subdivisions unless the LGBT aspect was in that subdivision, i.e. “World War, 1939-1945–Participation, Gay” but not “Bisexuality — Religious aspects”. We felt that performing the subject search of the main topical term itself without the subdivisions would probably be sufficient.
  • If you do decide to include subdivisions, consider the pattern headings, ex. “Gay rights–Religious aspects–Baptists, [Catholic Church, etc.]” searching that subject string as is would be unfruitful because that isn’t how pattern headings look in the wild.
  • We opted not to include any of the Library of Congress Genre/Form Terms or Library of Congress Demographic Group Terms because in our ILS it is not possible for users to actually target a search to those fields. If it becomes possible, we’ll add ’em in!
  • Scope notes: keep ’em or not?

 

Upkeep:

After the initial transformations were done, I stepped back from the project and Alex now maintains the LibGuide. They check the New LCSH each month and add any new relevant terms themselves.

The Future of Access Points

Authorized access point — Here’s where we REALLY get to the fun stuff! You’ll note that in current RDA/MARC authority records there is no separation between the preferred title and the authorized access point.

I said this in an earlier post — and I thought it was worth expanding on. This is that expansion.


 

As I continue to RIMMF my way along through comicbook-land, and as I continue to create name authority records in the Hebraica NACO funnel, I am also continuing to make access points.

Authorized access points (AAP) and variant access points (VAP) serve important roles in our bibliographic retrieval systems, so we should talk about them.

What are we even doing again?

It’s crucial that we (as catalogers and also the people who design our systems) think about what the heck we’re doing, and why we’re doing it. Why do we have AAPs?

A brief answer:

We have AAPs so that we can uniquely identify Agents (people/families/corporate bodies) Resources (works/expressions/manifestations/items) and Subjects. Furthermore we have them to serve as human-readable (and understandable) names for those same Agents, Resources, and Subjects.

Notice that that’s two entirely unrelated things that our current AAPs are supposed to be doing. Uniqueness, and human understandability are different!

Of course, it’s because card catalog.

(I’m trying to turn that into a stock phrase to represent why we do so much of what we do)

The Library of Congress has always recognized that we’re attempting to serve two masters and that using the strings as the unique identifier wasn’t ideal. That’s why every name authority record (NAR) has a unique ID in the 010 field in addition to the string found in the 1XX field.

So how will we decouple these in the future?

The AAP of Tomorrow

Some of this is based on what I heard Gordon Dunshire say at the RIMMF-a-Thon at ALA Annual. Some it is my own pie-in-the-sky guessing.

  1. The AAP of tomorrow will not be carried in the same field as Preferred name of the person, or Preferred title of the work. These are separate elements from the AAP and will be treated as such.
  2. While current instructions for RDA do provide guidance (some tighter than others) on creation of AAPs, it won’t always do that. It will provide guidance on the construction of each potential piece of an AAP, the preferred name/title, significant dates, form/content types, etc. But the construction of the AAP itself will be left to the application profile of your local system.

Let me say #2 again in more/different words because it is so crucial.

RDA (or whatever content standard we’ll be using) will help you identify and record elements in authority records

  • Names
  • Dates
  • Forms
  • Everything

But the unique identifier that you will not have to look at or even care about will be system generated. Since it will be unique, the AAPs will not have to be, and we will use our best judgement (helped along by well-vetted research as to what patrons find useful) to make the authorized access point for display.

Whatever link is generated for patrons to click to collate all the resources associated with that person, it will be based on that unchanging unique identifier, whether the text they click on says

  • Jackson, Michael, 1958-2009
  • Michael Jackson (Singer)
  • Michael Jackson, and there’s a picture of him next to the name

Should be left to what patrons find useful. The requirement “add X element to the AAP if necessary to distinguish” will be irrelevant because no element will be necessary to distinguish – -the unique identifier will do that.

What we’re going to do as future catalogers will be to record as much data as we can about agents and resource and provide identifiers for those agents/resources from other systems if they exist.

 

The Implication

I can see that some of you have already realized the implications. But I’m going to spell it out anyway.

Variant access points won’t exist.

Okay okay, maybe that’s taking it too far. But return to the questions above — why do we have VAPs? What purpose are they intended to serve?

VAPs provide alternative entry into the catalog for when an agent or resource is known by another name.

Well again, as above — RDA (or whichever content standard) will provide guidance on how to identify and record variant names and titles.

That’s it. That’s all you have to do!

Because there no longer will be the notion of a single authorized access point, thou shalt not have any other access points before me — there aren’t tiers of them either.

Systems (either local or shared) will generate access points for display and can generate hundreds or thousands hidden access points which can be matched on in case a patron searches differently than you expect. They are all equal to one another — and none have to be created individually by you, the cataloger.


 

Pretty cool, right?

Stop it with Yer Dang “Hebrew Fiction”

Oh there’s Netanel, off on another of his patented rants about Hebrew fiction and how much he hates it.

tumblr_inline_n5u0xtXbcw1ryxhvf.jpg

 

My beef is with

650 _ 0 Hebrew fiction.

and its very good friend:

650 _ 0 Israeli fiction.

If I had a Spanish-language specialty, I’d probably be complaining about Spanish fiction, but my specialty is Hebrew, so here we are.


Now look, you know and I know (and I know that you know) that subjects belong in 650s and genre/forms belong in 655s, we’re not going to rehash that whole biz here.

Phew-man-575

You, right now.

 

So then why am I even bringing this up? Well here’s the thing, I feel you. There currently aren’t any LCGFT terms which adequately cover “language of fiction” or “national origin of fiction” — heck I’ll even give you the benefit of the doubt that you’re trying to enter

655 _ 7 Hebrew fiction $2 lcsh

and maybe OCLC is just flipping it to a 650 upon controlling the heading. Because the thing is people do want access to their fiction by these facets, so I understand your impetus to give them that access.

What I’m suggesting is that we’re going about this the wrong way. If we push for authorizing every “$language fiction” and “$nation fiction” as LCGFT terms, we’re going to end up with the same bloat we currently suffer from in LCSH.

Let’s leverage the metadata we already have to give users these facets. The “Lang” element (characters 35-57 in the 008 field) contains a three digit code which can be dereferenced into a language. The “Ctry” element (characters 15-17 in an 008) contains a code which can be dereferenced into country of publication.

Write a macro that upon presence of a ‘1’ or ‘f’ in “LitF” (character 33 in an 008 or 16 in an  006) generates a 655 of “X fiction” upon export. We can treat them as we do pattern headings and any [Language] fiction is allowed, without needing to add every term individually.

Whadda ya think?

 


UPDATE ON SAME DAY

As the very wise and detail-oriented MarcinaColdClimate has pointed out to me:

I have erred!

“Ctry” is place of publication of this manifestation — if for example (her example to be precise), you were cataloging a Canadian publication of Tintin, you’d end up with

655 _ 7 Canadian fiction.

When of course Tintin is Belgian.

FEAR NOT — I HAVE IMMEDIATELY SHIFTED MY IDEA

66922695.jpg

Linked data.

Pretty good idea, right?

No, but seriously — in the work Name Authority Record — place of origin of work (RDA 6.5) is recorded in 370  $g. Our more-clever and powerful cataloging tools will be able to easily fetch that data for us. Problem solved.

 

 

Emflix – Part 20 – Hybrid Consistency

Note: this is originally an excerpt from Part 12 – Action and Adventure, but I figured it ought to be cross posted into the ‘Rules’ section of my index.

I noticed that Netflix had many “hybrid subgenres” e.g. Action Sci-Fi and Fantasy, Indie Romance, Sci-Fi Thrillers, etc. The odd thing to me is that only some of these hybrid subgenres would appear under both of their ‘parent’ genres.

That is, in Netflix’s listings ‘Action Thrillers’ is listed under both ‘Action & Adventure’ and ‘Thrillers’, whereas ‘Action Comedies’ is listed only under ‘Action & Adventure’ and not under Comedies. Weird, right?

That kind of inconsistency is this cataloger’s bane. So my first rule was, if a subgenre is ‘hybrid’ (as judged by its name being made up of two different genres) it belongs under both genres.

Emflix – Part 19 – Subgenres – Drama

Link to Part 18 – Subgenres – Documentary

Here’s “Drama”

Compare again Netflix’s listing of genres to mine.

I struggled with a problem with the category.

Some of the subgenres really are not limited to Drama and yet only appeared under Drama in the hierarchy.

Consider ‘Period Pieces’

While most period pieces tend to be dramas, sure — what about all those Jane Austen/Oscar Wilde adaptations? Hilarious period pieces (your mileage may vary on the hilarity) What about Topsy Turvy, Clue, or half of Mel Brook’s movies? Comedic period pieces! Perhaps I should’ve added ‘Comedy Period Piece’ to my hierarchy, but I didn’t.


Here are my subgenres for said category with asterisks for ones I’ll be discussing below, either because they’re not on Netflix’s list, or they were changed from Netflix’s for some reason

  • African-American Dramas
  • Asian-American Dramas*
  • Classic Dramas
  • Courtroom Dramas
  • Crime Dramas
  • Dramas Based on Real Life
    • Biographies*
  • Dramas Based on the Book
    • Dramas Based on Bestsellers
    • Dramas Based on Classic Literature
    • Dramas Based on Contemporary Literature
  • Epics*
  • Family Dramas
  • Foreign Dramas
  • Gambling Dramas
  • Indie Dramas*
  • LGBTQ Dramas*
  • Latino/a Dramas*
  • Medical Dramas
  • Military and War Dramas
  • Period Pieces
    • 20th Century Period Pieces
    • Pre-20th Century Period Pieces
  • Political Dramas
  • Religious and Spiritual Dramas*
  • Romantic Dramas
  • Sci-Fi Dramas
  • Showbiz Dramas
  • Social Issue Dramas
  • Sports Dramas
  • Tearjerkers
  • Teen Dramas*

 

  • Asian-American Dramas
    • Netflix doesn’t have this category despite many films potentially being able to fulfill it, so I added it
  • Biographies
    • Netflix places ‘Biographies’ as it’s own subgenre under Drama, whereas I placed it as a sub-Subgenre of ‘Dramas Based on Real Life’. While I am aware of the existence of fictional biographies (consider the Chuck Barris biopic, ‘Confessions of a Dangerous Mind’) because the vast majority of such films would fulfill ‘Dramas based on Real Life’ I decided to have that category absorb ‘Biographies’
  • Epics
  • Indie Drama
  • LGBTQ Dramas
    • Changed for inclusionary reasons, see my full write-up on the LGBTQ genre, when I get there
  • Latino/a Dramas
    • See the People-Genre rule
  • Religious and Spiritual Dramas
    • Added for hybrid consistency
  • Teen Dramas
    • Added for hybrid consistency

 

Link to Part 21 – Subgenres – Faith and Spirituality

Baby’s First Macro

Who doesn’t wish OCLC would work a little differently than it does? A little extra feature here, a little extra feature there…if you’ve worked with it for any amount of time, you’ve probably gotten a little frustrated at times.

This was what I wanted on March 10th — so I decided to knuckle down, look up how to make an OCLC macro, and I done did it! I’m sure it could be done better, that it could be done faster or more efficiently, but it totally works — and for me, that’s enough for now.

I first grabbed the contents of the Cont fixed field and Indx fixed field and stored them in string variables.

The macro then checks three cases:

  1. If the Cont field contains a ‘b’ and Indx is ‘1’ then it adds a 504 field with the value “Includes bibliographical references and index”
  2. If the Cont field contains a ‘b’ and Indx is ‘0’ or uncoded then it adds a 504 field with the value “Includes bibliographical references”
  3. If the Cont field does not contain a ‘b’ and Indx is 1, then it adds a 500 field with the value “Includes index.

So here it is copied below, feel free to use it, re-use it, or improve it (but if you do, lemme know!).

Sub Main
    Dim CS As Object
Set CS = CreateObject("Connex.Client")
CS.GetFixedField "Cont", ContCode$
CS.GetFixedField "Indx", IndxCode$

If InStr(ContCode$, "b") and IndxCode$ = "1" Then
CS.AddField 1, "504  Includes bibliographical references and index."
End If

If InStr(ContCode$, "b") and (IndxCode$ = "" or IndxCode$ = "0") Then
CS.AddField 1, "504  Includes bibliographical references."
End If

If InStr(ContCode$, "b")=0 and IndxCode$ = "1" Then
CS.AddField 1, "500  Includes index."
End If
End Sub

Emflix – Part 18 – Subgenres – Documentary

Link to Part 17 – Subgenres – Comedy

Here’s “Documentary”

Compare again Netflix’s listing of genres to mine.

 

Here are my subgenres for said category with asterisks for ones I’ll be discussing below

  • African-American Documentaries
  • Biographical Documentaries
  • Crime Documentaries
  • Faith and Spirituality Documentaries
  • Foreign Documentaries
  • Historical Documentaries
  • Indie Documentaries
  • Military Documentaries
  • Mockumentaries
  • Musical Documentaries*
  • Political Documentaries
  • Science and Nature Documentaries
  • Social and Cultural Documentaries
  • Sports Documentaries

 

  • Musical Documentaries
    • On the Netflix listing, this is called ‘Rockumentaries’. I changed it to ‘Musical Documentaries’ because there were a bunch of films under this subGenre which aren’t documenting rock music but rather, jazz, hip-hop, etc. I figured ‘Musical Documentaries’ would cover all those bases.

 

Not present on my list, but present on Netflix’s

  • The three subSubGenres of Faith and Spirituality Documentaries
    • Inspirational Biographies
    • Religion and Mythology Documentaries
    • Spiritual Mysteries
  • HBO Documentaries
  • Miscellaneous Documentaries
  • PBS Documentaries
  • Travel and Adventure Documentaries

 

  • Inspirational Biographies, Religion and Mythology Documentaries, Spiritual Mysteries, Travel and Adventure Documentaries
  • HBO Documentaries, PBS Documentaries
    • As per Disney/Nickelodeon in ‘Children and Family‘ I didn’t consider the television network to be a genre, that’s descriptive metadata, not genre/form
  • Miscellaneous Documentaries
    • I just didn’t like this category. It’s useless, it says, “well it’s a documentary, but doesn’t fit into any other category”. Frankly, any time I encountered it in the Netflix database, I found the film was a decent enough fit with one of the existing categories as to render this catch-all moot.

 

Link to Part 19 – Subgenres – Drama