A YASGUI plugin for visualizing SPARQL CONSTRUCT and DESCRIBE query results as interactive graphs with nodes (subjects/objects) and edges (predicates).
- ๐ท Interactive Graph Visualization: Automatic force-directed layout with smooth physics-based positioning
- ๐จ Smart Color Coding:
- ๐ต Light Blue (#97C2FC) = URIs
- ๐ข Light Green (#a6c8a6ff) = Literals
- โช Light Grey (#c5c5c5ff) = Blank nodes
- ๐ Orange (#e15b13ff) = rdf:type objects (classes)
- ๐ Navigation: Mouse wheel zoom, drag to pan, "Zoom to Fit" button
- โ Drag & Drop: Reorganize nodes by dragging them to new positions
- ๐ฌ Tooltips: Hover for full URI/literal details (300ms delay)
- โก Performance: Handles up to 1,000 nodes with <2s render time
- โฟ Accessible: WCAG AA color contrast, keyboard navigation support
npm install @matdata/yasgui-graph-plugin @zazuko/yasgui vis-networkimport Yasgui from '@zazuko/yasgui';
import GraphPlugin from '@matdata/yasgui-graph-plugin';
Yasgui.Yasr.registerPlugin('Graph', GraphPlugin);
const yasgui = new Yasgui(document.getElementById('yasgui'));<!-- YASGUI -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@zazuko/yasgui@4/build/yasgui.min.css">
<script src="https://cdn.jsdelivr.net/npm/@zazuko/yasgui@4/build/yasgui.min.js"></script>
<!-- Graph Plugin -->
<script src="https://cdn.jsdelivr.net/npm/@matdata/yasgui-graph-plugin/dist/yasgui-graph-plugin.min.js"></script>
<script>
// Plugin auto-registers as 'graph'
const yasgui = new Yasgui(document.getElementById('yasgui'));
</script>See the complete working example in demo/index.html.
const yasgui = new Yasgui(document.getElementById('yasgui'), {
requestConfig: {
endpoint: 'https://dbpedia.org/sparql'
}
});CONSTRUCT Query:
PREFIX ex: <http://example.org/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
CONSTRUCT {
ex:Alice rdf:type ex:Person .
ex:Alice ex:knows ex:Bob .
ex:Alice ex:name "Alice" .
ex:Bob rdf:type ex:Person .
ex:Bob ex:name "Bob" .
}
WHERE {}DESCRIBE Query:
PREFIX ex: <http://example.org/>
# Returns all triples about the specified resources
DESCRIBE ex:Alice ex:BobAfter running the query, click the "Graph" tab to see the visualization.
- Zoom: Mouse wheel (scroll up = zoom in, scroll down = zoom out)
- Pan: Click and drag the background
- Fit to View: Click the "Zoom to Fit" button to center the entire graph
- Drag Nodes: Click and drag any node to reposition it
- Tooltips: Hover over nodes/edges for 300ms to see full details
| Color | Meaning | Example |
|-------|---------|---------||
| ๐ต Light Blue (#97C2FC) | URI nodes | ex:Person, ex:Alice |
| ๐ข Light Green (#a6c8a6ff) | Literal values | "Alice", "30"^^xsd:integer |
| โช Light Grey (#c5c5c5ff) | Blank nodes | _:b1, _:addr1 |
| ๐ Orange (#e15b13ff) | rdf:type objects (classes) | ex:Person in ex:Alice rdf:type ex:Person |
The plugin uses sensible defaults but can be customized by extending the GraphPlugin class:
class CustomGraphPlugin extends GraphPlugin {
constructor(yasr) {
super(yasr);
}
// Override network options
getNetworkOptions() {
return {
...super.getNetworkOptions(),
physics: {
enabled: true,
stabilization: { iterations: 100 } // Faster but less optimal layout
}
};
}
}
Yasgui.Yasr.registerPlugin('customGraph', CustomGraphPlugin);npm install
npm run buildOutput: dist/yasgui-graph-plugin.min.js
- Build the plugin:
npm run build - Open
example/index.htmlin a browser - Try the sample queries in different tabs
npm run lint # ESLint check
npm run format # Prettier format- Quickstart Guide - Installation, usage, troubleshooting
- Data Model - Entity definitions and relationships
- Contracts - API specifications for YASR plugin and vis-network integration
- Specification - Complete feature specification
- [Constitution](./. specify/memory/constitution.md) - Project governance and principles
Tested on latest 2 versions of:
- โ Chrome
- โ Firefox
- โ Safari
- โ Edge
Requires ES2018+ support and Canvas API.
Contributions welcome! Please follow the project constitution (.specify/memory/constitution.md) for governance principles:
- Plugin-First Architecture - No YASGUI core modifications
- Visualization Quality - Performance (<2s for 1k nodes), accessibility (WCAG AA)
- Configuration Flexibility - Sensible defaults, but customizable
- Browser Compatibility - ES2018+, latest 2 browser versions
- Documentation - Keep docs updated with changes
- Built with vis-network for graph rendering
- Integrates with YASGUI SPARQL editor
- Follows the yasgui-geo plugin pattern
Current Version: 0.1.0 (MVP)
Implemented Features (v0.1.0):
- โ Basic graph visualization (US1)
- โ Navigation controls (US2)
- โ Color-coded nodes
- โ Prefix abbreviation
- โ Blank node support
- โ Performance optimization
Planned Features (Future):
- โณ Enhanced tooltips with datatype display (US4)
- โณ Manual testing across all browsers (US3 verification)
- โณ Large graph optimization (>1k nodes)
- โณ Custom color schemes
- โณ Layout algorithm selection
- Verify plugin is registered correctly
- Check browser console for errors
- Verify YASGUI version is ^4.0.0
- Ensure query type is CONSTRUCT or DESCRIBE
- Confirm query returns triples (check "Table" or "Response" tab)
- Verify results have RDF structure
- Limit results to <1000 nodes for best performance
- Disable physics after initial layout
- Consider using LIMIT clause in SPARQL query
For more help, see Quickstart Guide - Troubleshooting.
git clone https://github.com/yourusername/yasgui-graph-plugin.git
cd yasgui-graph-plugin
npm installThe project supports live development - edit source files and see changes immediately without rebuilding:
-
Start a local dev server (any HTTP server will work):
# Using Python python -m http.server 8000 # Using Node.js (http-server) npx http-server -p 8000 # Using VS Code Live Server extension # Right-click demo/index.html โ "Open with Live Server"
-
Open demo in browser:
http://localhost:8000/demo/index.html -
Edit source files (e.g.,
src/colorUtils.js):export function getNodeColor(node) { // Change colors here if (node.isBlankNode) return '#FF00FF'; // Magenta // ... }
-
Refresh browser - changes appear immediately! โก
The demo automatically loads ES modules directly from src/ in development mode, so no rebuild is needed.
Build the minified UMD bundle for distribution:
npm run buildOutput: dist/yasgui-graph-plugin.min.js (bundled with vis-network)
npm test # Run all tests
npm run lint # Check code style
npm run format # Auto-fix formatting