Search This Blog

Monday, November 30, 2009

Peak Oil and Digital Preservation

A debate about how Higher Education should respond to the oncoming Peak Oil crisis has been kicked off, largely by Joss Winn. Contrasting views on how educators should cope with this prospect, for example Richard Heinberg argues that librarians, in particular, should head back towards preserving knowledge recorded in printed books, while Richard Hall is pointing towards more resilient institutions able to cope with a wider range of stresses upon them.

There are some very bleak prospects are on offer, with visions of computers trashed to retrieve the metals inside for arrow-heads being imagined within three generations by some. However, before we got to that point, many smaller crisis points would have had to have been confronted and opportunities missed.

So, for the purpose of this post I want to set out a couple of scenarios and suggest how librarians and educators might want to respond.

1. Electricity shortages cause the electronic infrastructure we know as the Internet to behave more erratically, with resources being intermittently unavailable.
2. The increased costs of running electronic services pressure data service providers to cease supporting content that is not profitable for them. This is not so far-fetched a picture with titles like Pain Reviews and Brief Treatment and Crisis Intervention already facing being abandoned by their publishers.

In either of these cases, educators would find that the resources that they require their students to read would be either temporarily or permanently unavailable.

Global and permanent access to electronic resources was one of the background assumptions of the pre-Peak Oil Age. One question posed by the challenge of responding to Peak Oil is how will educators respond when this assumption is questioned?

Resilience through digital preservation.

Making and keeping copies of the resources that educators can rely on is a goal of most digital preservation systems. For example, the goal of PLANETS is 'help ensure long-term access to our digital cultural and scientific assets'. A JISC Briefing Paper on defines Digital Preservation as 'the series of actions and interventions required to ensure continued and reliable access to authentic digital objects for as long as they are deemed to be of value'.

The idea is that it should not be left to the publishers themselves to take on sole responsibility for ensuring access over time. Cultural institutions like libraries should be prepared to take on at least part of this burden.

17 UK Universities currently members of the UK LOCKSS Alliance, building archives within their institutions. One advantage to the LOCKSS approach to Digital Preservation is that questions about what should be preserved, for how long and for whose benefit can be sorted out locally. Other schemes leave such decisions to 'insurance bodies' (like Portico or CLOCKSS) or to national libraries as with the British Library in the UK.

One step towards a resilient approach to Higher Education would be to ensure that the materials that educators will be relying on now and in the future for their courses are being actively looked after now. Of the different approaches to digital preservation so far available, LOCKSS enables institutions to move towards building some resilience into their electronic resources.

Saturday, March 14, 2009

Using the Scopus API - 4: How to configure your Scopus search feature.

In the last post I put together a search form that would search the Scopus database for research published by people based at a single university. In this post I will look at the way the form is composed and the javascript that processes the query and its results.
The HTML Form

<form id="scapiForm" name="scapiForm" onsubmit="return false">
<fieldset>
<legend>De Montfort University Research in Scopus</legend>
<label for="searchString">Search for:</label>
<input id="searchString" name="searchString" value="" type="text"> e.g. <i>Sparrows</i>
<label for="searchType">As a:</label>
<select id="searchType" size="1">
<option value="TITLE-ABS-KEY" selected="selected">Keyword</option>
<option value="AUTH">Author</option>
<option value="TITLE">Title</option>
<option value="SRCTITLE">Journal</option>
voption value="DOI">DOI</option>
</select>
<label for="dateSearchType">Published:</label>
<select id="dateSearchType" size="1">
<option value="BEF" selected="selected">Before</option>
<option value="IS">Exactly</option>
<option value="AFT">After</option>
</select>
<label for="dateSearchYear">Year:</label>
<input maxlength="4" size="4" id="dateSearchYear" value="2009" type="text">
<label for="sortType">Sort results by:</label>
<select id="sortType" size="1">
<option value="Date" selected="selected">Date</option>
<option value="CitedByCount">Citations</option>
<option value="Authors">Author A-Z</option>
</select>
<label for="kludge"></label>
<button id="kludge" onclick="runSearch2()" name="searchButton" class="btn"
>Search</button>

</fieldset>

</form>


