GUF: Getting Users to FullText With Voyager, ENCompass, OpenURL, etc' PowerPoint PPT Presentation

presentation player overlay
1 / 78
About This Presentation
Transcript and Presenter's Notes

Title: GUF: Getting Users to FullText With Voyager, ENCompass, OpenURL, etc'


1
GUF Getting Users to Full-Text (With Voyager,
ENCompass, OpenURL, etc.)
  • Jeff Suszczynski
  • Senior Web Developer
  • jeffs_at_library.rochester.edu

2
Library IT Environment
  • Digital Initiatives Unit
  • - Software Developers (3)
  • - Systems Analyst
  • - Computer Scientist
  • - Anthropologist
  • - Art Director / Designer
  • - Digital Librarian for Public Services
  • - Usability Team
  • - Content Groups

3
Library IT Environment
  • Usability Testing Lab

4
Metasearch - Major Issues
  • Our users fail when they must
  • Deal with Link Resolver menu choices
  • Follow long click-paths
  • Get stuck at dead-ends
  • Resubmit their searches mid-session

5
Major Issues - Examples

6
04 Find Articles Right to full-text
7
(No Transcript)
8
(No Transcript)
9
(No Transcript)
10
09a Good-bye to the Sixties - FA
11
(No Transcript)
12
(No Transcript)
13
(No Transcript)
14
(No Transcript)
15
(No Transcript)
16
(No Transcript)
17
(No Transcript)
18
(No Transcript)
19
(No Transcript)
20
(No Transcript)
21
(No Transcript)
22
(No Transcript)
23
09c Joe Hill Find Articles
24
(No Transcript)
25
(No Transcript)
26
(No Transcript)
27
(No Transcript)
28
(No Transcript)
29
(No Transcript)
30
Major Issues - Resolved
  • GUF (Getting Users to Full-text)
  • Title links on results screen lead to either
  • Full-text (best)
  • Print holdings information with map (2nd best)
  • Pre-filled interlibrary loan request form (worst)
  • Issues Addressed
  • Deal with Link Resolver menus
  • Follow long click-paths
  • Get stuck at dead-ends
  • Resubmit search mid-session

31
GUF
Library website user interface
Search
ILL login w/ request
GUF
Full text
Map to journal
Library Web Server
Subscription Database
32
(No Transcript)
33
(No Transcript)
34
(No Transcript)
35
(No Transcript)
36
(No Transcript)
37
(No Transcript)
38
(No Transcript)
39
(No Transcript)
40
(No Transcript)
41
(No Transcript)
42
Major Issues - Resolved
  • In each case, the user only had to click once to
    get to full-text
  • or the next best option.

43
Major Issues - Resolved
  • To resolve user issues
  • Link Resolver menu choices
  • Long click-paths
  • Dead-ends
  • Resubmitting searches
  • GUF must do the following
  • Improve metadata transfer
  • Eliminate/handle errors
  • Eliminate clicks
  • Check local holdings
  • Handle multiple editions

44
Improved Metadata Transfer
  • Problem
  • Metasearch (ERA) gt Link Resolver (SFX,
    LinkFinderPlus)
  • metadata hand-offs are extremely important
  • and are generally inadequate
  • inability to handle different sets of metadata
    for different databases
  • inability to handle multiple items types from
    each database

45
Improved Metadata Transfer
  • Example for Database X
  • if type (072 a) Journal Article or
    Periodical then
  • ISSN will be in the 022 a or 773 x or in a
    section of the
  • 024 a (parsable SICI)
  • BUT
  • if type (072 a) Collected Volume Article
    (series) then
  • ISSN might be in the 490 x
  • Metasearch products generally dont allow for
    this granularity.

46
Improved Metadata Transfer
  • GUF succeeds where Metasearch gt Link Resolver
    often fails
  • advanced metadata parsing
  • tailored for each databases quirks

47
Improved Metadata Transfer
  • How does GUF do this?
  • results.xsl gt objectGUF.xsl
  • Title link on results.xsl sends metadata to
    objectGUF.xsl

48
Improved Metadata Transfer
  • How?
  • objectGUF.xsl gt parserxxxdb.js
  • objectGUF.xsl grabs and massages metadata
    received
  • objectGUF.xsl sends cleaned and selected metadata
    to database-specific JavaScript file

