Was macht Website aus WebDAV?
Nutzen Sie dieses Skill, um eine statische, bereits generierte HTML/CSS/JS-Website – das Ergebnis einer RDF-Turtle + SHACL + Jinja2-Pipeline wie sites/openlink/rdf/build.py – in einem Virtuoso WebDAV-Root mit einer zugeordneten öffentlichen Route zu veröffentlichen. Das Inhaltsmodell (Ontologie, SHACL-Shapes, Sortierung) der Site wird vorgelagert erstellt und validiert; die Aufgabe dieses Skills beginnt mit "hier ist ein generated/-Ordner mit fertigem HTML, bringe ihn live."
Dies ist bewusst enger gefasst als weblog-from-webdav oder osdi-inclusion-engine: jene Skills rendern Inhalte bei jeder Anfrage live (WebDAV-Collection-Enumeration innerhalb eines maßgeschneiderten VSP oder ein gemeinsames XSLT-Skin, das WebDAV-quellierte HTML umschließt). Der Inhalt dieses Skills ist bereits vollständig gerendert, bevor er ankommt – die Veröffentlichung ist ein einfaches WebDAV-PUT plus eine VHOST_DEFINE für statische Dateien, ohne VSP-Ausführung und ohne Live-SPARQL-Abfragen. Siehe references/webdav-website-engine-gate.md, warum diese Entscheidung getroffen wurde und wann sie sich ändern würde.
Blockierende Hürde – Eine lokale Datei ist kein gültiger Abschluss
Wenn der Benutzer darum bittet, eine generierte Site zu veröffentlichen, zu deployen oder "live zu schalten", ist eine Beschreibung, was passieren würde, oder eine Behauptung, dass Dateien lokal existieren, kein gültiger Abschluss, es sei denn, der Benutzer bittet explizit nur um eine lokale/Vorschau-Prüfung. Das Standardergebnis ist entweder:
- eine live, verifizierte veröffentlichte Site: Die Zielroute liefert denselben Inhalt wie die lokale
generated/-Ausgabe, oder - ein vollständiges deploybares Bundle:
generated/*.html, dieassets/der Site (site.css,theme.js), eine pfad-substituiertetemplates/deploy-website-route.sqlund eine README-/Run-Notes-Datei – mit bestandener Prüfung durchscripts/validate_generated_website_bundle.py.
Lesen Sie references/webdav-website-engine-gate.md, bevor Sie eines von beiden beanspruchen. Wenn Berechtigungsnachweise für das Deployment (WebDAV und/oder isql) nicht verfügbar sind, stoppen Sie beim deploybaren Bundle und sagen Sie deutlich, dass die Live-Veröffentlichung aufgrund fehlenden authentifizierten Zugriffs blockiert ist – beschreiben Sie keinen hypothetischen Erfolg.
Erste Entscheidungen
Klären Sie diese Punkte, bevor Sie etwas veröffentlichen:
- Quell-Pipeline-Verzeichnis (z.B.
{LLM_ROOT}/Claude Generated/sites/openlink/) und obrdf/build.pyzuerst (erneut) ausgeführt werden muss odergenerated/bereits aktuell ist. - Ziel-DAV-Collection, z.B.
/DAV/home/kidehen/sites/openlink/. - Öffentliche Route, z.B.
https://linkeddata.uriburner.com/sites/openlink/. - Identitätsmodus: SQL-Benutzername/Passwort,
isqlWebID-TLS, WebID-TLS mit Delegation, WebDAV-Benutzername/Passwort, WebDAV mTLS oder WebDAV mTLS plusOn-Behalf-Of. - Handelt es sich um eine erstmalige Routen-Initialisierung (
isql+deploy-website-route.sqlerforderlich) oder eine reine Inhalts-Neuveröffentlichung einer bestehenden Route (nur WebDAV-Veröffentlichung, gemäß dem Gültigkeitsbereich vonreferences/webdav-publish-mode.md– es berührt nie die Routenkonfiguration).
Arbeitsablauf
- Bestätigen Sie, dass die Quell-
generated/-Ausgabe aktuell ist: Wenn Sie gebeten werden, (neu) zu bauen, führen Sie die pipeline-eigenerdf/validate_shacl.pyund dann unverändertrdf/build.pyaus – dieses Skill implementiert diese Validierung nicht neu und umgeht sie nicht. Siehereferences/rdf-content-mode.md. - Durchsuchen Sie vor dem Schreiben die vorherigen Erinnerungen/Arbeiten nach
validate_generated_weblog_bundle,VHOST_DEFINE,DAV_RES_UPLOAD_STRSES_INT,website-from-webdav; verwenden Sie bewährte Korrekturen, anstatt sie neu zu entdecken. - Bestimmen Sie, ob die Zielroute bereits existiert (Abfragen von
DB.DBA.HTTP_PATHundWS.WS.SYS_DAV_RESfür den Zielpfad viaisql). Wenn nicht, initialisieren Sie sie: Patchen Sietemplates/deploy-website-route.sqlmit dem tatsächlichen DAV-Pfad/Route/Titel und führen Sie es dann mitisqlaus. Siehereferences/isql-route-mode.md. - Validieren Sie das Bundle mit
scripts/validate_generated_website_bundle.pyvor jeder Veröffentlichung. Dies ist blockierend. - Veröffentlichen Sie via WebDAV mit
scripts/publish_static_bundle.py– PUTsgenerated/*.htmlundassets/*rekursiv, verifiziert jeden Schreibvorgang mit einem nachfolgenden GET/PROPFIND-Vergleich. Siehereferences/webdav-publish-mode.md. - Verifizieren Sie: Holen Sie die Live-Route ab, bestätigen Sie, dass die ausgelieferten Bytes mit der lokalen
generated/-Datei übereinstimmen (nur Unterschiede in Leerzeichen/Attributreihenfolge erlaubt, gleiche Toleranz wie die pipeline-eigene Phase-1-Verifikation), bestätigen Sie, dassassets/site.css/theme.jsmit korrekten MIME-Typen geladen werden. - Berichten Sie genau, was passiert ist: Route initialisiert oder wiederverwendet, veröffentlichte Dateien mit ihren DAV-Pfaden, Verifikationsergebnis – oder, falls Berechtigungen fehlten, den Ort des deploybaren Bundles und die explizite Aussage, dass keine Live-Veröffentlichung stattgefunden hat.
Modus-Referenzen
- Für die Routen-Initialisierung und
isqlTLS/WebID-Syntax lesen Siereferences/isql-route-mode.md. - Für die WebDAV-Veröffentlichung und ihren Gültigkeitsbereich lesen Sie
references/webdav-publish-mode.md. - Für die Pipeline-Grenze (was dieses Skill in
rdf/tut und nicht tut) lesen Siereferences/rdf-content-mode.md. - Warum die Live-SPARQL/VSP-Rendering nicht gewählt wurde, lesen Sie
references/webdav-website-engine-gate.md. - Für agent-aufrufbare Operationen lesen Sie
references/opal-tool-mode.md– in v1 nicht implementiert; als Erweiterungspunkt dokumentiert.
Praktische Schutzmaßnahmen
- Führen Sie die SHACL-Validierung von
rdf/build.pyniemals mit unterdrückten Warnungen oder--skip-validate-ähnlichen Abkürzungen aus; eine fehlschlagende Hürde bedeutet, dass der Inhalt nicht bereit zur Veröffentlichung ist, kein Hindernis, das es zu umgehen gilt. DB.DBA.DAV_RES_UPLOAD_STRSES_INT(falls für einen Schritt verwendet, der keine statische Datei ist) benötigt einenstring_output()-Stream, der viahttp(content, stream)befüllt wird, kein einfacher String.- Vermeiden Sie
$1,$2und ähnliche Tokens in SQL, das überisqlgeladen wird; sie können Makrosubstitution auslösen. - Eine
VHOST_DEFINEfür statische Dateien verwendetis_dav=>1,is_brws=>0,def_page=>'index.html'– setzen Siedef_page=>'index.vsp'nur, wenn ein VSP-Einstiegspunkt tatsächlich existiert; eindef_page, das auf eine nicht existierende VSP-Ressource verweist, liefert rohen Quellcode oder einen 404, nicht die Site. - Löschen Sie jede vorherige widersprüchliche
VHOST_DEFINEfür denselben Host/Pfad, bevor Sie sie neu definieren, dasselbe Muster wieweblog-from-webdav's Route-entfernen-dann-neu-definieren. - Behandeln Sie die zertifikatsbasierte Identität und den delegierten Prinzipal als separate Fakten:
-X/--certidentifiziert den aufrufenden Agenten,-W/On-Behalf-Ofidentifiziert den WebID-Principal, dessen ACL-Rechte ausgewertet werden sollen. - Schreiben Sie niemals Berechtigungsnachweise in das Skill, generiertes SQL, Logs oder committete Dateien.
- Remote-Uploads und -Löschungen folgen derselben HTTP → WebDAV → iSQL-Reihenfolge und dem Principal-PKCS#12-Muster (
howto/remote-webdav-upload.ttl,howto/remote-resource-removal.ttl, Prefs Steps 215–216). URIBurner-Schreib-/Löschvorgänge gehen an Port 5443. Melden Sie:5443GET und öffentliches 443 GET getrennt nach PUT; nach DELETE verifizieren Sie die vom Benutzer genannte URL, Varianten mit Schrägstrich,:5443GET und die Ordnerauflistung, bevor Sie die Löschung behaupten.
Sicherer Virtuoso ISQL-Fehlerausgang
Wann immer dieser Workflow den nativen Virtuoso isql-Client von OpenLink aufruft, übergeben Sie die bare-Client-Option COMMAND_TEXT_ON_ERROR=OFF, zum Beispiel isql {host}:{port} {user} {password} COMMAND_TEXT_ON_ERROR=OFF {script.sql}. Platzieren Sie sie vor SQL-Eingabe, Skriptargumenten oder -i. OFF ist dem internen Wert 0 des Clients zugeordnet und verhindert, dass der Client den vollständigen fehlgeschlagenen Befehl an die Fehlerausgabe anhängt. Der Client akzeptiert OFF/ON; das Literal 0 wird zurückgewiesen. Verwenden Sie nicht -u für diese Einstellung (-u befüllt das U-Argument-Array). Dies schwärzt keine Geheimnisse aus Server-Diagnosen, Shell-Verlauf oder Prozessargumenten, daher halten Sie Berechtigungsnachweise aus SQL-Text und Logs heraus. Wenden Sie diese Virtuoso-spezifische Option nicht auf unixODBC/iODBC isql-Clients an.