My customised Scopus search form has some of the advanced search features built into it. You can change then way the results come back from date order to 'cited by'. This would bring back the most influential results (if a count of the number of other articles citing it is an indicator of such influence).
The Javascript


<script type="text/javascript">
<!-- SECTION 2 : Call back -->
callback = function(){ document.scapiForm.searchButton.disabled = false; }
<!-- SECTION 3 : Running Search -->

runSearch2 = function()
{
document.scapiForm.searchButton.disabled = true;
var varSearchObj = new searchObj();
var terms = document.scapiForm.searchString.value;
var mytype = document.scapiForm.searchType.value;
var myop = document.scapiForm.dateSearchType.value;
var myyear = document.scapiForm.dateSearchYear.value;
var myterms = ""+mytype+"(\""+terms+"\") and AF-ID(\"60017098\") and PUBYEAR "+myop+" "+myyear+ "";
var mysort = document.scapiForm.sortType.value;
varSearchObj.setSearch(myterms);
varSearchObj.setFields('title,firstauth,pubdate,sourcetitle,citedbycount,doi,inwardurl');
varSearchObj.setSort(mysort);
varSearchObj.setNumResults(20);
scapi.search(varSearchObj);
}

</script>

<!-- SECTION 4 : Setting defaults -->
<script type="text/javascript">
scapi.setDeveloperID("--INSERT YOUR DEVELOPER ID HERE--");
scapi.setCallback(callback);
</script>


I have renamed the function to 'runSearch2' to avoid mucking up the way it worked on the earlier example.
"var terms = document.scapiForm.searchString.value;" captures whatever you typed into the searchbox and puts it into a variable called 'terms'.
"var mytype = document.scapiForm.searchType.value;" captures the type of search you intend (or at least selected) from the keyword, author, title, journal, doi options. Again, it created a variable called 'mytype' that I can use later.
De Montfort University has a Scopus Affiliation ID number of 60017098. I found this by using the Affiliation Search tab in Scopus.
With these variables I can make:
var myterms = ""+mytype+"(\""+terms+"\") and AF-ID(\"60017098\")
varSearchObj.setSearch(myterms);
scapi.search(varSearchObj);
'myterms' uses '\' to escape the quotes and '+' to insert the variables. It needs to look, as far as Scopus is concerned, like a genuinely well-formed Advanced search query. It then becomes the argument in the setSearch bit of the varSearchObj object.
In turn this becomes the argument in scapi.search.
There are other options to be selected, captured and added to the search object. I have not asked for abstracts for the search results, but if I wanted to I could add them to the list of required fields in varSearchObj.setFields.
Displaying the results
So far I have been configuring the search options. But I should be possible to change the way the results are presented. I have not had much success yet in doing this, so if you are able to get better results, I would be interested to learn how. For example, Tom wanted to include links to the full text for the items in the search results. That would require reformatting the results into an openurl and embedding the openurl into the display.

Thursday, March 12, 2009

Using the Scopus API - 3: An Advanced search feature

If you just wanted a simple search box for Scopus, as in part 1, your users may as well log in to Scopus and search for themselves. Once you see what the Advanced Search features might be able to do, you may want to design a feature for your own website to make it easy for your users to find information, without having to compose their own elegant searches.
For example:


De Montfort University Research in Scopus

e.g. Sparrows

















The results are restricted to items published by researchers based at De Montfort University.

Tuesday, February 03, 2009

Using the Scopus API - 2: Scopus Advanced Search Features

In part one of this exploration of what you can do with the Scopus API I looked at how to set up a basic Scopus search box on your site. There is plenty more that can be done to configure the search form to do what you want it too. Indeed you may as well let people use Scopus itself unless you are going to add some value by tweaking it one way or another. In the Scopus documentation there is a brief mention of the advanced search features, but this appears in the 'prerequisite knowledge', so there was not felt to be a need to explain what these features might enable for you.
In fact many people may never have bothered to investigate these features, unless they found a particular need that was not being met by the basic and helpful Scopus interface.
Design requirement
First let us set up an imaginary design requirement, so that we can see if the advanced search features in Scopus can help us at all. A University wants to showcase its research output, particularly where these articles have been highly cited. It would be useful to be able to track this for particular years.
Scopus Advanced Search features.
Scopus has an Advanced Search tab which allows you to build up a query using a combination of codes, operators and values.
There is a little example offered as a guide:
ALL("heart attack") AND AUTHOR-NAME(smith)
TITLE-ABS-KEY( *somatic complaint wom?n ) AND PUBYEAR AFT 1993
SRCTITLE(*field ornith*) AND VOLUME(75) AND ISSUE(1) AND PAGES(53-66)
To work out what this query does, it is worth looking again at the Scopus Advanced Search page and the help it provides. There is a list of all the fields you can use in a query. Clicking on one will cause an explanation with an example to appear beside the list.
So, 'TITLE-ABS-KEY' is useful for:

