A modern web application for exploring prosopographical data from the Syriaca.org project, built with vanilla JavaScript and SPARQL queries.
SPEAR provides an interactive interface for searching and analyzing historical persons, events, and relationships from Syriac sources. The application uses SPARQL queries against a Neptune database with a publicly accessible API to enable complex multi-faceted searches.
- Person Search: Find individuals by name, occupation, gender, relationships, and associated places
- Event Search: Explore historical events with filtering by participants, locations, and keywords
- Multi-select filters: Combine multiple criteria (events, relationships, places, occupations)
- Source filtering: Filter by specific historical sources (Letters of Severus, Lives of Eastern Saints, Chronicle of Edessa)
- Uncertainty analysis: Filter by certainty levels of historical claims
- Geographic filtering: Search by birth places, death places, residences, and event locations
- Query timeout handling: 15-second timeout prevents hanging requests
- Result limiting: Maximum 500 results per query for optimal performance
- POST requests: Eliminates URL length restrictions for complex queries
- Debounced search: Reduces server load during typing
- Vanilla JavaScript: No framework dependencies
- Modular design: Separate modules for persons, events, and factoids
- Responsive UI: Bootstrap-based interface with collapsible filters
- URL state management: Shareable URLs with filter parameters
- SPARQL Protocol: Standard SPARQL queries via POST requests
- Neptune compatibility: Optimized for AWS Neptune SPARQL endpoint
- Content-Type:
application/sparql-queryfor proper SPARQL handling - Error handling: Graceful degradation on query failures or timeouts
- Modern web browser with JavaScript enabled
- Access to SPARQL endpoint (configured in
person/search.js)
- Clone the repository
- Update
SPARQL_ENDPOINTin search modules to point to your endpoint - Serve files via HTTP server (required for CORS)
- Open
browse.htmlin your browser - Select search mode (Person, Event, or Factoid)
- Apply filters using the sidebar controls
- View results in the main content area
- Share searches via URL parameters
Update the endpoint URL in:
person/search.jsevent/search.jsfactoid/search.js
Adjust performance settings:
LIMIT 500: Maximum results per query15000ms: Query timeout duration- Filter size limits for complex queries
The application queries data from:
- SPEAR Prosopography Graph:
https://spear-prosop.org - Syriaca Persons Graph:
http://syriaca.org/persons#graph - Source collections: Letters of Severus, Lives of Eastern Saints, Chronicle of Edessa
- Chrome/Edge 88+
- Firefox 85+
- Safari 14+
Requires support for:
- Fetch API with AbortController
- ES6 modules
- CSS Grid/Flexbox
- Queries are limited to prevent timeouts
- Complex multi-filter searches may take 5-15 seconds
- Source filters are limited to prevent overly broad queries
- Results are paginated at 500 items maximum
spear/
├── browse.html # Main application entry point
├── modes/
│ ├── person.js # Person search interface
│ ├── event.js # Event search interface
│ └── factoid.js # Factoid search interface
├── person/
│ └── search.js # Person SPARQL queries
├── event/
│ └── search.js # Event SPARQL queries
└── factoid/
└── search.js # Factoid SPARQL queries
- Add UI elements to the appropriate mode file
- Update the filter state object
- Modify the SPARQL query builder
- Add URL parameter handling
Open source - see original Srophé Application license terms.