Title: GUF: Getting Users to FullText With Voyager, ENCompass, OpenURL, etc'
1GUF Getting Users to Full-Text (With Voyager,
ENCompass, OpenURL, etc.)
- Jeff Suszczynski
- Senior Web Developer
- jeffs_at_library.rochester.edu
2Library 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
3Library IT Environment
4Metasearch - 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
5Major Issues - Examples
604 Find Articles Right to full-text
7(No Transcript)
8(No Transcript)
9(No Transcript)
1009a 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)
2309c Joe Hill Find Articles
24(No Transcript)
25(No Transcript)
26(No Transcript)
27(No Transcript)
28(No Transcript)
29(No Transcript)
30Major 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
31GUF
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)
42Major Issues - Resolved
- In each case, the user only had to click once to
get to full-text - or the next best option.
43Major 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
44Improved 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
45Improved 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.
46Improved Metadata Transfer
- GUF succeeds where Metasearch gt Link Resolver
often fails - advanced metadata parsing
- tailored for each databases quirks
47Improved Metadata Transfer
- How does GUF do this?
- results.xsl gt objectGUF.xsl
- Title link on results.xsl sends metadata to
objectGUF.xsl
48Improved 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
50Improved 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
51Improved 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))
52Improved 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.
53Articles Eliminating Errors
- Problem
- Full-text link on Link Resolver menu yields error
- page fairly often.
54(No Transcript)
55(No Transcript)
56Articles Eliminating Errors
- GUF eliminates these dead-ends by
- pre-fetching pages
- trying other sources on error
57Articles 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
58Articles Eliminating Errors
- 3. GUF sends XML OpenURL via HTTP Post to SFX
API - SFX API returns a list of full-text URLs
- Example
59Articles 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
60Articles 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
62Articles 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)
65Articles 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 -
67Articles Check local holdings
- Problem
- Link resolvers do not compare citation info
against actual - holdings info.
68(No Transcript)
69(No Transcript)
70(No Transcript)
71Articles 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.
72Books 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
-
73Books 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
74Books 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
75Miscellaneous Features
- ISSN lookup
- Homemade DOI resolver
- Date formatting
- findarticles.com
76Future Enhancements
- Item records for print journals
- Journal abbreviation lookup table
- Google spellchecking
- CrossRef DOI help
- Flash-based maps
77Other Ideas?
- Any ideas you may have are welcome
78GUF Getting Users to Full-Text (With Voyager,
ENCompass, OpenURL, etc.)
- Jeff Suszczynski
- Senior Web Developer
- jeffs_at_library.rochester.edu