As you type Scopus offers code suggestions.
Double click or press "enter" to add to advanced search.
Code: TITLE-ABS-KEY
Name: Compound Field

A combined field that searches abstracts, keywords, and article titles.

For Example:
Entering TITLE-ABS-KEY("heart attack") will return documents with "heart attack" in their abstracts, article titles, or keyword fields.

Note:
TITLE-ABS-KEY is the Basic Search default search field.

There is also a help guide which lists all the codes for you.
That just leaves '?' and '*', which are common enough characters in boolean searches for any individual character and any string of characters.
Identifying an Institution
Scopus records the 'affiliation' of the authors in its citations. Affiliations will change over time as people move jobs or take on new involvements. An entomologist may be affiliated to a University and the 'Bumblebee Conservation Society' at the same time. Affiliated organisations themselves might appear more than once in the database, confusingly.
Using the Scopus Affiliation Search will help you to find the AF-ID for your institution. The number for 'De Montfort University' is 60017098, for example.

Tuesday, January 27, 2009

Using the Scopus API - 1. Getting started.

Scopus is one of the most important abstract and indexing databases available to people in my University. Usually, people are happy to log in and search within the Scopus interface, but there are possible uses for including content from Scopus within a web site. Scopus announced that an API was available back in March 2008. There was some interest expressed at the time, but there is not much in the way of examples and developer notes on how to use it. I am trying to work out for myself some of the possibilities of how it can be used.

Examples


How to get started.


Before you can do anything with the Scopus API, you need to register for an API key. The form asks for basic information about who you are (name, email address), the web site on which you are developing and a password. You will be sent a Developer Key by email. You are also asked to agree that you have read and understand the Scopus Registered User Agreement and agree to be bound by all of its terms and conditions. Rather than just tick the box, you should read the agreement to make sure you are not trying to build something that breaks the agreement.
Once registered you can access 'My Scopus API' where you can get reminders of lost developer keys. If you are developing on one machine before making your code live on another one, you will need to register for each site. Once you have registered, it is possible to register for other sites where you want to use the API.

Placing the code on your site


There is a code example on the Scopus API documentation page.
Stepping though this example we find:
1. Files on www.scopus.com

<link rel="stylesheet" type="text/css" href="http://www.scopus.com/scsearchapi/stylesheets/css_scapi_list_hilight.css">
<script type="text/javascript" src="http://www.scopus.com/scsearchapi/scripts/scapi.jsp">

2. Two sections of javascript

<script type="text/javascript">
<!-- SECTION 2 : Call back -->
callback = function(){ document.scapiForm.searchButton.disabled = false; }
<!-- SECTION 3 : Running Search -->
runSearch = function(){
document.scapiForm.searchButton.disabled = true;
var varSearchObj = new searchObj();
varSearchObj.setSearch(document.scapiForm.searchString.value);
scapi.search(varSearchObj);
}
<!-- SECTION 4 : Setting defaults -->
<script type="text/javascript"> scapi.setDeveloperID("--INSERT YOUR DEVELOPER ID HERE--");
scapi.setCallback(callback);
</script>



There is also a form to add to the body of your web page.

<body>
<h2>Search Form:</h2>
<form name="scapiForm" onsubmit="return false">
<input type="text" name="searchString"/>
<button onClick="runSearch()" name="searchButton"/>SEARCH</button>
</form>
<h2>Returned SCAPI Content:</h2>
<div id="scapi">
None.
</div>
</body>

The form should look and act like this, at least to start with






Returned SCAPI Content:



None.

In the next post on this topic, I will look at how to configure the search form and the results that are returned.