SKILL.md
Institutional Repository Guide
Institutional repositories (IRs) are university-run digital archives that store and provide open access to their researchers' scholarly output — dissertations, journal articles, conference papers, datasets, and technical reports. Subject repositories like arXiv, bioRxiv, SSRN, and RePEc serve similar functions for specific disciplines. Together, they form a distributed network of open scholarship that complements commercial databases.
This guide covers how to discover, access, and systematically harvest content from institutional and subject repositories for literature reviews, meta-analyses, and research data collection.
Repository Landscape
Types of Repositories
Institutional Repositories (IR):
- Run by universities to archive their researchers' output
- Examples: DSpace, EPrints, Fedora-based systems
- Discovery: OpenDOAR directory (v2.sherpa.ac.uk/opendoar)
Subject Repositories:
- Discipline-specific archives
- arXiv (physics, CS, math), bioRxiv, SSRN, RePEc, EarthArXiv
Aggregators:
- Harvest from many repositories into a single search interface
- BASE (Bielefeld Academic Search Engine)
- CORE (core.ac.uk, 200M+ open access articles)
- OpenAIRE (European research output)
Discovering Repositories
OpenDOAR (Directory of Open Access Repositories) is the primary registry for finding institutional repositories:
import urllib.request
import json
def search_opendoar(subject: str = None, country: str = None) -> list:
"""
Search the OpenDOAR registry for institutional repositories.
Args:
subject: Filter by subject area (e.g., "Biology", "Computer Science")
country: ISO country code (e.g., "US", "GB", "CN")
"""
base_url = "https://v2.sherpa.ac.uk/cgi/retrieve"
params = "?item-type=repository&format=Json"
if subject:
params += f"&filter=[[\"{subject}\",\"subject\"]]"
if country:
params += f"&filter=[[\"{country}\",\"country\"]]"
req = urllib.request.Request(base_url + params)
response = urllib.request.urlopen(req)
data = json.loads(response.read())
repositories = []
for item in data.get("items", []):
repo_info = {
"name": item.get("repository_metadata", {}).get("name", [{}])[0].get("name", ""),
"url": item.get("repository_metadata", {}).get("url", ""),
"oai_url": item.get("repository_metadata", {}).get("oai_url", ""),
"software": item.get("repository_metadata", {}).get("software", {}).get("name", ""),
"type": item.get("repository_metadata", {}).get("type", "")
}
repositories.append(repo_info)
return repositories
