WebDAVからのWebサイト公開 は何をしますか?
このスキルを使用して、静的に生成済みの HTML/CSS/JSサイト(RDF-Turtle + SHACL + Jinja2パイプライン、例:sites/openlink/rdf/build.pyの出力)をVirtuoso WebDAVルートに公開し、マッピングされた公開ルートを設定します。サイトのコンテンツモデル(オントロジー、SHACLシェイプ、順序付け)はこのスキルの上流で作成および検証されます。このスキルの役割は、「ここに完成したHTMLが入ったgenerated/フォルダがあります。これをライブ公開してください」という段階から始まります。
これはweblog-from-webdavやosdi-inclusion-engineよりも意図的に範囲が狭くなっています。これらのスキルはリクエストごとにコンテンツをライブレンダリングします(カスタムVSP内でのWebDAVコレクション列挙、またはWebDAVソースのHTMLをラップする共有XSLTスキン)。このスキルのコンテンツは到着前に完全にレンダリングされています。公開はプレーンなWebDAV PUTと静的ファイルVHOST_DEFINEであり、VSPの実行やライブSPARQLクエリは含まれません。なぜその選択がなされ、いつ変更される可能性があるかについては、references/webdav-website-engine-gate.mdを参照してください。
ブロッキングゲート — ローカルファイルは有効な完了ではありません
ユーザーが生成されたサイトの公開、デプロイ、「ライブ化」、または何が起こるかの説明やファイルがローカルに存在するという主張を要求した場合、ユーザーが明示的にローカル/プレビューチェックのみを要求している場合を除き、説明は有効な完了ではありません。デフォルトの成果物は次のいずれかです:
- ライブで検証済みの公開サイト:ターゲットルートがローカルの
generated/出力と同じコンテンツを返す、または - 完全なデプロイ可能バンドル:
generated/*.html、サイトのassets/(site.css、theme.js)、パス置換されたtemplates/deploy-website-route.sql、およびREADME/実行メモファイル —scripts/validate_generated_website_bundle.pyがそれに対してパスすること。
いずれかを主張する前にreferences/webdav-website-engine-gate.mdを読んでください。デプロイメント認証情報(WebDAVまたはisql)が利用できない場合は、デプロイ可能バンドルで停止し、ライブ公開が認証済みアクセスの欠如によってブロックされていることを明確に述べてください — 仮説的な成功を説明しないでください。
最初の決定事項
公開前にこれらを確定してください:
- ソースパイプラインディレクトリ(例:
{LLM_ROOT}/Claude Generated/sites/openlink/)と、rdf/build.pyを最初に(再)実行する必要があるか、それともgenerated/がすでに最新か。 - ターゲットDAVコレクション(例:
/DAV/home/kidehen/sites/openlink/)。 - 公開ルート(例:
https://linkeddata.uriburner.com/sites/openlink/)。 - IDモード:SQLユーザー名/パスワード、
isqlWebID-TLS、WebID-TLS + 委任、WebDAVユーザー名/パスワード、WebDAV mTLS、またはWebDAV mTLS +On-Behalf-Of。 - 初回のルートブートストラップ(
isql+deploy-website-route.sqlが必要)か、既存ルートへのコンテンツのみの再公開か(references/webdav-publish-mode.mdのスコープ外の境界により、WebDAV公開のみ — ルート設定には一切触れません)。
ワークフロー
- ソースの
generated/出力が最新であることを確認します:(再)ビルドが要求された場合は、パイプライン独自のrdf/validate_shacl.pyを実行し、次にrdf/build.pyを変更せずに実行します — このスキルはその検証を再実装したりバイパスしたりしません。references/rdf-content-mode.mdを参照してください。 - 何かを書き込む前に、以前のメモリ/作業で
validate_generated_weblog_bundle、VHOST_DEFINE、DAV_RES_UPLOAD_STRSES_INT、website-from-webdavを検索し、既存の修正を再利用して再発見しないようにします。 - ターゲットルートがすでに存在するかどうかを判断します(
isql経由でターゲットパスのDB.DBA.HTTP_PATHとWS.WS.SYS_DAV_RESをクエリします)。存在しない場合はブートストラップします:実際のDAVパス/ルート/タイトルでtemplates/deploy-website-route.sqlを修正し、isqlで実行します。references/isql-route-mode.mdを参照してください。 - 公開前に
scripts/validate_generated_website_bundle.pyでバンドルを検証します。これはブロッキングです。 scripts/publish_static_bundle.pyを使用してWebDAV経由で公開します —generated/*.htmlとassets/*を再帰的にPUTし、後続のGET/PROPFIND比較で各書き込みを検証します。references/webdav-publish-mode.mdを参照してください。- 検証:ライブルートをフェッチし、提供されたバイトがローカルの
generated/ファイルと一致することを確認します(空白/属性順序の違いのみを許可し、パイプラインのフェーズ1検証と同じ許容範囲)。assets/site.css/theme.jsが正しいMIMEタイプでロードされることを確認します。 - 正確に何が起こったかを報告します:ルートがブートストラップまたは再利用されたか、公開されたファイルとそのDAVパス、検証結果 — または、認証情報が不足していた場合は、デプロイ可能バンドルの場所とライブ公開が行われなかったという明示的なステートメント。
モードリファレンス
- ルートブートストラップと
isqlTLS/WebID構文については、references/isql-route-mode.mdを読んでください。 - WebDAV公開とそのスコープ外の境界については、
references/webdav-publish-mode.mdを読んでください。 - パイプラインの境界(このスキルが
rdf/で何をし、何に触れないか)については、references/rdf-content-mode.mdを読んでください。 - ライブSPARQL/VSPレンダリングが選択されなかった理由については、
references/webdav-website-engine-gate.mdを読んでください。 - エージェントが呼び出し可能な操作については、
references/opal-tool-mode.mdを読んでください — v1では実装されていません。拡張ポイントとして文書化されています。
実用的なガードレール
- 警告を抑制した状態や
--skip-validate形式のショートカットでrdf/build.pyのSHACL検証を決して実行しないでください。ゲートに失敗することはコンテンツが公開準備ができていないことを意味し、回避すべき障害ではありません。 DB.DBA.DAV_RES_UPLOAD_STRSES_INT(静的ファイル以外のステップで使用する場合)は、プレーンな文字列ではなく、http(content, stream)を介してstring_output()ストリームを設定する必要があります。isqlを介してロードされるSQLでは$1、$2などのトークンを避けてください。これらはマクロ置換をトリガーする可能性があります。- 静的ファイル
VHOST_DEFINEはis_dav=>1、is_brws=>0、def_page=>'index.html'を使用します — VSPエントリポイントが実際に存在しない限りdef_page=>'index.vsp'を設定しないでください。存在しないVSPリソースを指すdef_pageは、サイトではなく生のソースまたは404を提供します。 - 同じホスト/パスの既存の競合する
VHOST_DEFINEを再定義する前に削除してください。これはweblog-from-webdavのルート削除→再定義パターンと同じです。 - 証明書を持つIDと委任されたプリンシパルは別個の事実として扱ってください:
-X/--certは呼び出しエージェントを識別し、-W/On-Behalf-OfはACL権限を評価するWebIDプリンシパルを識別します。 - 認証情報をスキル、生成されたSQL、ログ、またはコミットされたファイルに決して書き込まないでください。
- リモートアップロードと削除は、同じHTTP → WebDAV → iSQLの順序とプリンシパルPKCS#12パターン(
howto/remote-webdav-upload.ttl、howto/remote-resource-removal.ttl、prefs Steps 215–216)に従います。URIBurnerへの書き込み/削除はポート5443に送信します。PUT後は:5443GETとパブリック443 GETを別々に報告してください。DELETE後は、ユーザーが指定したURL、スラッシュバリアント、:5443GET、およびフォルダリストを確認してから削除を主張してください。
安全なVirtuoso ISQLエラー出力
このワークフローがOpenLinkのネイティブVirtuoso isqlクライアントを呼び出すときは常に、ベアクライアントオプションCOMMAND_TEXT_ON_ERROR=OFFを渡してください。例:isql {host}:{port} {user} {password} COMMAND_TEXT_ON_ERROR=OFF {script.sql}。これをSQL入力、スクリプト引数、または-iの前に配置してください。OFFはクライアントの内部値0にマップされ、クライアントが失敗したコマンド全体をエラー出力に追加するのを防ぎます。クライアントはOFF/ONを受け入れます。リテラル0は拒否されます。この設定に-uを使用しないでください(-uはU引数配列を設定します)。これはサーバー診断、シェル履歴、またはプロセス引数からシークレットを編集するものではありませんので、認証情報をSQLテキストやログから遠ざけてください。このVirtuoso固有のオプションをunixODBC/iODBC isqlクライアントに適用しないでください。