Diese Dokumentation beschreibt die SPARQL-Integration für den NFDI4Objects Knowledge Graph.
Die Implementation ermöglicht es, alle strukturierten Daten der Website über ein interaktives SPARQL-Interface abzufragen. Die Lösung ist vollständig clientseitig und benötigt keine Backend-Infrastruktur.
Jede Entität auf der Website (Personen, Projekte, Services, etc.) hat:
- Eine Markdown-Datei mit den Daten (z.B.
_persons/de/florian-thiery.md) - Eine TTL-Pointer-Datei (z.B.
_ttl/persons/florian-thiery.ttl) - Ein Layout-Template, das die TTL generiert (z.B.
_layouts/person-ttl.html)
Beispiel: Eine Person wird in RDF/TTL mit FOAF und NFDI-Ontologien beschrieben.
Datei: _plugins/aggregate_ttl.rb
Das Plugin läuft nach der Jekyll-Site-Generierung (post_write Hook) und:
- Sammelt alle
*.ttlDateien aus_site/ - Entfernt doppelte Namespace-Deklarationen
- Fügt alle zu einer einzigen
nfdi4objects.ttlzusammen - Speichert diese im Root von
_site/
Output: _site/nfdi4objects.ttl (ca. 12 KB mit aktuellen Daten)
Dateien:
_includes/sparql-interface.html- Die SPARQL-UI-Komponente_pages/services/sparql.md- Deutsche SPARQL-Seite_pages/en/services/sparql.md- Englische SPARQL-Seite
Technologien:
- YASGUI (Yet Another SPARQL GUI): Browser-basierter SPARQL-Editor und Result-Viewer
- Comunica: JavaScript SPARQL-Engine, die die TTL-Datei direkt im Browser lädt und abfragt
Workflow:
- Benutzer öffnet
/services/sparql/ - JavaScript lädt
nfdi4objects.ttlüber Comunica - Benutzer schreibt SPARQL-Query im YASGUI-Editor
- Query wird clientseitig ausgeführt
- Ergebnisse werden in YASGUI-Tabelle angezeigt
Dateien:
_data/sparql-examples-de.yml- Deutsche Beispiele_data/sparql-examples-en.yml- Englische Beispiele
7 vordefinierte Queries für häufige Anwendungsfälle:
- Alle Personen auflisten
- Personen mit ORCID-ID
- Alle Projekte (Trails)
- Personen und ihre Task Areas
- Projekt-Koordinatoren
- Anzahl Personen pro Task Area
- Alle Daten einer bestimmten Person
Die TTL-Dateien nutzen folgende Standard-Vokabulare:
- RDF/RDFS/OWL: Basis-Semantik
- SKOS: Preferred Labels, Definitionen
- FOAF: Personen, Namen, Mitgliedschaften
- Dublin Core (dcterms): Metadaten, Relationen
- Schema.org: Webseiten-Semantik
- NFDI Core:
https://nfdi.fiz-karlsruhe.de/ontology# - N4O:
https://nfdi4objects.net/ontology#(Custom NFDI4Objects-Ontologie)
# Lokaler Build
jekyll build
# Output
# - Alle individuellen TTL-Dateien werden generiert
# - Plugin aggregiert sie zu nfdi4objects.ttl
# - SPARQL-Seiten werden gebautBei jedem Build wird:
- Jekyll alle Markdown-Dateien in HTML/TTL konvertiert
- Das Plugin die TTL-Aggregation durchführt
- Die fertige
nfdi4objects.ttlfür SPARQL bereitgestellt
Wichtig: Stellen Sie sicher, dass:
- Der
_plugins/Ordner auf dem Build-Server vorhanden ist - GitHub Pages: Plugins funktionieren NUR mit GitHub Actions, nicht mit der automatischen Pages-Integration
- Die aggregierte
nfdi4objects.ttlöffentlich zugänglich ist
name: Build and Deploy
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
- name: Build site
run: bundle exec jekyll build
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./_site- Layout erstellen:
_layouts/ENTITY-ttl.html - TTL-Pointer erstellen:
_ttl/ENTITY/example.ttlmitlayout: ENTITY-ttl - Ontologie definieren: Passende RDF-Types und Properties verwenden
Bearbeiten Sie _data/sparql-examples-de.yml und _data/sparql-examples-en.yml:
- title: "Meine neue Query"
description: "Was diese Query macht"
query: |
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT * WHERE {
?s ?p ?o .
} LIMIT 10Aktuelle Größe: ~12 KB (23 TTL-Dateien)
Skalierung:
- Bis ~1 MB TTL: Keine Probleme
- 1-5 MB: Möglicherweise langsamer Ladezeit
-
5 MB: Erwägen Sie Server-seitigen SPARQL-Endpoint (z.B. Fuseki, Blazegraph)
Nach dem Deployment prüfen:
https://ihre-domain.de/nfdi4objects.ttlist erreichbar/services/sparql/lädt ohne JavaScript-Fehler- Beispiel-Queries funktionieren
- Browser-Konsole zeigt keine Comunica-Fehler
Problem: "TTL file not found"
- Prüfen Sie, ob
nfdi4objects.ttlim_site/Root existiert - Überprüfen Sie Plugin-Logs:
jekyll build --trace
Problem: "No results from SPARQL query"
- TTL-Syntax-Fehler: Validieren Sie einzelne TTL-Dateien
- Namespace-Probleme: Prüfen Sie Prefix-Deklarationen
- Browser-Konsole für Comunica-Fehler checken
Problem: "YASGUI doesn't load"
- CDN-Problem: Prüfen Sie Internet-Verbindung
- Content Security Policy: Erlauben Sie
unpkg.com - JavaScript Module-Support: Moderne Browser nötig
- SPARQL 1.1 Specification
- YASGUI Documentation
- Comunica Documentation
- RDF Turtle Format
- NFDI4Objects Original SPARQL
Die Implementation basiert auf der Architektur des NFDI4Objects Portals.
Verwendete Open-Source-Bibliotheken:
- YASGUI (MIT License)
- Comunica (MIT License)