49
  • ltxslwhen test"repocode'E_FSARTF'"gt
  • ltxslvariable name"sici" select"/ENCOMPASS/ENCO
    MPASS_BATCHQUERY/GET_OBJECT_XML/SETTAGS/OXML/EncRe
    poObject/ObjMetadata/MARC/MR024/MR024a"/gt
  • ltxslvariable name"unique_id"
    select"/ENCOMPASS/ENCOMPASS_BATCHQUERY/GET_OBJECT
    _XML/SETTAGS/OXML/EncRepoObject/ObjMetadata/MARC/M
    R035/MR035a"/gt
  • ltxslvariable name"author" select"/ENCOMPASS/EN
    COMPASS_BATCHQUERY/GET_OBJECT_XML/SETTAGS/OXML/Enc
    RepoObject/ObjMetadata/MARC/MR100/MR100a"/gt
  • ltxslvariable name"atitle" select"/ENCOMPASS/EN
    COMPASS_BATCHQUERY/GET_OBJECT_XML/SETTAGS/OXML/Enc
    RepoObject/ObjMetadata/MARC/MR245/MR245a"/gt
  • ltxslvariable name"atitle" select"translate(at
    itle, 'quot', '')"/gt
  • ltxslvariable name"jtitle" select"/ENCOMPASS/EN
    COMPASS_BATCHQUERY/GET_OBJECT_XML/SETTAGS/OXML/Enc
    RepoObject/ObjMetadata/MARC/MR773/MR773t"/gt
  • ltxslvariable name"volume" select"/ENCOMPASS/EN
    COMPASS_BATCHQUERY/GET_OBJECT_XML/SETTAGS/OXML/Enc
    RepoObject/ObjMetadata/MARC/MR949/MR949a"/gt
  • ltxslvariable name"issue" select"/ENCOMPASS/ENC
    OMPASS_BATCHQUERY/GET_OBJECT_XML/SETTAGS/OXML/EncR
    epoObject/ObjMetadata/MARC/MR949/MR949b"/gt
  • ltxslvariable name"spage" select"/ENCOMPASS/ENC
    OMPASS_BATCHQUERY/GET_OBJECT_XML/SETTAGS/OXML/EncR
    epoObject/ObjMetadata/MARC/MR949/MR949f"/gt
  • ltxslvariable name"epage" select"/ENCOMPASS/ENC
    OMPASS_BATCHQUERY/GET_OBJECT_XML/SETTAGS/OXML/EncR
    epoObject/ObjMetadata/MARC/MR949/MR949c"/gt
  • ltxslvariable name"year" select"/ENCOMPASS/ENCO
    MPASS_BATCHQUERY/GET_OBJECT_XML/SETTAGS/OXML/EncRe
    poObject/ObjMetadata/MARC/MR949/MR949g"/gt
  • ltscript language"javascript"gt
  • fa2_articlefirst("ltxslvalue-of
    select"sici"/gt", "ltxslvalue-of
    select"unique_id"/gt", "ltxslvalue-of
    select"author"/gt", "ltxslvalue-of
    select"atitle"/gt", "ltxslvalue-of
    select"jtitle"/gt", "ltxslvalue-of
    select"volume"/gt", "ltxslvalue-of
    select"issue"/gt", "ltxslvalue-of
    select"spage"/gt", "ltxslvalue-of
    select"epage"/gt", "ltxslvalue-of
    select"year"/gt")
  • lt/scriptgt
  • lt/xslwhengt

50
Improved Metadata Transfer
  • How?
  • parserxxxdb.js
  • JavaScript file, tailored for particular
    database, receives the metadata from
    objectGUF.xsl
  • It further massages the metadata using regular
    expressions

51
Improved Metadata Transfer
  • ltMR973agtThe New RepublicbNew Repubc233d4fJuly
    gJulyh07i25j2005k6lt/MR973agt
  • var regvolume /\c/
  • if (regvolume.test(journalinfo))
  • var volume journalinfo.replace(/.\c/, '')
  • var volume volume.replace(/\./, '')
  • else
  • var volume ''
  • var regissue /\d/
  • if (regissue.test(journalinfo))

52
Improved Metadata Transfer
  • How?
  • parserxxxdb.js
  • JavaScript file forms robust OpenURL using
    regular expressions and advanced parsing
  • JavaScript file ships the OpenURL off to GUF
  • All of this creates a better OpenURL than a
    typical Metasearch gt Link Resolver hand-off,
    allowing for more and better links to full-text.

53
Articles Eliminating Errors
  • Problem
  • Full-text link on Link Resolver menu yields error
  • page fairly often.

54
(No Transcript)
55
(No Transcript)
56
Articles Eliminating Errors
  • GUF eliminates these dead-ends by
  • pre-fetching pages
  • trying other sources on error

57
Articles Eliminating Errors
  • 1. GUF receives OpenURL from ERA server
    (JavaScript file)
  • GUF formats OpenURL into XML
  • Example
  • http//chico.lib.rochester.edu8080/SFX_API/sfx_lo
    cal?XML
  • lt?xml version"1.0" ?gt
  • ltopen urlgt
  • ltobject_descriptiongt
  • ltobject_metadata_zonegt
  • ltgenregtarticlelt/genregt
  • ltissngt00084360lt/issngt
  • ltvolumegt43lt/volumegt
  • ltissuegt181lt/issuegt
  • ltspagegt149lt/spagegt
  • lttitlegtCanadian Literaturelt/titlegt
    ltatitlegtAglimpseofsomethinglt/atitlegt
  • ltdategt2004-08lt/dategt
  • ltaulastgtBeauregardlt/aulastgt
  • ltaufirstgtGuylt/aufirstgt
  • lt__service_typegtgetFullTxtlt/_
    _service_typegt

58
Articles Eliminating Errors
  • 3. GUF sends XML OpenURL via HTTP Post to SFX
    API
  • SFX API returns a list of full-text URLs
  • Example

59
Articles Eliminating Errors

lt?xml version"1.0"?gt ltopenurl_resultgt ltrecordgt
ltaulastgtBeauregardlt/aulastgt ltdategt2004lt/dategt
ltatitlegtA glimpse of somethinglt/atitlegt ltspage
gt149lt/spagegt ltissngt00084360lt/issngt lt__service_
typegtgetFullTxtlt/__service_typegt ltissuegt181lt/iss
uegt lttitlegtCanadian Literaturelt/titlegt ltaufirs
tgtGuylt/aufirstgt lt/recordgt lttargetgt lturlgthttp
//gateway.proquest.com/openurl?ctx_verZ39.88-200
3ampres_idxripqdamprft_val_fmtorifmtkevm
txjournalampgenrearticleampissn0008-4360am
pdate2004ampatitleAglimpseofsomethingamp
req_datxripqilpq_clntid17941lt/urlgt lttarget_n
amegtavailable via ProQuest Research
Librarylt/target_namegt ltservicegtgetFullTxtlt/servi
cegt lt/targetgt lt/openurl_resultgt
60
Articles Eliminating Errors
  • 5. GUF executes HTTP calls (screen scraping) to
    the full-text URLs
  • 6. If any error occurs, skip to the next
    full-text URL until all are exhausted

61
  • ltCFELSEIF REFindNoCase("proquest", targets)gt
  • ltcfloop from"1" to"ArrayLen(ft_link)"
    index"i"gt
  • ltCFIF REFindNoCase("proquest",
    ft_linki.XmlText)gt
  • lt!--- Go to link from ProQuest. ---gt
  • ltCFSET target_url ft_linki.XmlTextgt
  • ltCFIF REFindNoCase("issn\\d\d", target_url)
    AND REFindNoCase("volume\\d", target_url) AND
    REFindNoCase("issue\\d", target_url)AND
    REFindNoCase("spage\\d", target_url)gt
  • ltCFSET target_url REReplaceNoCase(target_url
    , "\date\(\d)\req", "req")gt
  • lt/CFIFgt
  • ltCFIF REFindNoCase("\date\\d\d\d\d\-\d\d\d\",
    target_url)gt
  • ltCFSET target_url REReplaceNoCase(target_url,
    "\-\d\d\d\atitle", "atitle")gt
  • lt/CFIFgt
  • ltCFHTTP URL"target_url"gt
  • ltCFSET new_url cfhttp.filecontentgt
  • lt!--- Need to insert error checking here. ---gt
  • ltCFIF REFindNoCase("did not find any documents",
    new_url) EQ 0gt
  • lt!--- Check for link to PDF. ---gt
  • ltCFIF REFindNoCase("alt\""Page Image \- PDF",
    new_url)gt
  • lt!--- If it exists, parse out the URL and go to
    it. ---gt

62
Articles Eliminating Clicks
  • Problem
  • Full-text links in Link Resolver menus often lead
    the user to a
  • journal- or abstract-level page.
  • This forces the user to scan the page and click
    one or more
  • times to actually see the article.

63
(No Transcript)
64
(No Transcript)
65
Articles Eliminating Clicks
  • GUF
  • drills down to article level for most databases
  • screen scrapes for embedded links to PDF or HTML
    fulltext

66
  • ltCFELSEIF REFindNoCase("muse", targets)gt
  • ltcfloop from"1" to"ArrayLen(ft_link)"
    index"i"gt
  • ltCFIF REFindNoCase("muse", ft_linki.XmlText)
    gt
  • lt!--- If 'muse' was found in data from SFX API,
    execute CFHTTP call to the URL. ---gt
  • ltCFHTTP URL"ft_linki.XmlText"gt
  • lt!--- Now screen scrape the data, look to make
    sure a link to a specific article is returned.
    ---gt
  • ltCFIF (REFindNoCase("Access article in PDF",
    cfhttp.filecontent)) AND (REFindNoCase("href\.\.
    pdf", cfhttp.filecontent)) AND (REFindNoCase("\ltti
    tle\gt.Table of Contents\lt\/title",
    cfhttp.filecontent) EQ 0)gt
  • lt!--- If a specific article is returned, parse
    out just the embedded link to full-text ---gt
  • ltCFSET new_url cfhttp.filecontentgt
  • ltCFSET new_url REReplaceNoCase(new_url,
    ".\lturl\gt", "")gt
  • ltCFSET new_url REReplaceNoCase(new_url,
    "\lt\/url\gt.", "")gt
  • ltCFSET new_url REReplaceNoCase(new_url,
    "\.(htmlhtm)", ".pdf")gt
  • ltCFSET new_url "http//muse.uq.edu.au"
    new_urlgt

67
Articles Check local holdings
  • Problem
  • Link resolvers do not compare citation info
    against actual
  • holdings info.

68
(No Transcript)
69
(No Transcript)
70
(No Transcript)
71
Articles Check Local Holdings
  • GUF is able to check your citation against local
    print holdings
  • How?
  • Extract of entire print journal holdings from
    Voyager into homegrown SQL table
  • Print holdings are parsed using a set of regular
    expressions on our non-standard holdings info
  • Thus, the user only sees the Library Holdings
    page when the library actually owns the
    volume/issue/date for a metasearch result.

72
Books Multiple editions
  • Problem
  • Metasearch can yield book results for particular
    editions
  • Currently no way that link resolvers can
    determine whether local holdings include
    alternate editions
  • Dead end result for users

73
Books Multiple Editions
  • GUF uses OCLCs xISBN service to find all
    editions and their
  • ISBNs.
  • Example
  • ltCFHTTP urlhttp//labs.oclc.org/xisbn/url.isbn
    method getgt
  • Yields
  • lt?xml version"1.0" encoding"UTF-8" ?gt
  • ltidlistgt
  • ltisbngt0441172717lt/isbngt
  •   ltisbngt0801950775lt/isbngt
  •   ltisbngt0399128964lt/isbngt
  •   ltisbngt044100590xlt/isbngt
  •   ltisbngt1556909330lt/isbngt
  •   ltisbngt0425027066lt/isbngt
  •   ltisbngt0425036987lt/isbngt
  •   ltisbngt0425046877lt/isbngt
  •   ltisbngt042507160xlt/isbngt
  •   ltisbngt042505313xlt/isbngt
  •   ltisbngt0441172660lt/isbngt

74
Books Check local holdings
  • GUF searches catalog for complete list of ISBNs
    to find good enough copy
  • How?
  • ColdFusion custom tag that allows multiple,
    concurrent HTTP requests against Voyager OPAC
  • This allows for reasonable performance over large
    numbers of ISBN searches

75
Miscellaneous Features
  • ISSN lookup
  • Homemade DOI resolver
  • Date formatting
  • findarticles.com

76
Future Enhancements
  • Item records for print journals
  • Journal abbreviation lookup table
  • Google spellchecking
  • CrossRef DOI help
  • Flash-based maps

77
Other Ideas?
  • Any ideas you may have are welcome

78
GUF Getting Users to Full-Text (With Voyager,
ENCompass, OpenURL, etc.)
  • Jeff Suszczynski
  • Senior Web Developer
  • jeffs_at_library.rochester.edu
Write a Comment
User Comments (0)
About PowerShow.com